V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
a33291
V2EX  ›  NGINX

nginx 如何获取/打印完整代理路径?

  •  
  •   a33291 · 2 天前 · 1257 次点击
    以这个配置为例
    location /test {
    proxy_pass http://localhost/
    }
    当请求 /test/api?a=1 时 实际向上游发起的地址为 http://localhost/api?a=1
    这由 nginx 的内置机制自动完成

    现在,是否有 nginx 变量或者其他方案可以获取到这个 http://localhost/api?a=1 (目前是人工算的)

    如果自己利用 $uri $request_uri 之类的拼接很麻烦
    9 条回复    2025-03-21 14:20:38 +08:00
    choice4
        1
    choice4  
       2 天前   ❤️ 1
    ```conf
    location /test/ {
    proxy_pass http://localhost/;
    proxy_set_header Host $proxy_host;
    }
    ```
    a33291
        2
    a33291  
    OP
       2 天前
    @choice4 这个不行的,$proxy_host 不是全部路径,并且不支持规范化后的 path 输出
    66z
        3
    66z  
       2 天前   ❤️ 1
    add herader 的功能,加上内置变量拼接应该可以,写法问下 AI
    a33291
        4
    a33291  
    OP
       2 天前
    @66z 不好弄,自带的指令能力非常有限,同时比如 proxy_pass 尾部带/和不带/区别也很明显,这些细节在自己拼接 URL 非常难受,所以想要直接拿到 nginx 完全处置完成之后的结果 path
    Hanada
        6
    Hanada  
       1 天前   ❤️ 1
    这个靠配置是无法实现的,如果你要准确的上游 uri 的话,其他很多上游变量都需要单独导出。我主要是为了给我自己开发的上游日志模块做变量支撑才实现的: https://github.com/HanadaLee/ngx_http_upstream_log_module
    a33291
        7
    a33291  
    OP
       1 天前
    @Hanada #6 感谢大佬,请教一下 $upstream_uri 就是已经规范化之后的最终上游地址了吗?

    另外这个变量貌似 openresty 还是 nginx 官方自己的 upstream 模块也输出这个变量,如果同时用的话感觉会冲突(主要是他默认版本就包含了 upstream 模块)
    Hanada
        8
    Hanada  
       1 天前   ❤️ 1
    @a33291 $upstream_uri 是回上层的原始 URI ,也就是实际发给后端的 URI ,至于是否规范那就看你 nginx 配置了。nginx upstream 模块和 openresty 都没有这个变量,是我这个模块追加的,这个模块还包括一大堆其他变量(部分变量要配合补丁才能生效,我用 NGX_HTTP_EXT 宏注释了,没打补丁的话用不了这些模块),你可以单独抽出来做成一个独立模块。
    a33291
        9
    a33291  
    OP
       1 天前
    @Hanada #8 确实,不好意思我记错了,upstream 模块提供的是 upstream_addr 变量

    我会测试一下,再次感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2513 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 04:07 · PVG 12:07 · LAX 21:07 · JFK 00:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.