Nginx作为反向代理 - 双代理通行证?这可能吗?

时间:2014-03-10 05:54:57

标签: apache nginx proxy jetty openfire

当你运行nginx作为apache的反向代理服务器时,我遇到了常见的问题,我想在nginx conf中添加双个proxy_pass变量。文件但是nginx似乎不允许这样做。

例如我所拥有的情况 在我的网站上我有通过openfire运行的聊天引擎,它在端口5280上运行Jetty并且我已将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;
    } 

1 个答案:

答案 0 :(得分: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;
}