menu
書いてる野郎
orebike@gmail.com
PHPのプログラムを動かす用事があって、どうせならということでNginxで動かしてみることにした。その時の記録
いろいろ参考にしたページはあるのだが、Ubuntuのaptで入れるやつはバージョンが古いと書いてあってソースから入れているところが多かった。
調べる 2012-07-12現在NginxJaでは1.2.0がやっとリリースされたことになっている。
調べる
$ apt-cache show nginx Package: nginx Priority: optional Section: universe/web Installed-Size: 84 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Kartik Mistry <kartik@debian.org> Architecture: all Version: 1.1.19-1
ということで1.1.19
リリースの履歴を見ると1.2.0の前のバージョンみたいだ。これでいいということでインストール
$ sudo apt-get install nginx
あっさり完了
サーバを起動してみる
$ /etc/init.d/nginx start
外部からブラウザで確認
確認OK
なんの捻りもなく一発
$ sudo apt-get install php5
入ったバージョンは5.3.1
終了
NginxとPHPを連携するにはphp-fpm
というもので繋ぐらしく、こいつをインストールする
$ sudo apt-get install php5-fpm
OK
このphp5-fpmというのがNginxへのリクエストをPHPへ横流しするというわけ。 なんというか位置づけ的にはJavaだったらtomcatみたいなもんですかな。PHPの実行コンテナ
ということでNginxからのリクエストを待たなければいけないのでこいつも起動する
起動スクリプトがあるのでドン
$ sudo /etc/init.d/php5-fpm start
この状態だとnginxとまったく関係なく動いているだけだから繋ぐ
Nginxの設定を書く、設定は
/etc/nginx/sites-available/
あたりに置いて、そこから
/etc/nginx/sites-enabled/
シンボリックリンクで有効にするのが作法のようだ。
最初から1個だけdefaultという設定があるので覗いてみる
なんとなくPHP用の設定っぽいところがあったのでコメントアウトを外す
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone: #fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; }
fastcgi_pass
という項目が2箇所あって今回はphp5-fpm
を使って連携するのでphp5-cgiと書いてあるほうはコメントアウトしておく。しておかないとNginx起動時に
Restarting nginx: nginx: [emerg] "fastcgi_pass" directive is duplicate in /etc/nginx/sites-enabled/default:69
なんて怒られる
これだけで連携できるのだが、一応index指定も書き加えておく。同じファイルの上のほうに
server { #listen 80; ## listen for ipv4; this line is default and implied #listen [::]:80 default ipv6only=on; ## listen for ipv6 root /usr/share/nginx/www; index index.html index.htm index.php; # Make site accessible from http://localhost/ server_name localhost;
のようにindex.php
を追記しておく
そしてNginx再起動
$ sudo /etc/init.d/nginx restart
繋いだので確認用に定番のコード
<?php phpinfo();
を
/share/nginx/www/info.php
として保存
ブラウザからアクセス!
502 Bad Gateway
と表示されて動かない!
意味わかんないのでログを見る。nginxのログは多分/var/log/nginx
以下あたりにある。
見ると
connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory)
こんな感じ。無いと
確かに/var/run/php5-fpm.sock
は存在しない。
さらに調べるとこんなのがあった。
つまり、php5-fpmってのは通常起動ではhttp:localhost:9000で待ち受けるだけでsock連携はしないんだよ〜という話
それを切り替えるには、php5-fpmの設定ファイル
/etc/php5/fpm/pool.d/www.conf
の中程を
; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on ; a specific port; ; 'port' - to listen on a TCP socket to all addresses on a ; specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. ; listen = 127.0.0.1:9000 listen = /var/run/php5-fpm.sock
のように127.0.0.1
で待ち受ける場所をコメントアウトして/var/run/php5-fpm.sock
で連携する記述を追記する
できたのでphp5-fpmを再起動する
$ sudo /etc/init.d/php5-fpm restart
再びブラウザからアクセスすると! 出た!OK!