【问题标题】:Nginx as Reverse Proxy - Double Proxy Pass ? is this possible?Nginx 作为反向代理 - 双代理通行证?这可能吗?
【发布时间】:2014-04-13 03:09:45
【问题描述】:

当您将 nginx 作为 apache 的反向代理服务器运行时,任何人都会遇到常见问题,我想将双 proxy_pass 变量添加到 nginx conf。文件,但 nginx 似乎不允许这样做。

例如我遇到的情况是 在我的网站中,我有由 openfire 运行的聊天引擎,它使用 Jetty 在端口 5280 上运行,并且我已将 apache 代理传递指令设置为

ProxyPass /member-chat http://xyx.com:5280/http-bind
ProxyPassreverse /member-chat http://xyx.com:5280/http-bind
ProxyRequests Off

但我想将“/member-chat”中的任何内容直接发送到聊天服务器而不是 apache,因为 apache 会再次将其代理传递给 openfire(成员聊天) ,这对于 apache 来说需要更多的时间和无用的加载。

当我添加 nginx 作为代理服务器时,我想像下面这样添加,但这不起作用,由于某种原因,它找不到位置给我 404 错误。

    location / {
        proxy_pass http://85.xxx.yyy.2x2:7080;
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        access_log off;
    }

   location ~ ^/member-chat {
       proxy_pass http://85.xxx.yyy.2x2:5280;
       proxy_connect_timeout 300;
    } 

【问题讨论】:

    标签: apache nginx proxy jetty openfire


    【解决方案1】:

    我相信您错过了为 Jetty 服务指定 URI。使用您当前的配置,将登陆 Jetty 端口的请求将是:

    http://85.xxx.yyy.2x2:5280/member-chat
    

    这是根据proxy_pass 文档。

    如果 proxy_pass 没有指定 URI,则在处理原始请求时将请求 URI 以与客户端发送的相同格式传递给服务器,或者在处理更改后的 URI 时传递完整的规范化请求 URI

    我不认为这是您期望看到的 Apache 配置的结果。尝试为 Apache 配置 proxy_pass 指令的 URI。

    location ~ ^/member-chat {
       proxy_pass http://85.xxx.yyy.2x2:5280/http-bind;
       proxy_connect_timeout 300;
    } 
    

    【讨论】:

    • 谢谢,但我仍然得到“nginx:[emerg]“proxy_pass”不能在正则表达式给出的位置或命名位置内包含URI部分,或者,,等”
    • 这似乎是 proxy_pass 指令的限制。我错过了。您真的需要在位置成员聊天中使用正则表达式吗?考虑使用“location /member-chat”,它将匹配任何前缀为“/member-chat”的请求。
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2020-01-05
    • 2021-06-17
    • 2011-10-20
    • 1970-01-01
    相关资源
    最近更新 更多