每个位置的Nginx / pass重写uri到proxy_pass

如果你想通过基于位置的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