2012-12-09 19 views
11

Giải pháp nhanh nhất và sạch nhất nào nếu bạn muốn yêu cầu URL proxy đến hai phần phụ trợ khác nhau thông qua proxypass dựa trên vị trí.Nginx cho mỗi vị trí/vượt qua viết lại uri thành 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; 
} 

Với cấu hình này nginx vượt qua "/ app1" hoặc "/ app2" để proxy và backend không nhận ra url/lệnh ..

như ví dụ muốn vượt qua để http://127.0.0.1:3000 chỉ /messages khi truy cập http://<nginx>/app1/messages - nhưng trong cấu hình ở trên cũng vượt qua /app1/http://127.0.0.1:3000/app1/messages. Cũng vậy với /app2

Trả lời

8

Cố gắng đặt "/" ở cuối tên thượng nguồn ví dụ

proxy_pass http://127.0.0.1:8080/; 

Xin xem bài này: How to preserve request url with nginx proxy_pass

+4

này không hoạt động do '" proxy_pass không thể có URI một phần trong vị trí được đưa ra bởi cụm từ thông dụng ... "', xem http://stackoverflow.com/questions/21662940/proxy-pass-cannot-have-uri-part-in-location. – frhd