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 が書いてあるので それを編集してコンパイルすればよい。

アクセスログ

を参考にした。

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
}

Tags of current page