我正在使用proxy_pass,并希望记录proxy_pass使用的URI。除了URI本身,我可以记录进程的每个细节,如$upstream_addr(IP)。我错过了什么还是这是不可能的?
proxy_pass
$upstream_addr
sirbozc51#
我相信您希望使用的日志格式变量是$proxy_host。Nginx无功参考$proxy_host在proxy_pass指令中指定的代理服务器的名称和端口
$proxy_host
4nkexdtk2#
我正在使用proxy_pass,并希望记录proxy_pass使用的URI。有$upstream_addr,但您仍然无法在那里获得完整的URI。这取决于具体情况,但如果您的应用已经投入生产,请添加$upstream_addr并检查上游的访问日志。如果您的应用仍在调试中,请在error_log指令中使用nginx的debug级别。我希望得到完整的URI,因为我的参数有一点小麻烦。一些他们似乎被忽略了,我试图记录这些。那么,您可能会遇到nginx的proxy_pass URI处理规则。请求URI按如下方式传递到服务器:如果使用URI指定proxy_pass指令,则在将请求传递到服务器时,规范化请求URI中与位置匹配的部分将替换为指令中指定的URI:
error_log
debug
location /name/ { proxy_pass http://127.0.0.1/remote/; }
如果指定proxy_pass时不带URI,则请求URI将以处理原始请求时客户端发送的相同形式传递到服务器,或者在处理更改的URI时传递完整的规范化请求URI:
location /some/path/ { proxy_pass http://127.0.0.1; }
如果需要将完整的URI传递给上游,只需指定proxy_pass的上游URI,而不是上游URI,并删除任何尾随的正斜杠。
proxy_pass http://backend_upstream;
svmlkihl3#
在我的第一个NGINX配置中,当我认为我应该传递一个好的URI时,我与从上游服务器得到大量404错误作斗争。我可以记录我的NGINX服务器接收的URI,但从来不确定我的NGINX服务器传递给上游服务器的是什么。在我的经验和研究中,我从来没有找到一种方法来记录NGINX传递给处理客户端请求的NGINX服务器的是什么。但是,上游服务器知道NGINX服务器正在请求的完整URI。在我的情况下,上游服务器是由另一个团队处理的,我没有访问那个服务器上的日志。最后我意识到,为什么不使用我自己的上游服务器,在那里我可以访问日志,也可以指定它如何记录日志。我可以很容易地做到这一点,因为我有多个NGINX服务器是我的开发环境。我使用第一个NGINX服务器作为我正在配置的代理服务器,第二个作为上游服务器。我将调用我正在配置的原始NGINX服务器“MyProxyServer.com“我将调用我正在使用的上游服务器,以记录MyProxyServer.com传递的URI“Upstream.com“在www.example.com上MyProxyServer.com,我配置了:
location /upstream/ { access_log /etc/nginx/logs/received_requests.log logformat1; proxy_pass https://Upstream.com/; }
在www.example.com上Upstream.com,我配置了:
location / { access_log /etc/nginx/logs/unexpected_uri.log logformat1; try_files /unexpected.html =123; } location /uricapture/ { access_log /etc/nginx/logs/uri_passed.log logformat1; try_files /index.html =234; }
使用您最喜欢的客户端GET https://MyProxyServer.com/uricapture/the/final/endpoint/在www.example.com上MyProxyServer.com我可以检查日志,看到它收到了GET请求。GET /uricapture/the/final/endpoint/在www.example.com上Upstream.com我可以检查日志,在uri_passed. log中,我看到MyProxyServer.com请求:GET /the/final/endpoint/我找回了我设置的index.html文件。
3条答案
按热度按时间sirbozc51#
我相信您希望使用的日志格式变量是
$proxy_host
。Nginx无功参考
$proxy_host
在proxy_pass指令中指定的代理服务器的名称和端口4nkexdtk2#
我正在使用proxy_pass,并希望记录proxy_pass使用的URI。
有
$upstream_addr
,但您仍然无法在那里获得完整的URI。这取决于具体情况,但如果您的应用已经投入生产,请添加
$upstream_addr
并检查上游的访问日志。如果您的应用仍在调试中,请在
error_log
指令中使用nginx的debug
级别。我希望得到完整的URI,因为我的参数有一点小麻烦。一些他们似乎被忽略了,我试图记录这些。
那么,您可能会遇到nginx的
proxy_pass
URI处理规则。请求URI按如下方式传递到服务器:
如果使用URI指定proxy_pass指令,则在将请求传递到服务器时,规范化请求URI中与位置匹配的部分将替换为指令中指定的URI:
如果指定proxy_pass时不带URI,则请求URI将以处理原始请求时客户端发送的相同形式传递到服务器,或者在处理更改的URI时传递完整的规范化请求URI:
如果需要将完整的URI传递给上游,只需指定
proxy_pass
的上游URI,而不是上游URI,并删除任何尾随的正斜杠。svmlkihl3#
在我的第一个NGINX配置中,当我认为我应该传递一个好的URI时,我与从上游服务器得到大量404错误作斗争。我可以记录我的NGINX服务器接收的URI,但从来不确定我的NGINX服务器传递给上游服务器的是什么。在我的经验和研究中,我从来没有找到一种方法来记录NGINX传递给处理客户端请求的NGINX服务器的是什么。
但是,上游服务器知道NGINX服务器正在请求的完整URI。在我的情况下,上游服务器是由另一个团队处理的,我没有访问那个服务器上的日志。最后我意识到,为什么不使用我自己的上游服务器,在那里我可以访问日志,也可以指定它如何记录日志。我可以很容易地做到这一点,因为我有多个NGINX服务器是我的开发环境。我使用第一个NGINX服务器作为我正在配置的代理服务器,第二个作为上游服务器。
我将调用我正在配置的原始NGINX服务器“MyProxyServer.com“我将调用我正在使用的上游服务器,以记录MyProxyServer.com传递的URI“Upstream.com“
在www.example.com上MyProxyServer.com,我配置了:
在www.example.com上Upstream.com,我配置了:
使用您最喜欢的客户端GET https://MyProxyServer.com/uricapture/the/final/endpoint/
在www.example.com上MyProxyServer.com我可以检查日志,看到它收到了GET请求。GET /uricapture/the/final/endpoint/
在www.example.com上Upstream.com我可以检查日志,在uri_passed. log中,我看到MyProxyServer.com请求:GET /the/final/endpoint/
我找回了我设置的index.html文件。