nginx を使う
私のウェブサーバはほとんどが静的ファイルであるのと Apache だとメモリの使用量が多いので nginx を使うことにした。 そもそも Apache でもきちんと設定すれば、困らないのかもしれないが。 OS は Ubuntu 10.04。
インストール
Ubuntu 10.04 に nginx のパッケージがあるのだが、新しいものを使いたいので PPA を追加してインストールする。
add-apt-repository ppa:nginx/stable
apt-get update
apt-get install nginx
/etc/nginx 以下に設定ファイルがある。 nginx.conf とディレクトリを見ると、 Debian 系の apache と同じように sites-available に設定を書いて sites-enabled にシンボリックリンクを張って使うようだ。 具体的には、/etc/nginx/sites-available/some_settings に設定を書いて
ln -s /etc/nginx/sites-available/some_settings /etc/nginx/sites-enabled/some_settings
でシンボリックリンクを張る。
リバースプロキシ
を参考にした。
nginx をリバースプロキシにして、 動的に生成されるファイルについては apache に転送する。
転送先に転送元の IP を知らせるために nginx がヘッダを追加するように設定する。 /etc/nginx/nginx.conf に
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_max_temp_file_size 0;
を追加する。
転送先が apache の場合、追加されたヘッダを解釈するように モジュールを追加する必要がある。
apt-get install libapache2-mod-rpaf
a2enmod rpaf
apache の設定としては ports.conf で 80 番以外のポートを書く。 nginx の方で指定したポートに転送する。
コンパイル
nginx はコンパイル時にモジュールを組み込まないといけないので、 deb パッケージをコンパイルする必要があるかと思い、調べてみた。 結局、コンパイルは不要だったので調べただけで終わってしまった。
/etc/apt/sources.list.d/nginx-development-lucid.list に deb-src の行を追加して
apt-get update
apt-get source nginx
として deb パッケージのソースコードを取得する。
debian/rules に configure option が書いてあるので それを編集してコンパイルすればよい。
アクセスログ
- http://satospo.sakura.ne.jp/blog_archives/tech/linux/logrotate_dateext.html
- http://d.hatena.ne.jp/izuno4t/20100224/1266982761
- http://linux.kororo.jp/cont/server/logrotate.php
- http://kamoland.com/wiki/wiki.cgi?logrotate%A4%CE%C0%DF%C4%EA
を参考にした。
nginx のログは logrotate で rotate される。 番号ではなく日付をつけるには、いくつか方法があるようだが、 最近の logrotate では
dateext
オプションを使えば良い。
/etc/logrotate.d/nginx は次のようにした。
/var/log/nginx/*.log {
daily
missingok
rotate 52
dateext
compress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}