反向代理 – 删除子目录

在不久的将来,我将有3个nginx服务器。 一个是两个SSL的反向代理。 所以,例如,我去:

https://www.mysitename.com/site1 

本例中的另外两台服务器是site1和site2。 我在代理上安装了SSL证书,我想使用反向代理(因为所有3都在内部networking上,所以SSL不是必需的)。为了testing目的,我使用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我希望它基本上返回通常来自本地主机:8081(或更晚的下线为另一台服务器的内部IP)。

有没有办法让本地主机调用去掉“site1”? 它似乎在做的是使用localhost:8081 / site1。 站点1和站点2的性质是“/ login / index”或“/ whatever / list”等,没有“站点1”。

在站点控制器中也有redirect(使用redirect_to),从/ login / index到/ whatever / list之类的东西。

我将不得不重新devise网站的URL使用site1? 或者NGINX代理可以解决这个问题吗?

谢谢。

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

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

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

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

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

注意proxy_pass指令中的尾部/它将取代由位置(即/site1/匹配的部分原始URI。