さくらVPS nginx 構築&設定メモ

とりあえずサーバに Apache を入れたものの、せっかく勉強がてら借りているさくら VPS なので nginx に挑戦してみました。 さくら VPS 契約後のほぼ自分用セットアップメモ第三弾です。

1. nginx のインストール

最新版は公式のレポジトリにあるのでまずはリポジトリを追加します。
vim /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

yumでインストールします
yum install nginx

2. php-fpm のインストールと設定

nginx で PHP を動かすためには php-fpm (FastCGI) が必要になります。
前回で PHP5.6 の remi レポジトリでインストールしているため、php-fpm も同様に remi リポジトリを参照してインストールします。
yum --enablerepo=remi install php-fpm

インストール後、php-fpm の設定ファイルを変更します。
vim /etc/php-fpm.d/www.conf

-listen = 127.0.0.1:9000
+listen = /var/run/php-fpm/php-fpm.sock
-;listen.owner = nobody
+listen.owner = nginx
-;listen.group = nobody
+listen.group = nginx

+user = nginx
+group = nginx

+pm.max_children = 15
+pm.start_servers = 5
+pm.min_spare_servers = 2
+pm.max_spare_servers = 5

※litenは 127.0.0.1:9000 から変更します。Unixドメインソケットの方が高速に動作するためです。

設定ファイル保存後、サービスを起動します。
/etc/init.d/php-fpm start

さらに次回から自動起動するように設定しておきます。
chkconfig php-fpm on

3. 稼働中の Apache の停止

既に稼働中のウェブサーバ(Apache)のサービスと止めておきます。
/etc/init.d/httpd stop

自動起動もオフにします。
chkconfig httpd off

4. nginx の設定

nginx の設定ファイルを変更します。パフォーマンス設定はほとんど参考サイトの写しになりますが…

vim /etc/nginx/nginx.conf

-user  nginx;
+user  nginx nginx;
-worker_processes  1;
+worker_processes  auto;
+worker_rlimit_nofile 100000;
+pid        /var/run/nginx.pid;

events {
  worker_connections  1024;
+  multi_accept on;
+  use epoll;
}

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

  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
-  access_log  /var/log/nginx/access.log  main;
+  access_log off;
+  error_log  /var/log/nginx/error.log crit;

+  server_tokens off;
  sendfile      on;
-  #tcp_nopush    on;
+  tcp_nopush    on;
+  tcp_nodelay   on;

-  keepalive_timeout         65;
+  keepalive_timeout         10;
+  client_header_timeout     10;
+  client_body_timeout       10;
+  reset_timedout_connection on;
+  send_timeout              10;

+  limit_conn_zone $binary_remote_addr zone=addr:5m;
+  limit_conn addr 100;

-  #gzip on;
+  gzip on;
+  gzip_http_version 1.0;
+  gzip_disable "msie6";
+  gzip_proxied any;
+  gzip_min_length 1024;
+  gzip_buffers 4 8k;
+  gzip_comp_level 6;
+  gzip_static on;
+  gzip_types text/plain
+             text/css
+             text/xml
+             text/javascript
+             application/x-javascript
+             application/xml
+             application/xml+rss
+             application/javascript
+             application/json;

+  open_file_cache max=100000 inactive=20s;
+  open_file_cache_valid 30s;
+  open_file_cache_min_uses 2;
+  open_file_cache_errors on;

+  fastcgi_cache_path /var/cache/nginx/fscgi levels=1:2 keys_zone=fscgi:10m inactive=10m;
+  fastcgi_cache_key "$scheme://$request_method$host$request_uri";

+  server {
+    listen 80 default_server;
+    server_name _;
+    access_log off;
+    return 444;
+  }

  include /etc/nginx/conf.d/*.conf;
}

各ドメイン毎の設定を /etc/nginx/conf.d/ 以下に作成します。
vim /etc/nginx/conf.d/www.example.com.conf

server {
  listen 80;
  server_name www.example.com;
  root /path/to/public_html;
  access_log /path/to/logs/access.log;
  error_log /path/to/logs/error.log;
  charset utf-8;
  index index.php index.html;

  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }

  location ~* \.(gif|jpg|png|svg|swf|jpeg)$ {
    log_not_found off;
    access_log off;
    expires 3d;
  }

  location ~* \.ico$ {
    log_not_found off;
    access_log off;
    expires max;
  }

  location ~* \.(css|js)$ {
    charset UTF-8;
    access_log off;
    expires 1d;
  }

  location ~ /\. {
    deny all;
    log_not_found off;
    access_log off;
  }

  location ~ \.php$ {
    fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    include fastcgi_params;
  }
}

nginx を起動します。
service nginx start

ついでに次回から自動起動するように設定します。
chkconfig nginx on

参考サイト