Pandora Pocket

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

Ubuntuにnginxを入れてみた

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

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

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

ただこれも問題がありました。.htaccessPHPの設定が上書きできなかったりなぜか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の設定と上記の設定を一括で行うシェルスクリプト置いておきます。

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

[code]

#!/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

[/code]

 

今回参考にしたサイト

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