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/
là http://127.0.0.1:3000/app1/messages
. Cũng vậy với /app2
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