У меня есть кластер kubernetes и несколько контейнеров / контейнеров с веб-приложением. Блоки подключаются друг к другу по имени модуля с портом прослушивания 9999 (например, security-rest-api: 9999, common-rest-api: 9999 и т. Д.).
Снаружи слушать nginx-pod с внешним адресом http://e.net:30200/.
((приложение стручки: 9999) - (Nginx-стручок: 80) - (Nginx-служба: 30200)) - сеть
Nginx использует следующую конфигурацию для взаимодействия с приложениями.
server {
listen 80;
server_name e.net;
location / {
proxy_pass http://web-console:9999/;
proxy_redirect http://web-console:9999/ http://e.net:30200/;
}
location /common {
proxy_pass http://common-rest-api:9999/common;
proxy_redirect http://common-rest-api:9999/ http://e.net:30200/;
}
location /security {
proxy_pass http://security-rest-api:9999/security;
proxy_redirect http://security-rest-api:9999/ http://e.net:30200/;
} }
Работает очень хорошо, но у меня есть одна проблема с 302-ответом от app-pods:
Если я попытаюсь войти в свое приложение, я получу следующий 302 заголовок ответа:
HTTP/1.1 302 Found
Connection: keep-alive
Content-Length: 0
Date: Wed, 25 Apr 2018 10:37:50 GMT
Location: http://e.net:30200/security/rest/auth/login.html?callbackUrl=http://security-rest-api:9999/security/rest/namespace
Server: nginx/1.13.9
App-pods сгенерировал параметр URL "callbackUrl" из заголовка запроса Host Внутри сети контейнеров и этот параметр URL, чтобы добраться до браузера конечной точки. Конечно, при следующем запросе получите код 404.
Я не могу редактировать код приложения (в app-pods не используется nginx), но я хочу изменить параметр «security-rest-api: 9999» на «e.net:30200» в местоположении 302 заголовок ответа. Как я могу это сделать?
редирект не подходит, так как это генерирует новый 302-ответ и не решает мою проблему.
sub_filter меняет только тело ответа, но не заголовок ответа (где находится параметр Location).
request_uri тоже не работает, так как этот параметр работает только с заголовком запроса.