【发布时间】:2018-03-18 13:13:04
【问题描述】:
我正在尝试使用nginx反向代理同一主机/端口上的多个Web应用程序,使用不同的路径来区分应用程序。
我的 nginx 配置如下所示:
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header X-Forwarded-Ssl $proxy_x_forwarded_ssl;
proxy_set_header X-Forwarded-Port $proxy_x_forwarded_port;
upstream app1 {
server 192.168.0.1:8080;
}
upstream app2 {
server 192.168.0.2:8080;
}
server {
server_name my-application-server;
listen 80;
location /app1/ {
proxy_pass http://app1/;
}
location /app2/ {
proxy_pass http://app2/;
}
}
这会正确代理对我的应用上各个页面的任何请求 - 例如http://my-application-server/app1/context/login,但我的应用程序中的任何超链接都已损坏,因为它们缺少路径的 app1 部分 - 例如他们将我引导至http://my-application-server/context/login-success 而不是http://my-application-server/app1/context/login-success。
我尝试为proxy_redirect 和rewrite 添加各种值,但我所做的一切都无法说服这些链接正确呈现。
我的应用程序是在 tomcat 中运行的 java webapp,如果这有什么不同的话。我见过其他解决方案,我可以更改我的 webapp 的上下文路径,但我需要 nginx 透明地代理请求,而无需配置 tomcat 以了解 nginx 路径。
【问题讨论】: