我面临以下问题: 我已经设置了nginx来监听在不同端口上运行uwsgi的两个不同的上游应用服务器。这两个应用程序使用相同的静态文件,但根据nginx位置,第一个应用程序或第二个应用程序被加载:
server {
listen 80;
server_name localhost;
charset utf-8;
client_max_body_size 75M;
# Proxy connections to the application servers
# app_servers
location /firstapplication {
include /etc/nginx/mime.types;
proxy_pass http://app_servers_firstapplication/;
proxy_redirect off;
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_set_header X-Forwarded-Host $server_name;
rewrite /?(?!/firstapplication)/(.+) /firstapplication/$1 last;
}
location /secondapplication {
include /etc/nginx/mime.types;
proxy_pass http://secondapplication/;
proxy_redirect off;
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_set_header X-Forwarded-Host $server_name;
rewrite /?(?!/secondapplication)/(.+) /secondapplication/$1 last;
}
location ^~ /scripts/ {
alias /webapps/scripts/;
}
location ^~ /css/ {
alias /webapps/html/css/;
}
location ^~ /graphics/ {
alias /webapps/html/graphics/;
}
location ^~ /fonts/ {
alias /webapps/html/fonts/;
}
}
当我调用mydomain / firstapplication或mydomain / secondapplication时,相应应用程序的初始页面会被正确加载。
但是当应用程序的初始页面被加载并且我点击应用程序中的链接时,它正在使用应用程序的网址,例如/ contact而不是/ firstapplication / contact,因此我对于我调用的每个网址都会出现404错误应用程序。
我想在nginx中使用特定于位置的重写来解决这个问题,如下所示:
rewrite /?(?!/firstapplication)/(.+) /firstapplication/$1 last;
和
rewrite /?(?!/secondapplication)/(.+) /secondapplication/$1 last;
当我加载页面/第一个应用程序时,我使用负向lookbehind断言来避免循环重定向。 这个重写正则表达式应该工作我在这个在线编辑器中测试它:http://regex101.com/r/yH7sP0/1
不幸的是,nginx不会重定向应用程序网址,但仍然会导致404错误。
我可以使用nginx重写模块来实现我的目标吗?或者我可以使用其他方法在同一个nginx服务器上运行两个不同的应用程序?