2012-12-09 16 views
11

Qual è la soluzione più rapida e pulita se si desidera eseguire il proxy di richiesta URL a due diversi backend tramite proxy basato sulla posizione.Nginx per posizione/pass rewriten uri a 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; 
} 

Con questa configurazione nginx pass "/ app1" o "/ app2" per delega e back-end non riconosce il comando/url ..

come per esempio vorrebbe passare a http://127.0.0.1:3000 solo /messages quando si accede a http://<nginx>/app1/messages - ma nella configurazione di cui sopra anche passare /app1/ come http://127.0.0.1:3000/app1/messages. Lo stesso vale per /app2

risposta

8

provare a mettere "/" alla fine del nome a monte esempio

proxy_pass http://127.0.0.1:8080/; 

Si prega di vedere questo post: How to preserve request url with nginx proxy_pass

+4

Questo non lavorare a causa di '" proxy_pass non può avere URI parte nella posizione data dall'espressione regolare ... "", vedere http://stackoverflow.com/questions/21662940/proxy-pass-cannot-have-uri-part-in-location. – frhd