2012-12-09 16 views
11

To najszybsze i najczystsze rozwiązanie, jeśli chcesz prosić o podanie adresu URL do dwóch różnych serwerów proxy za pośrednictwem proxy na podstawie lokalizacji.Nginx na lokalizację/pass przepisuje uri do 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; 
} 

Dzięki tej konfiguracji nginx pass "/ app1" lub "/ APP2" do pełnomocnika i backend nie rozpozna komendy/url ..

jak na przykład chciałby przejść do http://127.0.0.1:3000 tylko /messages podczas uzyskiwania dostępu do http://<nginx>/app1/messages - ale w konfiguracji powyżej również przekazać /app1/ jako http://127.0.0.1:3000/app1/messages. To samo dotyczy /app2

Odpowiedz

8

spróbuj umieścić "/" na końcu upstream nazwy np

proxy_pass http://127.0.0.1:8080/; 

Proszę zobaczyć ten wpis: How to preserve request url with nginx proxy_pass

+4

to nie działa z powodu '" proxy_pass nie może mieć URI część w położeniu podana przez wyrażenie regularne ... "', zobacz http://stackoverflow.com/questions/21662940/proxy-pass-cannot-have-uri-part-in-location. – frhd

Powiązane problemy