![nginx proxy_pass 根据位置/传递重写的 url 到不同的后端](https://linux22.com/image/602220/nginx%20proxy_pass%20%E6%A0%B9%E6%8D%AE%E4%BD%8D%E7%BD%AE%2F%E4%BC%A0%E9%80%92%E9%87%8D%E5%86%99%E7%9A%84%20url%20%E5%88%B0%E4%B8%8D%E5%90%8C%E7%9A%84%E5%90%8E%E7%AB%AF.png)
如果您想根据位置通过 proxypass 将 URL 请求代理到两个不同的后端,那么最快、最干净的解决方案是什么。
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;
}
使用此配置,nginx 将"/app1"
“ /app2
”传递给代理,但后端无法识别 url/命令。
例如,http://127.0.0.1:3000
在访问时只想传递给 /messages http://<nginx>/app1/messages
- 但在上面的配置中也传递/app1/
为http://127.0.0.1:3000/app1/messages
。同样适用于/app2