CrystalSnowman.com

あなたの時間節約につながる情報を提供します

nginx リバースプロキシのconfファイル設定方法 その2

リバースプロキシ構成図

この記事は「nginx リバースプロキシのconfファイル設定方法 その1」の続きです。

このサイトはnginxでWebサーバとリバースプロキシを構築しています。nginxの設定はconfファイルに記述します。今のところ安定して動いているのでconfファイルの中身を紹介します。これから構築する人の参考になればと思います。

「その1」ではeventsとhttp部について書いています。「その2」はserver部についてです。よかったら合わせて読んでみてください。

追記:
ここで紹介されている設定では外部アクセスのIPアドレスは正しく取得されません。以下の記事も合わせて参考にしてみてください。
nginx リバースプロキシ時にアクセス元のIPアドレスを取得する方法

サーバの環境

サーバはさくらVPSを利用しています。そこにOSとしてCentOS 7をインストールしています。Webサーバとしてnginx、そしてphpとmariaDBをインストールしています。

server部のconfファイルの設定

バーチャルドメイン用にnginx.confのserver部分の設定を別ファイルにしました。一台のサーバで複数のドメインのサイトを動かす場合に備えてです。ただ今のところその予定はないのですが。。

「/etc/nginx/conf.d」に「crystalsnowman.conf」というファイルで作成しました。

server部の設定ファイルです。前半はプロキシサーバの設定です。後半はWebサーバの設定です。

リバースプロキシ部の設定

2行目でリバースプロキシのportを80にしています。

3行目server_nameを指定しています。「crystalsnowman.com」と「www.crystalsnowman.com」両方を指定しています。

8行目9行目はアクセスログとエラーログの保存先を指定しています。「front-access.log」と「front-error.log」という名前にしています。リバースプロキシ用とWebサーバ用のログを分けておきたかったためです。

キャッシュ期間の設定

21行目から36行目まではプロキシキャッシュの設定です。正規表現で指定しています。
まずcssファイルは7日間プロキシサーバに保持する設定にしました。アクセスログには出力しないようにしました。

js (javascript)ファイルとtxtファイルも7日間に設定しました。

画像ファイルとフォントファイルも7日間に設定しました。

「/wp-content/uploads」にアップロードしたファイルは変更されることが稀と判断したため有効期限をMaxにしました。

アクセス権の設定

40行目から44行目までは「.」で始まるファイルについてです。このようなファイルは外部からアクセスできないようにしました。

45行目から48行目までは「/wp-config.php」ファイルについてです。このファイルはDBのパスワードなど重要な情報が記述されているため外部からアクセスできないようにしました。

プロキシキャッシュの設定

55行目から76行目まではproxyの設定です。

55行目でphpファイルは「backend」サーバに任せるようにしました。「backend」サーバはnginx.confファイルの91行目で指定したものです。
nginx リバースプロキシのconfファイル設定方法 その1

「backend」サーバ、つまり「crystalsnowman.com:8080」のことです。

59行目からは「/」以下のキャッシュ設定です。

61行目はキャッシュしないcookieを設定しています。

64行目はGETメソッド以外をキャッシュしないように設定しています。

69行目は携帯、スマホ、モバイルの設定です。管理しやすくするため「mobile_cache_setting」という別ファイルにしています。

すべてキャッシュしない設定にしました。

73行目はキャッシュファイルが保存される場所のゾーン名を指定します。http部で定義した「czone」を指定します。

Webサーバ部の設定

82行目でWebサーバのportを8080にしています。リバースプロキシのport(80)と異なるようにしています。

88行目89行目はアクセスログとエラーログの保存先を指定しています。「backend-access.log」と「backend-error.log」という名前にしています。リバースプロキシ用とWebサーバ用のログを分けておきたかったためです。

phpの設定

95行目からはphpの設定です。
何度も同じ記述をするため「php_exec」という別ファイルにして呼び出しています。

fastcgiにphp-fpmを使用して、Unix Socket通信にしています。
同一サーバにnginxとphp-fpmが動作している場合、socket通信にすると多少パフォーマンス向上が期待できるからです。別サーバになる場合はTCP接続を選択します。

設定が完了したら「nginx -s reload」で設定ファイルを読み込みます。

502 Bad Gatewayエラーが発生した場合

OSがCentOS 7の場合SELinuxの設定が原因かもしれません。

こちらの記事を参考にしてみてはいかがでしょうか。
nginx リバースプロキシ設定時の502 Bad Gatewayエラーを解消する方法

「httpd_can_network_relay」の設定変更について書いています。SELinux自体を無効にするのは推奨されていないため、「httpd_can_network_relay」を設定変更しています。

今回の記事の参考資料

参考にさせていただいたサイト

Nginx をリバースプロキシ(キャッシュ) として使ってみた | レンタルサーバー・自宅サーバー設定・構築のヒント

こちらのサイトは大変参考にさせていただきました。

お名前.com VPS にNginxでWordPressを構築。設定の意味もまとめた | karakaram-blog

こちらのサイトはnginx.confのhtml部を記述する際大変参考にさせていただきました。

参考図書

WordPressプロフェッショナル養成読本
WordPressプロフェッショナル養成読本

以前も紹介しましたが、nginxの設定を行う際に参考になった本です。
まずざっくり何をやるべきかを知るには最適な本だと思います。そしてこの本からさらにWebで調べたり、詳しい本へと移行すればよいと思います。

まとめ

2回にわたってnginxのリバースプロキシの設定を紹介しました。これから構築する人の参考になればと思います。SELinuxが原因でエラーとなる場合もあるので「httpd_can_network_relay」の設定も確認しておくとよいと思います。

その1の記事はこちらです。
nginx リバースプロキシのconfファイル設定方法 その1


Top