我正试图在nginx上的多个上游服务器之间路由流量,如下所示:
upstream app_a {
server unix:/tmp/app_a.sock fail_timeout=10;
# For a TCP configuration:
# server localhost:8000 fail_timeout=0;
}
server {
#listen 80; ## listen for ipv4; this line is default and implied
#listen [::]:80 default ipv6only=on; ## listen for ipv6
index index.html index.htm;
server_name localhost;
root /home/ubuntu/app_a/www/staging/static;
location ~ ^/app_a/(.*)$ {
try_files $1 @proxy_to_app_a;
}
location @proxy_to_app_a {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_a;
}
不幸的是,应用程序不知道完整的uris并期望坐在root上 - 这意味着我需要在传递给应用程序时重新编写uri,这就是为什么我认为这可能有用:
location ~ ^/app_a/(.*)$ {
try_files $1 @proxy_to_app_a;
}
如果位置只是/
(由于上述根本问题),该应用程序正常工作,但这种基于正则表达式的解决方案似乎无法正常工作。我需要做什么才能使应用在网址中获得/
而不是app_a
?
谢谢
答案 0 :(得分:4)
location /app_a/ {
rewrite /app_a/(.*) /$1 break;
proxy_set_header Host $http_host;
proxy_pass http://app_a;
}