ポート80でリッスンするnginxをすべて実行している複数のDockerコンテナーを実行しようとしていますが、コンテナーポート80に異なるホストポートがマッピングされています。
末尾のスラッシュがないためにnginxがリダイレクトを行う場合を除いて、ほとんどの場合これは機能します。
server {
listen 80;
root /var/www;
index index.html;
location /docs {}
}
上記のnginx構成と、コンテナーポート80にマップされたホストポート8080でそれを実行しているDockerコンテナーを考えると、curl okを介してlocalhost:8080 / docs /を取得できます。
> 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に基づくと、これは現在可能ではないようです。