本記事ではリバースプロキシとしてNginxの設定を行う手順を解説する。
前提条件
本記事では以下の環境を前提としている。
| Linux 環境(リバースプロキシサーバー、Webサーバー両方とも) | |
| OS | Debian 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_addr | Nginxが受け取ったリクエストのクライアントIPアドレス |
| $proxy_add_x_forwarded_for | 現在のクライアントIPアドレスをX-Forwarded-Forヘッダーに追加 |
| $scheme | クライアントリクエストのプロトコル |
2. [リバースプロキシサーバー]hostsファイルの修正
/etc/hostsファイルに以下の行を追記。
52.69.161.215 hoge.com3. [リバースプロキシサーバー]設定のテストとリロード
設定が正しいかどうかをテストし、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 successfulNginxをリロード。
# sudo systemctl reload nginx4.[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 nginx5.検証
リバースプロキシサーバーの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アドレスとなっているので、リバースプロキシサーバー経由でのアクセスであることが確認できる。

