15

如果您想通过基于位置的 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/command ..

例如http://127.0.0.1:3000只想/messages在访问时传递给http://<nginx>/app1/messages- 但在上面的配置中也传递/app1/http://127.0.0.1:3000/app1/messages. 同样适用/app2

4

1 回答 1

15

尝试将“/”放在上游名称的末尾,例如

proxy_pass http://127.0.0.1:8080/;

请看这篇文章: 如何使用 nginx proxy_pass 保存请求 url

于 2012-12-19T18:18:50.880 回答