如何查看正在应用于请求的nginx重写规则?

前端之家收集整理的这篇文章主要介绍了如何查看正在应用于请求的nginx重写规则?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试调试为什么某些重写规则不能在我的登台服务器上运行,即使它们在我的虚拟机上运行.

似乎当我重新启动Nginx时,它根本没有看到我的更改.

有没有办法可以看到Nginx中实际加载的confs是什么,或者记录对传入请求应用了哪些重写规则?

最佳答案
您可以使用几种策略来调试Nginx请求和响应处理.

特定于重写的日志记录

如果在服务器块中启用rewrite_log directive,然后重新加载Nginx配置,您将获得一大堆信息(通知严重性),了解Nginx在重写时对您的请求做了什么.

但是,如果您需要深入研究,则可以在更广泛的层面上启用调试.

虚拟主机广泛调试

通过将Nginx日志记录设置为调试级别,您将获得Nginx在处理请求和响应时所执行的所有操作的非常详细的帐户.这是很多信息,但你对Nginx的每个问题的答案都包含在其中.

获取调试日志记录的最简单方法是在您要诊断要调试的服务器块的error_log指令上设置严重性.替换可能存在的任何现有严重性关键字,如信息或警告.如果特定服务器块没有error_log指令,则应添加一个(因为将服务器范围的error_log更改为debug将导致大量噪声.

完成此更改后,您需要使Nginx重新加载其配置(无需重新启动).

例子:

现有error_log的严重性:

改变这个:

server {
  server_name foo.example.com;
  error_log /var/log/Nginx/foo.example.com.error_log info;
  [...]

对此:

server {
  server_name foo.example.com;
  error_log /var/log/Nginx/foo.example.com.error_log debug;

现有error_log,没有现有严重性:

改变这个:

server {
  server_name foo.example.com;
  error_log /var/log/Nginx/foo.example.com.error_log;
  [...]

对此:

server {
  server_name foo.example.com;
  error_log /var/log/Nginx/foo.example.com.error_log debug;

没有现有的error_log:

改变这个:

server {
  server_name foo.example.com;
  [...]

对此:

server {
  server_name foo.example.com;
  error_log /var/log/Nginx/foo.example.com.error_log debug;

通过IP地址进行有针对性的调试

如果你正在运行一个繁忙的站点,甚至打开单个虚拟主机的调试可能会以严重的性能下降而结束(将大量日志写入磁盘会减慢速度)并且你将会有太多无关紧要的调试问题.你永远不会知道发生了什么.

在这种情况下,您只能对来自特定IP地址(例如您正在测试的计算机)的请求启用调试.为此,您需要编辑主Nginx配置文件(例如/etc/Nginx/Nginx.conf),找到事件部分,并使其如下所示:

events {
  debug_connection 192.0.2.42;
}

将192.0.2.42替换为Nginx将看到的IP地址(因此,可能是NAT网关的公共IP地址,或您的代理,而不是工作站的IP).重新加载Nginx.

您现在将获得来自该IP(并且只有该IP)的所有连接的调试日志.如果需要调试来自多个位置的请求,可以多次重复debug_connection指令,或指定CIDR样式的网络掩码以覆盖整个IP块.

激光制导调试

如果您决定只调试给定位置块中的请求,则可以在该块中添加error_log指令,这样您就可以将调试日志写入单独的位置.像这样的东西可以解决这个问题:

server {
  server_name foo.example.com;

  location ~ ^/somewhere/.*\.PHP {
    error_log /tmp/somewhere_PHP.log debug;
    [...]
  }
}

现在你可以重新加载Nginx,发出请求,然后在/tmp/somewhere_PHP.log中查看所有的血腥细节.只需记住在完成后再次删除指令,否则你可能会在相当短的时间内填满/ tmp分区.

猜你在找的Nginx相关文章