nginx をインストールしたら nginx.conf を設定する

nginx の初期設定メモ
個々の環境によって違うので基本的な項目を変更する程度の記事
nginx の設定ファイルは /etc/nginx/nginx.conf です

環境

nginx の初期設定

何はともあれ、設定ファイルのバックアップを

$ sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.org

編集

$ sudo vim /etc/nginx/nginx.conf
user www-data;
worker_processes 4;
->worker_processes n; # n の値を CPU のコア数と同じに設定
pid /var/run/nginx.pid;

events {
  worker_connections 768;
  # multi_accept on;
}

http {

  ##
  # Basic Settings
  ##

  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  ->keepalive_timeout 35; # 35秒程度に変更
  types_hash_max_size 2048;
  # server_tokens off;
  -> server_tokens off;

  # server_names_hash_bucket_size 64;
  # server_name_in_redirect off;

  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  ##
  # Logging Settings
  ##

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;

  ##
  # Gzip Settings
  ##

  gzip on;
  gzip_disable "msie6";

  # gzip_vary on;
  # gzip_proxied any;
  # gzip_comp_level 6;
  # gzip_buffers 16 8k;
  # gzip_http_version 1.1;
  # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

  ##
  # nginx-naxsi config
  ##
  # Uncomment it if you installed nginx-naxsi
  ##

  #include /etc/nginx/naxsi_core.rules;

  ##
  # nginx-passenger config
  ##
  # Uncomment it if you installed nginx-passenger
  ##

  #passenger_root /usr;
  #passenger_ruby /usr/bin/ruby;

  ##
  # Virtual Host Configs
  ##

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
}


#mail {
#  # See sample authentication script at:
#  # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#  # auth_http localhost/auth.php;
#  # pop3_capabilities "TOP" "USER";
#  # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#  server {
#    listen     localhost:110;
#    protocol   pop3;
#    proxy      on;
#  }
#
#  server {
#    listen     localhost:143;
#    protocol   imap;
#    proxy      on;
#  }
#}

編集した nginx.conf が正しいか確認

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

問題がなかったら nginx を 再起動してnginx.conf の設定を反映させる

$sudo service nginx restart

もしくは nginx を再起動させたくなかったら以下のコマンドで nginx.conf の変更内容を反映させることができる

$ sudo nginx -s reload

説明

worker_processes n;

worker_processes の値は CPU のコア数と同じに設定するのが標準的な運用なのでコア数を調べる

$ grep processor /proc/cpuinfo |wc
2 6 28

この場合は 2 なので以下のように書き換え

worker_processes 2;

keepalive_timeout 35;

keepalive_timeout は Apache でいう keep alive packet に相当する

keep alive packet / キープアライブ機能 とは?

ネットワーク上で、接続が有効であることを確認するために定期的に行われる通信。

ネットワークで接続されたコンピュータやネットワーク機器は、通信相手から長時間通信がないときに、用がないから黙っているのか、ダウンしてしまったのか確認する術がない。仮想的に通信路(セッション)を形成してデータの送受信を行うコネクション型の通信の場合、通信終了の合図がないまま相手が異常終了してしまうと、永久にセッションを閉じることができなくなってしまう。

このため、多くのプロトコルやアプリケーションでは、用がないときでも一定時間ごとに「生きている」(alive)ことを相手に伝えるための信号を送るように設計されている。これがキープアライブ機能である。無通信状態が一定時間以上続いてもキープアライブ信号が届かない場合には、接続を切る。

キープアライブを行うための信号のことを「ハートビート」と呼ぶことがある。パケット通信では、キープアライブ用に送受信されるパケットを「キープアライブパケット」という。

出典 : http://server-setting.info/centos/nginx-keepalive-setting.html

HTTP の持続的な接続で次のリクエストが来るまでサーバが待つ時間を設定できる

無効

keepalive_timeout = 0;

35 秒に設定

keepalive_timeout = 35;

server_tokens off;

初期状態では Web サーバにアクセスしたブラウザに対して nginx のバージョン情報などが渡される
この状態だと攻撃者にサーバ構成のヒントを与えることになるので秘匿にしておきたい

server_tokens off;

にすることで Web サーバのみを返すようになる

まとめ

とりあえずこんなもんでしょか
他にも hoge.com/wp-admin/ 以下にアクセスが来たら hoge.com にリダイレクトさせるなどなど設定できるのでそれは今度書こうかなと
一般的な Web サイト構築/ WordPress でブログ運営の初期設定でおすすめがあったら教えてください