Mar 11th, 2010

nginx install on ubuntu 9.10

他にやること沢山あるのに、思い立ったが吉日ということで、apacheからnginx乗り換えました。
理由はただ一つ。軽いから。

ということで、早速インストールの話なんですが、ubuntuで提供されている nginxはpassengerのmodule loadに対応していないので、ソースからインストールすることに。
今回は安定版の最新の0.7.65を使うことにしました。
注意:今回は面倒なのですべてrootで作業してます。

まずはソースからインストールに必要なものをインストール

# apt-get install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev

次に公式からソースをダウンロードして展開。

# cd /tmp  
# wget http://sysoev.ru/nginx/nginx-0.7.65.tar.gz  
# tar -zxf nginx-0.7.65.tar.gz  

その後、既にインストールしてあるpassengerのインストーラスクリプトを使ってインストール

# /var/lib/gems/1.9.1/bin/passenger-install-nginx-module 

ただ標準のままだとsslがonに出来無いのでカスタムインストールを選択(2を選択)

select custom install

その後の画面で、展開済みのソースのディレクトリを指定されるので、/tmp/nginx-0.7.65と入力。

source directory input

次にインストール先のprefixを聞いてくるが、今回はデフォルトのままとした。

prefix directory

その次はオプションの指定で、ここでsslモジュール追加のオプション --with-httpsslmodule を入力する。

input ssl module option

これで良いか?って聞いてくるので、そのままEnter

confirm option

後は、コンパイルが始まって終わるまで待機してれば、nginxのインストールは終わります。

次にWordpressなどで使っているPHPを動かすように設定するために、php-cgiとspawn-fcgiをインストール。

# apt-get install php5-cgi spawn-fcgi

spawn-fcgiを使ってphp-cgiを起動するために、スクリプトを用意

# vi /etc/init/php-fastcgi.conf
# /etc/init/php-fastcgi.conf  
# php-fastcgi - starts php-cgi as an external FASTCGI process  
start on runlevel [2345]  
stop on runlevel [!2345]  
exec /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/php-fastcgi.pid  
respawn
# initctl start php-fastcgi

これで後はnginxのconfの設定。
最終的に以下のようにしました。

user  www-data www-data;  
worker_processes  3;  
error_log  logs/error.log;  
pid        logs/nginx.pid;  

events {  
    worker_connections  1024;  
}  

http {  
    passenger_root /var/lib/gems/1.9.1/gems/passenger-2.2.11;  
    passenger_ruby /usr/bin/ruby1.9.1;  
    include       mime.types;  
    include       fastcgi.conf;  
    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  logs/access.log  main;  

    sendfile        on;  
    keepalive_timeout  15;  
    tcp_nodelay        on;  
    gzip  on;  
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";  

    include /opt/nginx/conf/sites/*.conf;  
}

サイト毎の設定は /opt/nginx/conf/site/にファイルを作って読み込み。

passengerを使ったサイトの例

    server {  
        listen       80;  
        server_name  domain_name;  
        root    /var/www/vhosts/domain_name/public;  
        access_log  logs/domain_name.access.log  main;  
        passenger_enabled on;  
    }

phpを使ったサイトの例

    server {  
        listen       80;  
        server_name  domain_name;  
        root        /var/www/vhosts/domain_name/htdocs;  
        access_log  logs/domain_name.access.log  main;  
        location / {  
            index index.php;  
            if (!-e $request_filename) {  
                rewrite ^(.+)$ /index.php?q=$1 last;  
            }  
        }  
        location ~ \.php$ {  
            fastcgi_pass   127.0.0.1:9000;  
            fastcgi_index  index.php;  
        }  
        location ~ /\.ht {  
            deny  all;  
        }  
    } 

次に、今まで使っていたapache2の自動起動を停止

# update-rc.d -f apache2 remove

nginxの設定ファイルは借りているVPSにサンプルがここにあったので、そのまま使わせてもらった。

# mv init-deb.sh /etc/init.d/nginx  
# chmod +x /etc/init.d/nginx  
# update-rc.d -f nginx defaults

これでインストール終了。
長かった(;´Д`)

nginxについてはetagを標準装備していないとか、access_logの設定とかこの辺が気になるのだけど、まずはこれで落ち着かせて、少しずつ様子を見る予定。