Я пытаюсь запустить несколько контейнеров docker, все из которых работают под управлением nginx, прослушивающего порт 80, но с разными портами хоста, сопоставленными с портом 80 контейнеров.
По большей части это работает, за исключением случаев, когда nginx выполняет перенаправление из-за отсутствия завершающей косой черты.
server { listen 80; root /var/www; index index.html; location /docs {}}
Учитывая приведенную выше конфигурацию nginx и контейнер docker, запускающий его с портом хоста 8080, сопоставленным с портом контейнера 80, я могу получить localhost: 8080 / docs / через curl ok:
> GET /docs/ HTTP/1.1> User-Agent: curl/7.35.0> Host: localhost:8080> Accept: */*>< HTTP/1.1 200 OK* Server nginx/1.9.5 is not blacklisted< Server: nginx/1.9.5< Date: Sat, 28 Nov 2015 17:27:05 GMT< Content-Type: text/html< Content-Length: 6431< Last-Modified: Sat, 28 Nov 2015 17:17:06 GMT< Connection: keep-alive< ETag: "5659e192-191f"< Accept-Ranges: bytes<... html page ...
но если я запрашиваю localhost:8080/docs, я получаю перенаправление на localhost/docs/
> GET /docs HTTP/1.1> User-Agent: curl/7.35.0> Host: localhost:8080> Accept: */*>< HTTP/1.1 301 Moved Permanently* Server nginx/1.9.5 is not blacklisted< Server: nginx/1.9.5< Date: Sat, 28 Nov 2015 17:29:40 GMT< Content-Type: text/html< Content-Length: 184< Location: http://localhost/docs/< Connection: keep-alive<... html redirect page ...
Как я могу заставить nginx сохранить исходный порт при выполнении перенаправления? Я пробовал просматривать port_in_redirect и server_name_in_redirect, но они не помогли.
РЕДАКТИРОВАТЬ
Основанный на https://forum.nginx.org/read.php?2 ,261216,261216#msg-261216 прямо сейчас это кажется невозможным.