proxy_redirect を使おうとしたけど Nginx 初心者すぎていろいろ挙動を理解してなかったので整理
使ったリポジトリ (9 割ぐらいは Copilot が書いたやつ)
proxy_redirectってなに?
LocationまたはRefreshヘッダーを置き換えるもの- 詳しいことはここに
下のような設定があるとする
listen 9003;
location /default/ {
proxy_pass http://api:5001/;
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;
proxy_redirect default;
}
この場合は default なので、proxy_passで設定した URL が Location にあると置き換えてリダイレクトされる。
Location: http://api:5001/
なら
Location: http://127.0.0.1:9003/default/
になる。
直接指定して置き換えることもできる。 こんな感じのはず
proxy_redirect {元のURI} {置き換えるURI}
いろんな例
相対パスにしてみる
例えば以下の設定をする
location /related/ {
proxy_pass http://api:5001/;
proxy_redirect / /related/;
}
こうなる
Location: / -> Location: http://127.0.0.1:9003/related/
置き換え先を絶対 URI にする
全く別のリソースを見に行ったってもいい
location /rewrite/ {
proxy_pass http://api:5001/;
proxy_redirect / http://127.0.0.1:8080/rewrite/;
}
Location: /redirect -> Location: http://127.0.0.1:8080/rewrite/redirect
多段プロキシを考えてみる
sample_nginx_secondary(:81) -> sample_nginx(9003) -> App で考える
server {
listen 81;
location /test/ {
proxy_pass http://sample_nginx:9003/;
}
location /test-pr/ {
proxy_pass http://sample_nginx:9003/;
proxy_redirect / /test-pr/;
}
location /test-default/ {
proxy_pass http://sample_nginx:9003/;
proxy_redirect default;
}
}
http://127.0.0.1:81/test-pr/related/配下でリダイレクトが起きても Location は"/“ではないのでさらに書き換えは行われない
Location: http://127.0.0.1:9003/related/ -> Location: http://127.0.0.1:9003/related/
sample_nginx 配下のパスを secondary が知っている必要がある
所感
- 多段プロキシはトリッキーなことになりそうなので使わんほうがよさそう