【问题标题】:Nginx: Get the upstream URI used by proxy_passNginx:获取proxy_pass使用的上游URI
【发布时间】:2020-11-15 07:03:31
【问题描述】:

我正在使用proxy_pass 并希望记录 proxy_pass 使用的 URI。

我可以记录除 URI 本身之外的进程的每个细节,例如 $upstream_addr (IP)。

是我遗漏了什么还是这不可能?

【问题讨论】:

标签: nginx logging nginx-reverse-proxy proxypass


【解决方案1】:

我相信您想要使用的变量是日志格式中的$proxy_host

Nginx Var Reference

$proxy_host proxy_pass 指令中指定的代理服务器的名称和端口

【讨论】:

  • 感谢您的回答。 $proxy_host 只是域名。我希望获得完整的 URI,因为我的参数有点麻烦。他们似乎被忽略的东西,我试图记录这些。似乎没有任何我可以使用的 $proxy_request_uri 函数,因为它通常与原始函数相同。
【解决方案2】:

我正在使用 proxy_pass 并希望记录 proxy_pass 使用的 URI。

$upstream_addr,但你仍然无法在那里获得完整的 URI。

这取决于,但如果您的应用已经投入生产,请添加 $upstream_addr 并检查您上游的访问日志。

如果您的应用仍在调试中,请在 error_log 指令中使用 nginx 的 debug 级别。

我希望获得完整的 URI,因为我的参数有点问题。他们似乎被忽略了一些东西,我试图记录这些。

嗯,你可能被 nginx 的 proxy_pass URI 处理规则击中了。

一个请求 URI 被传递给服务器,如下所示:

如果 proxy_pass 指令是用一个 URI 指定的,那么当一个请求被传递到服务器时,与该位置匹配的规范化请求 URI 的部分将被指令中指定的 URI 替换:

   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 传递给您的上游,只需指定您的上游而不是上游 URI 到您的 proxy_pass,并删除那里的任何尾部正斜杠。

proxy_pass http://backend_upstream;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 2023-03-08
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 2019-01-28
    相关资源
    最近更新 更多