Nginxの基本設定

CentOS6.5でNginx1.7とPHP-FPM5.5を連携してPHPを動かす設定の続き。

前回は「とりあえずPHPが動く」という設定だった。
変更した項目(ディレクティブというらし)も最小限だったし。

今回は、便利そうな設定を色々試してみる。
ただし、リバースプロキシの設定やWordPress用の設定は次回以降です。

基本はこのサイトを参考に。

1. nginx.confの設定

まずは以下のサイトを見て学ぶ。
Nginxの設定が詳しく説明してある。

nginx連載3回目: nginxの設定、その1 – インフラエンジニアway – Powered by HEARTBEATS

設定ファイルを編集する。

sudo vim /etc/nginx/nginx.conf

変更後の全体像がこちら。


user nginx;
worker_processes 2;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

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

    server_tokens off;

    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;

    sendfile on;
    tcp_nopush off;

    keepalive_timeout 65;

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

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

では、変更したディレクティブを見ていく。

最大同時接続数の上限を変更をする。
CPUの数に合わせた数に。

worker_processes  2;

CPUの数は以下のコマンドで確認できる。

grep processor /proc/cpuinfo | wc -l

workerプロセスが最大に開けるファイル数の制限(最大同時接続数)を設定。
worker_processesが2でworker_connectionsが1024なら2048開ける。

worker_connections 1024;

最大プロセス数はサーバごとに違うので、以下のコマンドで確認。
さくらVPSの1Gプランは1024だった。

ulimit -n

サーバ情報の隠蔽を行う。
server_tokensディレクティブを新たに追加する。

server_tokens off;

次は高速化の設定。
レスポンスヘッダとファイルの内容をまとめて送るようになり、少ないパケット数で効率良く送ることができる、らしい。

sendfile        on;
tcp_nopush     off;

レスポンスの圧縮の設定。
gzipディレクティブについてはnginx最大パフォーマンスを出すための基本設定 – オープンソーサー・日本を参考に。
参考先をそのままコピーすると、gzip_typesのところにapplication/jsonが2つあってエラーになるので注意!

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

gzip_staticとgunzipの設定については保留。
この技術関係しか書いてないブログは、gzipに対応したブラウザで閲覧されると思うから。

一応使えるかどうか、必要なモジュールがインストールされているか確認しとく。

nginx -V

下の2つが表示されれば、必要なモジュールはインストールされている。
今後設定するかもかもね。

–with-http_gunzip_module –with-http_gzip_static_module

設定に間違いがないか確認。

sudo /etc/init.d/nginx configtest

2. default.confの設定

この記事をよく読む。

nginx連載4回目: nginxの設定、その2 – バーチャルサーバの設定  – インフラエンジニアway – Powered by HEARTBEATS

nginx連載5回目: nginxの設定、その3 – locationディレクティブ – インフラエンジニアway – Powered by HEARTBEATS

バーチャルサーバの設定ファイルを開く。

sudo vim /etc/nginx/conf.d/default.conf

変更後のdefault.confがこれ。

server {
    listen 80 default_server;
    server_name runble1.com www.runble1.com;
    if ($http_host = www.runble1.com) {
        rewrite (.*) http://runble1.com$1;
    }
    access_log /var/log/nginx/runble1_access.log main;
    error_log /var/log/nginx/runble1_error.log warn;

    location / {
        root /var/www;
        index index.php;
    }

    #error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
       root /var/www;
       fastcgi_pass 127.0.0.1:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
    }

}

変更した箇所を見ていこう。

デフォルトサーバの設定。
defaultと付ければいいのか、default_serverと付ければいいのか迷ったが、本家サイトではdefault_serverと書いてあった
付けなくてもいいのかも・・・

listen       80 default_server;

サーバネームの設定。
wwwありなしを書いておく。

server_name  runble1.com www.runble1.com;

wwwありなしを統一。
www.runble1.comでアクセスされたら、runble1.comへリダイレクト。

if ($http_host = www.runble1.com) {
rewrite (.*) http://runble1.com$1;
}

バーチャルサーバのログの設定。

access_log /var/log/nginx/log/runble1_access.log main;
error_log /var/log/nginx/log/runble1_error.log warn;

設定に間違いがないか確認。

sudo /etc/init.d/nginx configtest

設定を反映するコマンド。
再起動しなくてもいい。してもいい。

sudo /etc/init.d/nginx reload

3. おまけ:Nginxのエラー

以下のエラーは管理者権限(sudo)でconfigtestしなかった時に出る。
気をつけろ。

nginx: [alert] could not open error log file: open() “/var/log/nginx/error.log” failed (13: Permission denied)

nginx: [warn] the “user” directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1

参考

これから始める人のためのNginx(2):Nginxのインストールと基本設定 (4/4) – @IT

nginx最大パフォーマンスを出すための基本設定 – オープンソーサー・日本

CentOS 7 でLAMP(Nginx+MariaDB(MySQL)+PHP)インストールからWordPressを動かすまで(Nginx編) | レンタルサーバー・自宅サーバー設定・構築のヒント

コメント

タイトルとURLをコピーしました