Pandora Pocket

IT系と日常系の備忘録。三日坊主。

SaaSes、さくらインターネットのVPSを借りてサーバーを立ててましたがこれまでずっとウェブサーバーとしてApacheを利用していました。世界シェアナンバーワンで情報も豊富。普通の人はこれで十分です。が、私の運用だとちょっと使い勝手が悪かったのです。

私はPHPを利用したCMSサイトを運営していますけれども、モジュール版PHPだとApacheと同じオーナー権限で実行されます。FTPなどでファイルをアップロードしたときいちいちwww-dataなどのApacheと同じユーザー、グループにするのは非常に面倒くさい。それにほかの人にスペースを貸したとき全く同じユーザー、グループで実行されるということはほかの人のフォルダも参照できてしまうわけで。

そんなこともありましてApacheではsuPHPというchrootができるモジュールを利用してPHPをCGIとして動かしていました。これならそんな心配はありません。

ただこれも問題がありました。.htaccessでPHPの設定が上書きできなかったりなぜかPHP.iniに書いてある情報を利用してくれなかったり。htscannerが古いせいかもしれませんが。

というわけでほかの環境を試すことにしました。最近はApacheよりも高速軽快なnginxが人気のようでしたので私もこれに乗っかることに。

以下はすでにUbuntuがインストールされ、ユーザー、SSH設定などが終わっているとします。

1.インストール

まずはとにもかくにもnginxなど必要ソフトのインストールをします。

Ubuntu(今回は12.04LTS)の公式リポジトリにあるnginxは最新版というわけではないのでnginxのリポジトリを追加してaptから最新版をインストールできるようにしておきます。

cat <<EOT >> /etc/apt/sources.list
# nginx
deb http://nginx.org/packages/ubuntu/ lucid nginx
deb-src http://nginx.org/packages/ubuntu/ lucid nginx
EOT
wget -O /tmp/nginx_signing.key "http://nginx.org/keys/nginx_signing.key"
apt-key add /tmp/nginx_signing.key
apt-get update

あとは普通にインストール。

apt-get install build-essential
apt-get install mysql-server sqlite3
apt-get install postfix
apt-get install nginx
apt-get install php5 php5-cgi php5-cli php5-dev php5-gd php-apc php-pear php5-fpm
apt-get install php5-mcrypt php5-mhash php5-xsl php5-xmlrpc libssh2-php php5-curl
apt-get install php5-mysql php5-sqlite php-mdb2-driver-sqlite
apt-get install phpmyadmin
apt-get install imagemagick

imagemagickなど必要がないと思うものに関しては除外しておいてください。私はあらかじめ今後必要になりそうなものを入れておきました。

2.nginxの設定

インストールが終わったらnginxの設定を編集します。

nginxのconfファイルはApacheと比べると最初とっつきにくいように見えますが意外と簡単でした。むしろ簡素で見やすいです。

まずは

/etc/nginx/nginx.conf

を開きましょう。

デフォルトはこのようになっていると思います。

user  nginx;
worker_processes  1;
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;
	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     on;
	keepalive_timeout  65;
	#gzip  on;
	include /etc/nginx/conf.d/*.conf;
}

nginxは上から下へ。ディレクティブも上から下へと読み込まれ継承されます。

私の設定はこんな感じ。

user  nginx users;
worker_processes  3;
worker_rlimit_nofile 1024;
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;
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     on;
keepalive_timeout  0;
server_tokens     off;
gzip  on;
gzip_http_version 1.0;
gzip_types        text/plain
text/xml
text/css
application/xml
application/xhtml+xml
application/rss+xml
application/atom_xml
application/javascript
application/x-javascript
application/x-httpd-php;
gzip_disable      "MSIE [1-6].";
gzip_disable      "Mozilla/4";
gzip_static       on;
gzip_comp_level   1;
gzip_proxied      any;
gzip_vary         on;
gzip_buffers      4 8k;
gzip_min_length   1100;
include /etc/nginx/conf.d/*.conf;
}

worker_processesを明示しています。さくらのVPS2Gはコア数が3なので3にしておきました。

Apacheにもありますがサーバースペックに問題がないならgzipを動かしておくと帯域食わずに済みますね。

次、バーチャルホストの設定です。

/etc/nginx/conf.d/default.conf

#Default
server {
listen       80 default_server;
server_name  localhost;
location / {
root   /usr/share/nginx/html;
index  index.html index.htm;
}

#include
include common;
}

デフォルトサーバーの設定です。自分が明示的に示したもの以外にアクセスがあった場合これが利用されます。

/etc/nginx/conf.d/virtualhost.conf

#WP-UG.NET
server {
#基本設定
listen      80;
server_name www.wp-ug.net;
root        /home/www/public_html;
index       index.php index.html index.htm;
#ログ管理
access_log  /home/www/log/access.log combined;
error_log   /home/www/log/error.log;
#PHP
location ~ .php$ {
fastcgi_pass 127.0.0.1:9001;
include php_exec_param;
}
#その他
include common;
}
#phpmyadmin
server{
listen 80;
server_name phpmyadmin.wp-ug.net;
access_log off;
error_log off;
location / {
root /usr/share/phpmyadmin;
index index.php;
}
location ~ .php$ {
allow 許可IPアドレス;
deny all;
fastcgi_pass 127.0.0.1:9000;
include php_exec_param;
}
}
 

default.confにすべて書き込むとあとで見直す時ややこしいので新しいファイルに分けています。

PHPの設定にあるfastcgi_pass 127.0.0.1:9001;のポート番号は後述するPHP-fpmの設定によって異なりますので注意してください。

phpMyAdminは不特定多数にみられるのはよろしくないのでIPアドレスでアクセス規制をしておきます。

同じ設定を何度も何度も書くのは冗長で可読性に欠けるので一つのファイルにまとめてしまいincludeで呼び出すようにしています。上記の場合以下の二つのファイルを作ってincludeしています。

/etc/nginx/php_exec_param

fastcgi_index index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_intercept_errors on;
include fastcgi_params;
client_max_body_size 20M;

/etc/nginx/common

#アクセスログ
set $deny_f 0;
if ( $http_user_agent ~* 'internal dummy connection' ){
set $deny_f 1;
}
location ~ .* {
if ( $deny_f = 1) {
return 403;
access_log off;
}
}
location ~* .(gif|jpg|png|ico|css|js)$ {
access_log off;
}
location = /favicon.ico {
access_log off;
log_not_found off;
}
location = /robots.txt {
access_log off;
log_not_found off;
}
#アクセス禁止
location ~ (.ht|.git|.svn) {
deny  all;
access_log off;
log_not_found off;
}

commonではアクセスログに書き込んでほしくない画像ファイル、faviconなどを除外するほかアクセスしてほしくないものへのアクセス禁止を明記しています。

3.PHP-FPMの設定

nginx自体にはPHPを動かす機構は存在しませんのでPHP-CGIに処理要求を伝える必要があります。今回はPHP-FPMを利用しました。

/etc/php5/fpm/pool.d/www.conf

[www]
listen = 127.0.0.1:9001
user = www
group = users
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 400
request_terminate_timeout = 120s
chdir = /
php_admin_value[output_buffering] = off
php_admin_value[mbstring.language] = neutral
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

pool.dディレクトリ内に同じような内容のconfファイルを作ることで複数の設定が可能です。

listenのポート番号、user、groupを変更し、バーチャルホスト内に指定したポート番号をそろえればPHPをそれぞれのオーナーごとに実行できるようになります。そのほかこのconfファイルの中でPHPの設定を上書きできます。

/etc/php5/fpm/pool.d/default.conf

[default]
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
chdir = /

インストール時のオリジナル設定。あってもなくても構いませんけど一応。

これで設定はとりあえず終了です。

nginx、php-fpmを再起動させれば設定が読み込まれます。

service nginx restart
service php5-fpm restart

reloadで行けると思っていたんですがreloadだと構文チェックしてくれないようなので・・・。

以上これでnginx+PHP環境が出来上がりました。

上記の設定ではPerlは動きません。入れようと思っていたんですがPerlに関してはchrootする方法が見つからなかったので断念しました。どうしても使いたいならApacheをバックで実行しておいてPerl処理だけ任せるとか。nginxのリバースプロキシで行けるはず。

ついでにUbuntuの設定と上記の設定を一括で行うシェルスクリプト置いておきます。

使う場合は自分の環境に合わせて書き換えてください。

#!/bin/sh
######################################################################
#Ubuntu自動サーバー構築シェルスクリプトnginx版
#
#Version 1.0.0
#作者 Ovis http://pandora.thty.net/
##修正点
#1.00 公開
######################################################################
#アップデート
cat <<EOT >> /etc/apt/sources.list
# nginx
deb http://nginx.org/packages/ubuntu/ lucid nginx
deb-src http://nginx.org/packages/ubuntu/ lucid nginx
EOT
wget -O /tmp/nginx_signing.key "http://nginx.org/keys/nginx_signing.key"
apt-key add /tmp/nginx_signing.key
apt-get update
######################################################################
# ロケールの変更
echo 'ロケールの変更を行いますか?(Y/N)'
while [ 1 ]
do
echo -n "-->"
read time
case $time in
y|Y)
apt-get install -y language-pack-ja manpages-ja
dpkg-reconfigure locales
update-locale LANG=ja_JP.UTF-8
#sed -i -e 's/ja_JP        ja_JP.eucJP/ja_JP        ja_JP.UTF-8/' /etc/locale.alias
break
;;
n|N)
break
;;
*) echo "Error! YかNを入力して下さい。"
esac
done
######################################################################
# ひな形
mkdir /etc/skel/public_html/
mkdir /etc/skel/log/
mkdir /etc/skel/.ssh/
chmod 700 /etc/skel/.ssh/
# ユーザー作成、root昇格制限
sed -i -e 's/DIR_MODE=0755/DIR_MODE=0701/' /etc/adduser.conf
sed -i -e 's/#UMASK        022/#UMASK        072/' /etc/login.defs
sed -i -e 's/# auth *required *pam_wheel.so deny group=nosu/auth required pam_wheel.so group=adm/' /etc/pam.d/su
#SSHセキュリティ対策
apt-get install -y denyhosts
sed -i -e 's/PURGE_DENY =/PURGE_DENY = 3h/' /etc/denyhosts.conf
sed -i -e 's/DENY_THRESHOLD_INVALID = 5/DENY_THRESHOLD_INVALID = 2/' /etc/denyhosts.conf
sed -i -e 's/DENY_THRESHOLD_VALID = 10/DENY_THRESHOLD_VALID = 5/' /etc/denyhosts.conf
sed -i -e 's/ADMIN_EMAIL = root@localhost/#ADMIN_EMAIL = root@localhost/' /etc/denyhosts.conf
cat <<EOT > /etc/iptables.up.rules
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#外部からのSSHへの接続を許可
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
#ping許可
-A INPUT -p icmp --icmp-type any -j ACCEPT
# ループバックアドレスからのアクセスをすべて許可
-A INPUT -i lo -j ACCEPT
# 内部から行ったアクセスに対する外部からの応答アクセスを許可
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
EOT
echo 'SSHのポート番号を変更します。(デフォルトは22)'
echo -n "-->"
read sshport
sed -i -e "s/Port 22/Port ${sshport}/" /etc/ssh/sshd_config
sed -i -e 's/ADMIN_EMAIL = root@localhost/#ADMIN_EMAIL = root@localhost/' /etc/denyhosts.conf
sed -i -e "s/-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT/-A INPUT -p tcp -m tcp --dport ${sshport} -j ACCEPT/" /etc/iptables.up.rules
iptables-restore < /etc/iptables.up.rules
######################################################################
# Apache2、PHP等インストール
echo '途中入力画面が表示されます。'
apt-get install -y build-essential vim unzip dar
apt-get install -y mysql-server sqlite3
apt-get install -y xinetd
apt-get install -y postfix
apt-get install -y nginx
apt-get install -y php5 php5-cgi php5-cli php5-mysql php5-sqlite php-mdb2-driver-sqlite php5-dev php5-gd php-apc php-pear php5-fpm
apt-get install -y php5-mcrypt php5-mhash php5-xsl php5-xmlrpc libssh2-php php5-curl
apt-get install -y phpmyadmin
apt-get install -y imagemagick
#Webminインストール
echo 'Webminのインストールを行いますか?(Y/N)'
while [ 1 ]
do
echo -n "-->"
read time
case $time in
y|Y)
wget http://download.webmin.com/devel/deb/webmin_current.deb -P /tmp
dpkg -i /tmp/webmin_current.deb
apt-get -f -y install
echo 'Webminのポート番号を変更します。(デフォルトは10000)'
echo -n "-->"
read webminport
sed -i -e "s/port=10000/port=${webminport}/" /etc/webmin/miniserv.conf
iptables -A INPUT -p tcp -m tcp --dport ${webminport} -j ACCEPT
break
;;
n|N)
break
;;
*) echo "Error! YかNを入力して下さい。"
esac
done
######################################################################
#iptables
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables-save > /etc/iptables.up.rules
######################################################################
# nginxの設定
#バックアップ
mv /etc/php5/fpm/pool.d/www.conf /etc/php5/fpm/pool.d/www.conf_
cat <<EOT > /etc/nginx/nginx.conf
user  nginx users;
worker_processes  3;
worker_rlimit_nofile 1024;
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;
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     on;
keepalive_timeout  0;
server_tokens     off;
gzip  on;
gzip_http_version 1.0;
gzip_types        text/plain
text/xml
text/css
application/xml
application/xhtml+xml
application/rss+xml
application/atom_xml
application/javascript
application/x-javascript
application/x-httpd-php;
gzip_disable      "MSIE [1-6].";
gzip_disable      "Mozilla/4";
gzip_static       on;
gzip_comp_level   1;
gzip_proxied      any;
gzip_vary         on;
gzip_buffers      4 8k;
gzip_min_length   1100;
include /etc/nginx/conf.d/*.conf;
}
EOT
cat <<EOT > /etc/nginx/php_exec_param
fastcgi_index index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_intercept_errors on;
include fastcgi_params;
client_max_body_size 20M;
EOT
cat <<EOT > /etc/nginx/common
#アクセスログ
set $deny_f 0;
if ( $http_user_agent ~* 'internal dummy connection' ){
set $deny_f 1;
}
location ~ .* {
if ( $deny_f = 1) {
return 403;
access_log off;
}
}
location ~* .(gif|jpg|png|ico|css|js)$ {
access_log off;
}
location = /favicon.ico {
access_log off;
log_not_found off;
}
location = /robots.txt {
access_log off;
log_not_found off;
}
#アクセス禁止
location ~ (.ht|.git|.svn) {
deny  all;
access_log off;
log_not_found off;
}
EOT
#nginxインクルードファイル
cat <<EOT > /etc/php5/fpm/pool.d/default.conf
[default]
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
chdir = /
EOT
cat <<EOT > /etc/php5/fpm/pool.d/www.conf
[www]
listen = 127.0.0.1:9001
user = www
group = users
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 10
pm.start_servers = 4
pm.min_spare_servers = 2
pm.max_spare_servers = 6
pm.max_requests = 400
request_terminate_timeout = 120s
chdir = /
php_admin_value[output_buffering] = off
php_admin_value[mbstring.language] = neutral
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
EOT
cat <<EOT > /etc/nginx/conf.d/default.conf
#Default
server {
listen       80 default_server;
server_name  localhost;
location / {
root   /usr/share/nginx/html;
index  index.html index.htm;
}
#include
include common;
}
EOT
cat <<EOT > /etc/nginx/conf.d/virtualhost.conf
#Test
server {
#基本設定
listen      80;
server_name www.sample.com;
root        /home/www/public_html;
index       index.php index.html index.htm;
#ログ管理
access_log  /home/www/log/access.log combined;
error_log   /home/www/log/error.log;
#PHP
location ~ .php$ {
fastcgi_pass 127.0.0.1:9001;
include php_exec_param;
}
#その他
include common;
}
#phpmyadmin
server{
listen 80;
server_name phpmyadmin.sample.com;
access_log off;
error_log off;
location / {
root /usr/share/phpmyadmin;
index index.php;
}
location ~ .php$ {
allow 許可IPアドレス;
deny all;
fastcgi_pass 127.0.0.1:9000;
include php_exec_param;
}
}
EOT
#ログローテートの編集
cat <<EOT > /etc/logrotate.d/nginx
/var/log/nginx/*.log /home/*/log/*.log {
daily
dateext
missingok
rotate 31
compress
delaycompress
notifempty
create 640 nginx users
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
EOT
#PHPの設定
sed -i -e 's/expose_php = On/expose_php = Off/' /etc/php5/fpm/php.ini
sed -i -e 's/log_errors_max_len = 1024/log_errors_max_len = 4096/' /etc/php5/fpm/php.ini
sed -i -e 's/upload_max_filesize = 2M/upload_max_filesize = 30M/' /etc/php5/fpm/php.ini
sed -i -e 's/post_max_size = 8M/post_max_size = 35M/' /etc/php5/fpm/php.ini
sed -i -e 's/allow_url_fopen = On/allow_url_fopen = Off/' /etc/php5/fpm/php.ini
sed -i -e 's#;session.save_path = "/tmp"#session.save_path = "/tmp"#' /etc/php5/fpm/php.ini
sed -i -e 's/session.hash_function = 0/session.hash_function = 1/' /etc/php5/fpm/php.ini
sed -i -e 's/;mbstring.language = Japanese/mbstring.language = Japanese/' /etc/php5/fpm/php.ini
sed -i -e 's#;date.timezone =#date.timezone = Asia/Tokyo#' /etc/php5/fpm/php.ini
sed -i -e 's/; events.mechanism = epoll/events.mechanism = epoll/' /etc/php5/fpm/php-fpm.conf
# MySQL詳細設定
mysql_secure_installation
##メモリーが少ないならコメント解除
#sed -i '/[mysqld]/i skip-innodb' /etc/mysql/my.cnf
######################################################################
# アンチウイルス
echo 'F-Prot Antivirusをインストールします。'
wget http://files.f-prot.com/files/unix-trial/fp-Linux.x86.64-ws.tar.gz -P /tmp
tar xzvf /tmp/fp-Linux.x86.64-ws.tar.gz -C /
cd /f-prot/
./install-f-prot.pl
#定期的なウイルス探査
crontab -l > /tmp/fprot.cron
cat <<EOT >> /tmp/fprot.cron
0 3 * * 3 /usr/local/bin/fpscan /home --report -o /var/log/fprot_scan.log
EOT
crontab /tmp/fprot.cron
######################################################################
# ちょっとしたセキュリティ向上
chmod 711 /etc/
chmod 711 /home/
chmod 711 /var/log/
chmod 700 /etc/nginx/
chmod 700 /etc/php5/cgi/php.ini
chmod 700 /etc/php5/cli/php.ini
chmod 700 /etc/php5/fpm/php.ini
mkdir /root/.ssh/
chmod 700 /root/.ssh/
######################################################################
echo 'ユーザー登録を行いますか?(Y/N)'
while [ 1 ]
do
echo -n "-->"
read time
case $time in
y|Y)
cat <<EOT > /tmp/userlist
www
EOT
cat <<EOT > /tmp/password
パスワード
EOT
UserListFile=/tmp/userlist
password=/tmp/password
while read uname
do
while read pw
do
useradd -d /home/$uname -g users -s /bin/bash -m $uname
echo $uname:$pw | chpasswd
done < $password
done < $UserListFile
break
;;
n|N)
break
;;
*) echo "Error! YかNを入力して下さい。"
esac
done
######################################################################
#時間設定
echo '時間同期を行います。'
echo 'NTPdを利用する場合はy、ntpdateを利用する場合はnを入力して下さい。'
while [ 1 ]
do
echo -n "-->"
read time
case $time in
y|Y)
apt-get install -y ntp
sed -i '/server ntp.ubuntu.com/iserver ntp.jst.mfeed.ad.jp' /etc/ntp.conf
sed -i '/server ntp.ubuntu.com/iserver ntp.nict.jp' /etc/ntp.conf
sed -i '/server ntp.ubuntu.com/iserver ntp.ring.gr.jp' /etc/ntp.conf
sed -i -e '/^server ntp.ubuntu.com/d' /etc/ntp.conf
break
;;
n|N)
crontab -l > /tmp/time.cron
cat <<EOT >> /tmp/time.cron
39 5,18 * * * /usr/sbin/ntpdate ntp.nict.jp
EOT
crontab /tmp/time.cron
break
;;
*) echo "Error! YかNを入力して下さい。"
esac
done
#念のためntpdateによる時間あわせ
ntpdate -u ntp.jst.mfeed.ad.jp
######################################################################
# 設定を反映する為リブートを行う
clear
echo '設定が終了しました。'
echo "SSHサーバーのポート番号は${sshport}となっています。"
echo 'ENTERキーを押すと再起動します。'
read dummy
echo '再起動します。'
reboot

今回参考にしたサイト

ubuntu10.04にnginxとphp-fpmを入れてwordpress動かす | tjun memo

http://tjun.jp/blog/2012/04/ubuntu-nginx-php-fpm-wordpress/

さくらのVPS2G(v3)で、Nginx + PHP5-fpm の環境を構築する方法 | NO AC.Milan, NO LIFE

http://makoto.forzamilan.jp/archives/3887

PHP-FPM/Nginx Security In Shared Hosting Environments (Debian/Ubuntu) | HowtoForge - Linux Howtos and Tutorials

http://www.howtoforge.com/php-fpm-nginx-security-in-shared-hosting-environments-debian-ubuntu

apache のかわりにnginxを使ってみる(6) nginx でgzipを使うには | レンタルサーバー・自宅サーバー設定・構築のヒント

http://server-setting.info/centos/apache-nginx-6-gzip-use.html

nginx設定メモ - おおにしあきらの日記

http://d.hatena.ne.jp/ohnishiakira/20110215/nginx

Ubuntu Server×Nginx本体の設定 | ID-Blogger

http://blog.infinity-dimensions.com/2012/07/ubuntu-nginx-config-setting.html