2012-12-09 103 views
11

如果您想通過基於位置的proxypass將代理URL請求代理到兩個不同後端,最快和最乾淨的解決方案是什麼。每個位置的Nginx /通過重寫uri到proxy_pass

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」或「/ APP 2」,以代理和後端無法識別URL /命令..

如例如想傳遞給http://127.0.0.1:3000/messages當訪問http://<nginx>/app1/messages - 但在配置上面也通過/app1/http://127.0.0.1:3000/app1/messages。這同樣適用於/app2

回答

8

嘗試把「/」在上游名稱末尾 如

proxy_pass http://127.0.0.1:8080/; 

請看到這個帖子: How to preserve request url with nginx proxy_pass

+4

這並不是由於工作'「proxy_pass不能有URI部分位置由正則表達式給出......「',請參閱http://stackoverflow.com/questions/21662940/proxy-pass-cannot-have-uri-part-in-location。 – frhd