如何查看正在应用于请求的nginx重写规则?
我正在尝试调试为什么某些重写规则不能在我的登台服务器上运行,即使它们在我的虚拟机上运行. 似乎当我重新启动nginx时,它根本没有看到我的更改. 有没有办法可以看到nginx中实际加载的confs是什么,或者记录对传入请求应用了哪些重写规则? 最佳答案
您可以使用几种策略来调试nginx请求和响应处理.
特定于重写的日志记录 如果在服务器块中启用 但是,如果您需要深入研究,则可以在更广泛的层面上启用调试. 虚拟主机广泛调试 通过将nginx日志记录设置为调试级别,您将获得nginx在处理请求和响应时所执行的所有操作的非常详细的帐户.这是很多信息,但你对nginx的每个问题的答案都包含在其中. 获取调试日志记录的最简单方法是在您要诊断要调试的服务器块的error_log指令上设置严重性.替换可能存在的任何现有严重性关键字,如信息或警告.如果特定服务器块没有error_log指令,则应添加一个(因为将服务器范围的error_log更改为debug将导致大量噪声. 完成此更改后,您需要使nginx重新加载其配置(无需重新启动). 例子: 现有error_log的严重性: 改变这个:
对此:
现有error_log,没有现有严重性: 改变这个:
对此:
没有现有的error_log: 改变这个:
对此:
通过IP地址进行有针对性的调试 如果你正在运行一个繁忙的站点,甚至打开单个虚拟主机的调试可能会以严重的性能下降而结束(将大量日志写入磁盘会减慢速度)并且你将会有太多无关紧要的调试问题.你永远不会知道发生了什么. 在这种情况下,您只能对来自特定IP地址(例如您正在测试的计算机)的请求启用调试.为此,您需要编辑主nginx配置文件(例如/etc/nginx/nginx.conf),找到事件部分,并使其如下所示:
将192.0.2.42替换为nginx将看到的IP地址(因此,可能是NAT网关的公共IP地址,或您的代理,而不是工作站的IP).重新加载nginx. 您现在将获得来自该IP(并且只有该IP)的所有连接的调试日志.如果需要调试来自多个位置的请求,可以多次重复debug_connection指令,或指定CIDR样式的网络掩码以覆盖整个IP块. 激光制导调试 如果您决定只调试给定位置块中的请求,则可以在该块中添加error_log指令,这样您就可以将调试日志写入单独的位置.像这样的东西可以解决这个问题:
现在你可以重新加载nginx,发出请求,然后在/tmp/somewhere_php.log中查看所有的血腥细节.只需记住在完成后再次删除指令,否则你可能会在相当短的时间内填满/ tmp分区. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |