Nginx/Ubuntu1204にNginxとPHPを入れてみた

Nginx/Ubuntu1204にNginxとPHPを入れてみた

PHPのプログラムを動かす用事があって、どうせならということでNginxで動かしてみることにした。その時の記録

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

PHPのインストール

なんの捻りもなく一発

$ sudo apt-get install php5

入ったバージョンは5.3.1

終了

NginxとPHPの連携

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!

タグ

nginx/install_nginx_and_php_on_ubuntu_1204.txt · 最終更新: 2013-05-29 12:12 by ore