nginx.confを公開してみる

私はウェブサーバーにnginxを導入しています。nginxはそもそも高速なサーバーとして有名ですが、サイト表示のパフォーマンスを上げるために色々カスタマイズを行っています。そこで、私が使っている設定を公開してみようかなと思います。

一応この設定でPageSpeed Insightsのチェックでは最もスコアが良かったはず。多分。もちろんユーザーなどは適宜書き換えてくださいね。

user www-data;
worker_processes auto;
worker_rlimit_nofile 100000;
pid /run/nginx.pid;

events {
worker_connections 2048;
multi_accept on;
use epoll;
}

http {

##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;

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;

types_hash_max_size 2048;
server_tokens off;

# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

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

##
# Logging Settings
##

access_log /var/log/nginx/access.log;
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘”$status” $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for” “$gzip_ratio”‘;
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 8 8k;
gzip_min_length 1000;
gzip_http_version 1.0;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

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

##
# 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/*;
}

主な変更点はログの形式とgzip圧縮の設定だと思います。worker関係はかなり多めにとっているので、マシンスペックによって調整してくださいね。ログの形式は、apacheと同じ形式にしてるんだったかな…?webalizerで解析できる形式で保存させています。webalizer使っていない方はこんなことしなくておっけー。(accesslogとerrorlogの間の三行削除)

gzip圧縮は有効にしておくと、ページを圧縮して転送量を減らし、表示速度を改善することが出来ます。PageSpeed Insightsのスコアに関わってくるので、適用してみてもいいのではないでしょうか。

細かい解説がなくて申し訳ないですが、紹介だけしておきます。

nginxのリダイレクト設定について

SSLのお話は置いておいて、忘れてしまいそうなのでnginxのリダイレクトのお話。

www付きのURLでアクセスされた場合、wwwなしのURLにリダイレクトする設定をすると捗ります。

server {
listen 80;
server_name www.example.net;
return 301 https://example.net$request_uri;
}

例えばこんな感じ。

上記の設定をすると、www.example.netに来たアクセスをすべてhttps://example.netにリダイレクトします。

しかし、この状態でサブドメイン(hoge)のページを設定すると、hoge.example.netでアクセスしてもリダイレクトされてしまうようです。

server {
listen 80;
server_name www;
return 301 https://example.net$request_uri;
}

というわけで解決策がこちら。server_nameにwwwのみを指定しています。

どうやら、とにかく一致する文字列があればリダイレクトしてしまうようで、ドメイン名まで書くとすべてリダイレクトされてしまうっぽいです。

で、wwwだけ書いておけば、wwwが付いているアクセスのみをリダイレクトしてくれます。

 

これ、正しいんですかね…?

 

追記

rewriteでリダイレクトする場合も同様の挙動をするようです。

rewrite ^/test/1.html http://example.org/re/1.html permanent;
rewrite ^/test/10.html http://example.org/re/10.html permanent;

この設定では/test/1.htmlに来たアクセスを/re/1.htmlにリダイレクト、/test/10.htmlに来たアクセスを/re/10.htmlにリダイレクトしたいということを書いています。

しかし、この設定では/test/10.htmlに来たアクセスまでもが/re/1.htmlに飛ばされてしまうようです。

上から順に判定していって、ひとつでもその文字が含まれていればその時点でリダイレクトされてしまいます。

rewrite ^/test/10.html http://example.org/re/10.html permanent;
rewrite ^/test/1.html http://example.org/re/1.html permanent;

これを回避するため、このように上下を入れ替えると10は10、1は1とリダイレクトされるようになります。1が10にリダイレクトされちゃいそうな気がするんですが、そういうわけでもないようです。

奥が深い・・・。


nginx高速化

nginxはそもそも高速なウェブサーバーとして有名ですが、サーバーやネットワークの環境によってはどうしても遅くなっていることがあります。

PageSpeed Insightsでは速度を確認するだけでなく、ユーザビリティや改善方法まで教えてくれます。

で、ここで計測した結果、今ご覧になっているこのページ、76/100という微妙に残念な結果でした。

修正方法の一番上にあったのが「gzipを使用した圧縮」とかなんかそんな感じので、検索してみたところ非常に簡単に導入できそう。

こちらを参考にチューニングをしてみました。

gzipは有効になっていましたが、設定はデフォルトのままだったので一緒に変更しておきました。

適用して再起動すると、88までスコアがアップ。グリーン表示になるギリギリのラインですかね。

 

というわけで、ちょっとだけサーバーが高速化出来ましたよっていうお話でした。

サーバー構築 UBUNTUSERVER編 nginx

続いてウェブサーバーを構築しておきます。ウェブサーバーといえばapacheなのですが、私はnginxを愛用しています。なんとなく。

nginxではphpを動かすために設定が必要なので注意してくださいね。

sudo apt-get install nginx

でサクッとインストールできます。とりあえずufwで80番ポートを許可して、アクセスしてみてください。ページが表示されれば成功しています。

続いてPHPを入れてみます。

sudo apt-get install php5-fpm

入れただけでは動いてくれませんので、nginxの設定ファイルを開きます。

sudo vim /etc/nginx/sites-available/default

で、以下の部分がコメントアウトされているので、以下のような状態にしてください。

location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.+)$;
# # NOTE: You should have “cgi.fix_pathinfo = 0;” in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

保存したらnginxを再起動します。

sudo service nginx restart

動作確認のために、phpのスクリプトを設置してみましょう。

sudo vim /usr/share/nginx/html/info.php

で、下の一文を追加して保存します。

<?php phpinfo();?>

phpの情報が表示されていれば成功です。

 

これでPHP対応のウェブサーバーを構築することが出来ました。

 

ドキュメントルートを/var/wwwにしておくと管理が簡単かもしれません。また、wordpressなどを使うときはindexにindex.phpを入れておくのを忘れずに。

phpからsqlにアクセスする可能性がある場合、php5-mysqlもインストールしておきましょう。