найкращий спосіб налагодження файлу конфігурації nginx?


37

У мене є купа правил перезапису, які мені доводиться переносити з apache в nginx.

Це досить болісний процес, тому що я не в змозі побачити, чи працюють мої правила перезапису та умови "якщо", як я хочу.

У Apache був налагоджений модуль перезапису. Що я можу зробити для nginx?

Відповіді:


37

Увімкнути rewrite_log:

rewrite_log on;

і встановити рівень налагодження в error_logдирективі:

error_log /var/log/nginx/localhost.error_log notice;

так близько до Apache;) я, безумовно, повинен поглянути на nginx
Олів'є Понс

Зауважте, що це можна використовувати більше, ніж для налагодження переписувачів. Ви можете додати "переписати перерву DEBUG DEBUG;" куди завгодно у конфігурації nginx і дивіться, коли він потрапить. Цей рядок перезапису ефективно нічого не робить (якщо розташування "DEBUG" зіставлено, замініть його на "DEBUG"), крім тригера для реєстрації рядка. Ви можете технічно навіть виводити такі змінні: "переписати. * $ Перерва на запит;" або перепишіть. * "'$ http_x_forwarded_for' $ request" перерва; - хоча це призводить до відмови запиту. Краще було б додати змінну до спеціального формату журналу для access_log.
Кертіс Яллоп

14

Увімкніть підтримку налагодження , а потім встановіть рівень налагодження в error_log.

error_log   /var/log/nginx/error.log debug;

Тепер ви можете піти на журнал і надсилати свої запити. Напевно, є більше деталей, ніж ви хочете, але це може бути рятівником.

О, і ви повинні знати, що якщо це зло , то принаймні в контексті локації ...


3
noticeнабагато краще, ніж debugяк error_levelдля налагодження перезаписів, тому що вона буде пропускати багато недоречної інформації про налагодження на низькому рівні (наприклад, SSL або gzip подробиці; 50+ рядків на запит).
Дан Даскалеску

1

Використання журналів та вбудованої підтримки для налагодження - це, безумовно, найбільш розумний спосіб. Якщо ви здійснюєте швидку налагодження маршрутизації на ранніх етапах і хочете взаємодіяти лише через браузер / клієнт, використовуючи зворотний 4xx "текст"; Директива може також дати вам відповідь, яку ви хочете, з дуже невеликими зусиллями. Наприклад,

http {
  server {
    listen 80;
    server_name mydomain.net;
    return 404 "mydomain 80 route";
  }

  server {
    listen 80 default_server;
    return 404 "default 80 route";
  }
}

Текст на поверненій веб-сторінці підкаже, який serverблок запущеного запиту.

Сподіваюся, це допомагає!
Андрес

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.