Nginx перезаписывает на докер-машине, когда порт хоста != порт контейнера

HTTP-клиенты поместят порт в заголовок хоста. Если вы используете исходное значение заголовка узла при выполнении перенаправления, оно должно работать так, как ожидалось. Я протестировал следующий код и, похоже, делаю именно то, что вы просили:

location ~ ^.*[^/]$ {    try_files $uri @rewrite;}location @rewrite {    return 302 $scheme://$http_host$uri/;}

> GET /bla HTTP/1.1> User-Agent: curl/7.29.0> Host: localhost:8080> Accept: */*>< HTTP/1.1 302 Moved Temporarily< Server: nginx/1.9.7< Date: Sun, 29 Nov 2015 06:23:35 GMT< Content-Type: text/html< Content-Length: 160< Connection: keep-alive< Location: http://localhost:8080/bla/