Closed1

nginxでリバースプロキシ

sey323sey323

Nginxでリバースプロキシを設定する場合のメモ

リバースプロキシで頻繁に使うディレクティブ

名称 概要 公式ドキュメント
proxy_pass こちらで指定したURLに転送される。 リンク
rewrite 正規表現などでマッチしたURLを書き換える。 リンク
proxy_set_header プロキシサーバに送られるリクエストヘッダにフィールドの追加や再定義を行う。 リンク
proxy_redirect プロキシ先のサーバがnginxに返すレスポンスのLocation, Refreshヘッダの書き換えルール。 リンク
sub_filter リクエストに含まれる文字列を、正規表現で検索して置き換える。 リンク

proxy_pass

リダイレクト設定を入れる場合は、必須で利用する。下記は、/sampleへのリクエストをlocalhost:8080に転送する設定である。

location /sample {
    proxy_pass http://localhost:8080/;
}

locationで指定しているURLとproxy_passで指定するURLの末尾に/を含むかどうかで挙動が変わるので注意。

詳細に関しては下記の検証記事を参照。

Nginxのlocationとproxy_passの末尾スラッシュによる挙動の違いを理解する | Black Everyday Company

rewrite

localhost/sampleに対してlocalhost:8080へのリバースプロキシを設定した場合、localhost:8080のサーバには、localhost:8080/sampleとしてリクエストが送信されてしまう。そのような場合に/sampleの部分を取り除いて、localhost:8080にリクエストを送信させることができる。

location  /sample {
  rewrite /sample/(.*) /$1  break;
  proxy_pass         http://localhost:8080/;
}

上記の設定を入れることで、localhost/sampleへのリクエストが全て、localhost:8080に書き換えられる。

proxy_set_header

プロキシサーバに送られるリクエストのヘッダに情報を追加する設定を入れるものである。

proxy_set_header    Host $http_host; # リバースプロキシを設定する場合は必須。
proxy_set_header    X-Real-IP    $remote_addr;   
proxy_set_header    X-Forwarded-Host       $host;
proxy_set_header    X-Forwarded-Server    $host;
proxy_set_header    X-Forwarded-Proto   $scheme;
proxy_set_header    X-Forwarded-Port    $server_port;
proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;

X-Forwarded-Forヘッダー(XFF)に関しては下記のサイトを参照

このスクラップは2023/05/05にクローズされました