Я не большой специалист по администрированию nginx, я просто разработчик. У меня есть два бэкэнда, работающих в докере. Позвольте мне назвать их
- бэкенд1:8080
- бэкенд2:8081
Также у меня есть Nginx, открывающий порт 443 с установленным сертификатом letsencrypt. Моя конфигурация Nginx (полное доменное имя переменной env похоже на example.com)
восходящий бэкэнд1 {
серверная часть 1:8080;
}
восходящий сервер2 {
серверная часть2:8081;
}
сервер {
слушать 443 ssl;
server_name ${FQDN} www.${FQDN};
ssl_certificate /etc/letsencrypt/live/${FQDN}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${FQDN}/privkey.pem;
ssl_session_cache общий: SSL: 1 м;
ssl_session_timeout 5 м;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers включен;
если ($ server_port = 80) { установить $ https_redirect 1; }
if ($host ~ '^www\.') { set $https_redirect 1; }
если ($https_redirect = 1) { return 301 https://${FQDN}$request_uri; }
местоположение /путь1/ {
прокси_пасс http://backend1/;
proxy_redirect ~^/(.*) $scheme://$http_host/path1/$1;
прокси_http_версия 1.1;
proxy_pass_header Set-Cookie;
файл cookie proxy_pass_header;
proxy_pass_header X-Forwarded-For;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение "обновление";
proxy_set_header Хост $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
add_header X-восходящий поток $upstream_addr;
}
местоположение /путь2/ {
прокси_пасс http://backend2/;
proxy_redirect ~^/(.*) $scheme://$http_host/path2/$1;
прокси_http_версия 1.1;
proxy_pass_header Set-Cookie;
файл cookie proxy_pass_header;
proxy_pass_header X-Forwarded-For;
proxy_set_header Обновить $http_upgrade;
proxy_set_header Соединение "обновление";
proxy_set_header Хост $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forward-Proto http;
proxy_set_header X-Nginx-Proxy true;
add_header X-восходящий поток $upstream_addr;
}
}
Я хочу этого, если я попрошу https://example.com/path1/
тогда Nginx должен перейти к http://бэкенд1:8080/
и верните мне ответ с этого сервера. Проблема в том, что backend1 (как и backend2) может ответить 302 и перенаправить на какой-то путь, например. /авторизоваться
. Nginx перенаправляет мой браузер на https://example.com/логин
но я хочу, чтобы он перенаправил меня на https://example.com/path1/логин
Не могли бы вы помочь мне, пожалуйста, и указать на ошибку, которую я сделал в моей конфигурации. Я просмотрел все подобные вопросы в SO и не нашел решения. Также я изучил документацию Nginx и тоже не нашел ответа.
у меня есть линия proxy_redirect ~^/(.*) $scheme://$http_host/path1/$1;
и я полагаю, что он должен выполнять работу, которую я хочу.
Кстати, я не могу занять / разместить (создать конфигурацию для корневого пути) в моей конфигурации Nginx, так как она зарезервирована для другого внутреннего сервера.
Заранее спасибо.