Nginxでhttp://www.example.com/some/path
でリクエストが来たら、http://www.example2.com/some/pathに転送するような設定をおこなったが、
301`エラーが出てしまいうまくいかなかったのでメモ書きです。
# default.conf(修正前)
server {
listen 8080;
listen 443 ssl http2;
server_name localhost;
client_max_body_size 10M;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
ssl_protocols TLSv1.3;
ssl_certificate /etc/ssl/certs/cert.pem;
ssl_certificate_key /etc/ssl/certs/key.pem;
# ここで/some/pathのついたURLをhttp://www.example2.com/some/pathに転送する設定をしている
location /some/path/ {
proxy_pass http://www.example2.com/some/path;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
解決方法
location
に設定したパスの末尾に/
がついていたのがいけなかったようです。
location
の/some/path/
を/some/path
に修正したところ200レスポンスが返ってくるようになりました。
下記はマニュアルの引用です。
-
If a location is defined by a prefix string that ends with the slash character, and requests are processed by one of proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass, or grpc_pass, then the special processing is performed. In response to a request with URI equal to this string, but without the trailing slash, a permanent redirect with the code 301 will be returned to the requested URI with the slash appended. If this is not desired, an exact match of the URI and location could be defined like this
場所がスラッシュ文字で終わるプレフィックス文字列によって定義されており、リクエストが proxy_pass、fastcgi_pass、uwsgi_pass、scgi_pass、memcached_pass、または grpc_pass のいずれかによって処理される場合、特別な処理が実行されます。 URI がこの文字列と等しく、末尾のスラッシュがないリクエストに応答すると、コード 301 を持つ永続的なリダイレクトが、スラッシュが追加されたリクエストされた URI に返されます。 これが望ましくない場合は、URI と場所の完全一致を次のように定義できます。
参考:https://nginx.org/en/docs/http/ngx_http_core_module.html#location
設定ファイル修正
# default.conf(修正後)
# (中略)
# ここで/some/path/を/some/pathに修正
location /some/path {
proxy_pass http://www.example2.com/some/path;
}