本記事ではリバースプロキシとして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.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アドレスとなっているので、リバースプロキシサーバー経由でのアクセスであることが確認できる。
- Nginxのログフォーマット設定と出力ログの見方を解説
- Nginxを再起動前にコマンドで文法チェックや設定誤りを確認をする方法
- [Nginx]オレオレCA認証局でSSL通信をする手順。サーバ証明書・秘密鍵・証明書署名要求の作成方法
- [Nginx]オレオレCA認証局を利用したクライアント証明書通信をする手順
- Nginxのログ一覧・ログ設定・ログ出力先の確認・設定方法を解説
- NginxでBasic認証の設定する方法
- Nginxの設定ファイル(.conf)の書き方と設定方法
- Nginxでリバースプロキシの構築・設定方法
- NginxでSSL設定してHTTPS通信をする手順
- NginxのVirtualhostを使って1つのサーバーでサブドメインを公開する手順
- [Nginx] サブディレクトリのアクセスを異なるWebサーバーにアクセスを振り分ける方法