反向代理-删除子目录


27

在不久的将来,我将拥有3台nginx服务器。一种是其他两种SSL的反向代理。因此,例如,我去:

https://www.mysitename.com/site1

此示例中的其他两个服务器是site1和site2。我在代理服务器上安装了SSL证书,并且想使用反向代理服务器(因为全部3个都在内部网络上,所以不需要SSL)。出于测试目的,我让nginx在443上监听SSL /反向代理,在端口8081是用于site1的Rails应用程序,而8082是用于site2。

我有这个...

server {
    listen                  443;
    server_name             mysitename.com;

    ssl                     on;
    ssl_certificate         ssl/mysitename.com.crt;
    ssl_certificate_key     ssl/mysitename.com.key;
    keepalive_timeout       60;

    location /site1 {
        proxy_pass http://localhost:8081;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect http:// https://;
    }

    location /site2 {
        proxy_pass http://localhost:8082;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect http:// https://;
    }
}

因此,当我访问www.mysitename.com/site1时,我希望它基本上返回通常来自localhost:8081的内容(或稍后返回另一台服务器的内部IP)。

有没有办法从本地主机调用中删除“ site1”?似乎正在使用localhost:8081 / site1。site1和site2站点的性质为“ / login / index”或“ / whatever / list”等,没有“ site1”。

站点控制器中还存在重定向(使用redirect_to),该重定向从/ login / index到/ whatever / list。

我是否需要重新设计站点的URL才能使用site1?还是NGINX代理可以解决?

谢谢。


对于Socket.io,请尝试添加rewrite /(.*)/socket.io/ break;。 serverfault.com/questions/444532/…–
user956584

Answers:


53

引用http://nginx.org/r/proxy_pass

如果使用URI指定proxy_pass,则在将请求传递到服务器时,与该位置匹配的规范化请求URI的一部分将被伪指令中指定的URI代替:

location /name/ {
    proxy_pass http://127.0.0.1/remote/;
}

也就是说,您必须proxy_pass像这样使用:

location /site1/ {
    proxy_pass http://localhost:8081/;
    ...
}

注意尾随/proxy_pass指令-它会替代的位置,也就是匹配原始的URI的一部分 /site1/


2
解决这个问题只用了斜杠!!感谢那。现在弄清楚我将如何处理redirect_to-但这不是服务器问题,因此我将在其他地方解决。
Chromag 2012年

请注意,您也需要在proxy_pass URL末尾加上斜杠!
丹尼尔·希尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.