лучший способ отладки конфигурационного файла 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 break;" где угодно в конфиге nginx и посмотрите, когда его ударили. Эта строка перезаписи фактически ничего не делает (если сопоставлено местоположение «DEBUG», замените ее на «DEBUG»), за исключением запуска строки для регистрации. Технически вы можете даже вывести переменные, например, так: "переписать. * $ Request break;" или переписать. * "'$ http_x_forwarded_for' $ request" break; - хотя это приводит к сбою запроса. Было бы лучше добавить переменную в пользовательский формат журнала для access_log.
Кертис
14

Включите поддержку отладки , затем установите уровень отладки в error_log.

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

Теперь вы можете вести журнал и отправлять свои запросы через. Там, вероятно, больше деталей, чем вы хотите, но иногда это может быть спасителем.

О, и вы должны знать, что если это зло , по крайней мере в контексте местоположения ...

rossnz
источник
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блок заблокировал ваш запрос.

Надеюсь это поможет!
Andres

fr_andres SupportsMonicaCellio
источник