如果你想通过基于位置的proxypass代理URL请求到两个不同的后端,最快和最干净的解决scheme是什么。
location /app1/ { alias /var/www/ruby/public; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; try_files $uri $uri/ @ruby; } location @ruby { proxy_pass http://127.0.0.1:3000; } location /app2/ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; try_files $uri $uri/ @other; } location @other { proxy_pass http://127.0.0.1:8080; }
有了这个configuration,nginx将“/ app1”或“/ app2”传递给代理,而后端无法识别url / command。
例如在访问http://<nginx>/app1/messages
/messages
时只想传递给http://127.0.0.1:3000
http://<nginx>/app1/messages
,但是在上面的configuration中还要通过/app1/
作为http://127.0.0.1:3000/app1/messages
。 /app2
尝试在上游名称的末尾加上“/”,例如:
proxy_pass http://127.0.0.1:8080/;
请看这篇文章: 如何使用nginx proxy_pass保存请求的URL