CrystalSnowman.com

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

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

リバースプロキシ構成図

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

この記事は「nginx リバースプロキシのconfファイル設定方法 その2」と続き物になっています。
「その1」ではeventsとhttp部について書いています。「その2」はserver部についてです。よかったら合わせて読んでみてください。

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

サーバの環境

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

nginx.confの設定

nginxの設定ファイルです。このファイルだけでWebサーバは動きますが、管理のしやすさからファイルを分割することがあります。
私も基本設定とバーチャルドメイン用設定とに分割しています。

主な設定を紹介します。

2行目worker_processesはサーバのCPUコア数と同じ数に合わせます。
詳しくはこのブログの以下の記事が参考になると思います。

nginxのworker_processes設定を見直してパフォーマンス改善する方法

32行目server_tokensはonの場合httpレスポンスヘッダとエラーページのフッタにNginx のバージョンを表示します。
バージョンを知らせるのは脆弱性を突かれることにつながるのでOffにします。

アップロードファイルサイズ設定

36行目client_max_body_sizeはサイトにアップロードできるファイルサイズを制限します。
当初これを指定しなかったため、1MB以上のファイルをアップロードできませんでした。
詳しい経緯はこのブログの以下の記事にあります。

httpエラーのためWordPressに2MB以下のファイルがアップロード出来ずハマった件

37行目client_body_buffer_sizeはアップロードファイルのバッファサイズを指定します。
アップロード予定のファイルの値より大きくしておきます。ある程度大きくしておかないとssl-error.logに「a client request body is buffered to a temporary file /var/cache/nginx/client_temp/0000000317」というワーニングで埋め尽くされてしまいます。意味はアップロードファイルがclient_body_buffer_sizeのバッファサイズを超えたから一時ファイルに書いたよというものです。

keepalive_timeout設定

42行目keepalive_timeoutはHTTPの持続的な接続を有効にする機能のことで、次のリクエストが来るまでサーバが待つ時間(秒)を設定します。
あるクライアントからリクエストがきたら、同じクライアントからの再リクエストを15秒待ちます。待つことでサーバに再接続せずに画像やcssファイルを提供します。

これに関連するkeepalive_requestsという項目もあります。同じクライアントからのリクエスト数が設定件数を超えたら15秒待つことをやめます。リクエストは画像やcss,javascriptの件数を指します。
指定しなければデフォルトの100件が設定されます。デフォルト件数でよいので指定しませんでした。

詳細はこちらが参考になりました。

nginx でKeepAliveを設定してみる | レンタルサーバー・自宅サーバー設定・構築のヒント

圧縮転送設定

44行目から68行目まではgzipによる圧縮転送設定です。
gzip_comp_levelは圧縮するレベルで0から9まで指定できます。数字が大きくなるほど圧縮率が高くなり、サーバのCPUの負荷も増えます。(0は圧縮なし) ただ1から9までの圧縮率の差は小さいのでCPU負荷を考え、1にしています。

リバースプロキシ設定

70行目以降からはリバースプロキシの設定です。
73行目proxy_cache_pathはキャッシュファイルが保存される場所を設定します。
/var/cache/nginx/proxy_tempが保存されるフォルダーです。levels=1:2はフォルダーの階層数とフォルダー名の文字数を指定します。この場合2階層になります。1階層目は1文字のフォルダー名、2階層目は2文字のフォルダー名となります。

この場合フォルダ構造は
「/var/cache/nginx/proxy_temp/0」と「/var/cache/nginx/proxy_temp/0/00」のようになります。

74行目keys_zone=czone:15mはキャッシュファイルが保存される場所のゾーン名とゾーンサイズを指定します。
ここではczoneというゾーン名で15MBを指定します。

83行目からはproxy_set_headerの設定です。
プロキシサーバに送られるリクエストヘッダのフィールドを定義します。

91行目からは上位サーバ(upstream server)を定義します。
「backend」という名前で定義し、serverは「127.0.0.1:8080」と自分自身のサーバのIPアドレスとポート番号を指定しています。
ちなみに「127.0.0.1」はローカル・ループバック・アドレスと呼ばれ、自分自身を指す特別なIPアドレスです。

ポートの8080は上位サーバ(upstream server):バックエンドを指します。

図にするとこのようになります。

リバースプロキシ構成図
リバースプロキシ構成図

96行目はServer部の設定です。
別ファイルにして「include」で読み込むようにしています。拡張子が.confのファイルが対象です。

長くなったのでServer部はこちらの記事に書きました。

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


Top