В ближайшее время у меня будет 3 сервера nginx. Один - это обратный прокси для SSL для двух других. Так, например, я иду по адресу:
https://www.mysitename.com/site1
Два других сервера в этом примере - site1 и site2. Я установил SSL-сертификат на прокси-сервер, и я хочу использовать обратный прокси-сервер (SSL не требуется, поскольку все 3 находятся во внутренней сети). Для целей тестирования у меня есть nginx прослушивать 443 для SSL / обратного прокси, прослушивать порт 8081 - это приложение rails для site1, а 8082 - для site2.
У меня есть это...
server {
listen 443;
server_name mysitename.com;
ssl on;
ssl_certificate ssl/mysitename.com.crt;
ssl_certificate_key ssl/mysitename.com.key;
keepalive_timeout 60;
location /site1 {
proxy_pass http://localhost:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect http:// https://;
}
location /site2 {
proxy_pass http://localhost:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect http:// https://;
}
}
Поэтому, когда я захожу на www.mysitename.com/site1, я хочу, чтобы он в основном возвращал то, что обычно приходит с localhost: 8081 (или позже по линии внутренний IP для другого сервера).
Есть ли способ убрать "site1" из вызова localhost? Кажется, он использует localhost: 8081 / site1. Сайты site1 и site2 имеют характер «/ login / index» или «/ something / list» и т. Д. Без «site1».
В контроллерах сайта также есть перенаправления (с использованием redirect_to), которые переходят от таких вещей, как / login / index к / something / list.
Придется ли мне переделывать URL-адреса сайта для использования site1? Или может прокси NGINX разобраться?
Спасибо.
Цитирование http://nginx.org/r/proxy_pass:
Если proxy_pass указан с URI, при передаче запроса на сервер часть нормализованного URI запроса, соответствующего местоположению, заменяется URI, указанным в директиве:
location /name/ { proxy_pass http://127.0.0.1/remote/; }
То есть вы должны использовать proxy_pass
как это:
location /site1/ {
proxy_pass http://localhost:8081/;
...
}
Обратите внимание на конечный /
в proxy_pass
директива - она заменит часть исходного URI, соответствующего местоположению, т.е. /site1/
.