Я использую nginx
в качестве обратного прокси-сервера, и когда я вхожу в свой веб-интерфейс, я перенаправлен на прокси-URL. Я хотел бы избежать этого и всегда сохранять «имя_сервера» в качестве URL. Является ли это возможным?
Это мое /etc/nginx/conf.d/my_app.conf
:
server {
listen 443 ssl;
server_name my-app.net;
ssl_certificate /etc/pki/tls/certs/my-app.cer;
ssl_certificate_key /etc/pki/tls/private/my-app.key;
ssl_protocols TLSv1.1 TLSv1.2;
access_log /var/log/nginx/my-app.access.log main;
location / {
proxy_pass http://ip_of_the_app:7180/;
proxy_redirect off;
}
}
Я подключаюсь http://my-app.net
, ввожу данные для входа, затем я перенаправляюсь http://ip_of_the_app:7180
на ту же страницу входа в систему, и мне необходимо снова войти в систему. Можно ли избежать двойного входа?
linux
nginx
reverse-proxy
tonio94
источник
источник
Ответы:
Не назначайте
proxy_redirect
наoff
, что не делает то , что вы думаете , он делает.proxy_redirect
выполняет что-то похожее на перезапись URL, например:Это позволяет вам разместить
/sales/
путь в другом месте. Но даже в этом случае параметры по умолчаниюproxy_redirect
делают именно это для вас бесплатно. По умолчанию перенаправляется местоположение во все, что присутствуетproxy_pass
(и параметры по умолчанию используются, когда вы вообще не устанавливаетеproxy_redirect
или не используетеproxy_redirect default;
).Вам не нужно устанавливать
proxy_redirect
.Вам не хватает заголовков, которые нужно отправить в приложение. Самый важный из них
HOST
. Это выполнит проксирование по желанию и сохранит правильный URL в браузере.Обратите внимание, что приложение
http://ip_of_the_app:7180/
теперь получит запрос сHost: my-app.net
заголовком.Вам также следует рассмотреть возможность использования еще нескольких заголовков:
Это позволит улучшить ведение журнала в приложении по адресу
http://ip_of_the_app:7180/
.X-Forwarded-For
указание IP-адреса фактического клиента (в отличие отnginx
s-IP) иX-Forwarded-Proto
проверка, подключен ли клиентnginx
через HTTP или HTTPS.источник
Referer
просто$http_referer
копирует его из запроса. Это не работает, если запрос не имеет заголовка Referer, поэтому в некоторых случаях его жесткое кодирование является решением.