调试nginx配置文件的最佳方法?


37

我有一堆必须从apache移植到nginx的重写规则。

这是一个相当痛苦的过程,因为我无法查看我的重写规则和“是否”条件是否按我的意愿工作。

Apache确实对其重写模块进行了调试。我可以为Nginx做些什么?

Answers:


37

启用rewrite_log

rewrite_log on;

并在error_log指令中设置调试级别:

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

如此接近Apache;)我绝对必须看看nginx
Olivier Pons

请注意,这可以用于调试重写以外的其他用途。您可以添加“重写DEBUG DEBUG中断;” 在Nginx配置中您喜欢的任何地方,看看它何时被击中。除了触发要记录的行之外,此重写行实际上不执行任何操作(如果匹配位置“ DEBUG”,则将其替换为“ DEBUG”)。从技术上讲,您甚至可以输出如下变量:“ rewrite。* $ request break;” 或重写。*“''$ http_x_forwarded_for'$ request”中断;-尽管这会导致请求失败。最好将变量添加为access_log的自定义日志格式。
柯蒂斯·雅洛普

14

启用调试支持,然后在error_log中设置调试级别。

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

现在,您可以记录日志并发送请求了。可能有比您想要的更多的细节,但这有时可以节省很多时间。

哦,您应该知道,如果是邪恶的,至少在位置上下文中...


3
notice比调试重写要好得多debugerror_level因为它会跳过很多底层无关的调试信息(例如SSL或gzip详细信息;每个请求超过50行)。
Dan Dascalescu 2015年

1

使用日志和内置的调试支持绝对是最合理的方法。如果您正在早期进行一些快速的路由调试,并且只想通过浏览器/客户端进行交互,请使用返回4xx“ text”;指令也可以毫不费力地为您提供所需的答案。例如,

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

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

返回的网页中的文本将告诉您server触发了您的请求的阻止。

希望这可以帮助!
安德烈斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.