nginx

開発サーバーでもこれだけはやっておくnginxの設定

サンプルバージョンは下記。

nginx/1.10.1


最大同時接続数の上限を設定

nginxにおける同時クライアントの最大数は、worker_processes × worker_connectionsの数で決まる。

まずは、クライアントリクエストを処理するworker_processesを設定

worker_processes  2;

CPUのコア数=ワーカープロセス数となるので、下記コマンドで確認して値を設定。

grep processor /proc/cpuinfo | wc -l

2

次に、1つのワーカープロセスが同時に処理できる最大接続数を設定

events {

worker_connections 1024;
}

こちらの数値は下記コマンドの値を参考にする。

ulimit -n

1024


サーバー情報を隠蔽する

http {

server_tokens off;

ちなみにこの設定を行っても、バージョン情報は消えるがnginxを使っていることはバレてしまう。

専用のエラーページを用意してフォローがよいかも。


アクセスログの出力フォーマットを確認する

デフォルトでは、Apache互換の combinedが適用される。

独自に設定したい場合は、明示的に指定すること。

例) main という出力フォーマットにしたい場合

server{

access_log /var/log/nginx/log/host.access.log main;

※ mainというフォーマット定義は別途行っておくこと。


アクセスログの書き込みペースを少し調整する

随時書き込むでもいいが、例えば5秒起きに書き込む、などにするその分サーバーへの負荷を抑えられるだろう。

例) 前回出力してから5秒以上経過したら書き込む

server{

access_log /var/log/nginx/log/host.access.log main flush=5s;


KeepAliveの設定を、適宜変更する

デフォルトでは、 75になっている。

例) 65にしたい場合

http{

keepalive_timeout 65;


sendfileをどうするか決める

sendfileは、ざっくりいうと、クライアントへのレスポンス処理をsendfileシステムコールというAPIを使って行うかどうかで、カーネル側でコンテンツの複写をもつことで、レスポンスの改善をはかる設定。

ただし、動作が不安定になったり、静的ファイルが更新されなかったり、芳しくない評判もある。

デフォルトでは、offになっているので、悩ましければそのままで良いかと。

http{

sendfile off;


最大リクエストサイズの調整

クライアントから送信されるリクエストボディの最大許可量を設定。

デフォルトでは1MB。

例)無制限にする場合。

http{

client_max_body_size 0;


デバッグしたい場合

例)無制限にする場合。

location /debug/ {

return 200 "access to $server_name : $server_port : $uri";
}


. から始まるファイルへのアクセスを禁止

location ~ /\.$ {

deny all;
}


PHP-FPMとApacheの設定の相対

pm.start_servers : StartServers : 起動時に作成される子プロセス

pm.min_spare_servers : MinSpareServers : アイドル状態の子プロセスの最小数

pm.max_spare_servers : MaxSpareServers : アイドル状態の子プロセスの最大数

pm.max_requests : MaxClients : 各子プロセスが再起動するまでのリクエスト数