Nginxでリバースプロキシの構築・設定方法

本記事ではリバースプロキシとしてNginxの設定を行う手順を解説する。

目次

前提条件

本記事では以下の環境を前提としている。

Linux 環境(リバースプロキシサーバー、Webサーバー両方とも)
OSDebian GNU/Linux 12 (bookworm)
ミドルウェアnginx(1.25.5)
リバースプロキシサーバーのIPアドレス57.180.13.226
WebサーバーのIPアドレス52.69.161.215

以下、構成図

リバースプロキシとしてのNginxの設定方法

以下の手順でNginxをリバースプロキシとして設定する。

1. [リバースプロキシサーバー]Nginx設定ファイルの編集

リバースプロキシサーバー側のNginxの設定ファイルを編集する。設定ファイルは通常、/etc/nginx/nginx.conf。以下のように、リバースプロキシの設定を追加する。


この設定では、Nginxがリクエストを受け取り、Webサーバー(Nginx)http://52.69.161.215に転送している。

server {
    listen 80;
    server_name 57.180.13.226;

    location / {
        proxy_pass http://52.69.161.215;
        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_passリクエストを転送するWebサーバー(Nginx)のURLを指定
proxy_set_header Webサーバー(Nginx)に転送する際のHTTPヘッダーを設定
Hostクライアントがリクエストしたホスト名を設定
X-Real-IPクライアントのIPアドレスを設定
X-Forwarded-ForクライアントのIPアドレスをリスト形式で設定
X-Forwarded-Protoクライアントが使用したプロトコル(HTTPまたはHTTPS)を設定

各変数の説明。

フォーマット説明
$hostクライアントがリクエストしたホスト名
$remote_addrNginxが受け取ったリクエストのクライアントIPアドレス
$proxy_add_x_forwarded_for現在のクライアントIPアドレスをX-Forwarded-Forヘッダーに追加
$schemeクライアントリクエストのプロトコル

2. [リバースプロキシサーバー]hostsファイルの修正

/etc/hostsファイルに以下の行を追記。

52.69.161.215		hoge.com

3. [リバースプロキシサーバー]設定のテストとリロード

設定が正しいかどうかをテストし、Nginxをリロードする。

# sudo nginx -t

問題がなければ以下のように出力される。

nginx: the configuration file /opt/bitnami/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/bitnami/nginx/conf/nginx.conf test is successful

Nginxをリロード。

# sudo systemctl reload nginx

4.[Webサーバー(Nginx)]nginxの設定を変更

/etc/nginx/nginx.confを修正する。

server {
    listen 8080;
    server_name 52.69.161.215;

    location / {
        proxy_pass http://localhost:8080;
        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;
    }
}

リバースプロキシサーバー同様、設定のテストとリロードを行う。

# sudo nginx -t
# sudo systemctl reload nginx

5.検証

リバースプロキシサーバーのIP アドレス(57.180.13.226)にブラウザからアクセスして、Webサーバー(Nginx)(52.69.161.215)のコンテンツが表示されるか確認する。

リバースプロキシサーバー側(57.180.13.226)のaccess.log

116.94.208.233 - user1 [19/Aug/2024:06:22:20 +0000] "GET / HTTP/1.1" 304 0 "-" 
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0" "-"

Webサーバー(Nginx)側(52.69.161.215)のaccess.log

57.180.13.226 - user1 [19/Aug/2024:06:22:20 +0000] "GET / HTTP/1.0" 304 0 "-" 
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"

リクエストが発生した日時が、リバースプロキシサーバー、Webサーバーとも「19/Aug/2024:06:22:20 +0000」で同じとなっている。

また、Webサーバー側にアクセスしたクライアントのIPアドレスが「57.180.13.226」で、リバースプロキシサーバーのIPアドレスとなっているので、リバースプロキシサーバー経由でのアクセスであることが確認できる。

  • システム開発、アプリ開発
  • マッチングアプリ開発
  • インフラ構築支援等、なんでもご相談ください。
よかったらシェアしてね!
  • URLをコピーしました!
目次