nginxをインストールしてphpを動かす

やること

タイトル通りです。debianにnginxをインストールして、phpが動くまでの設定を行います。

環境

OS: debian jessie

サイトのURL: hoge.com

ドキュメントルート: /var/www/hoge/html

nginxの基本設定

まずはnginxをインストールします。普通にaptからで大丈夫なはずです。

apacheが入っている場合はapacheを削除する必要があるかもしれません。

$ sudo aptitude install nginx

次に、バーチャルホストの設定を行います。

バーチャルホストの設定は/etc/nginx/site-enabled/にあるものを自動的に読み込んでくれますが、ここに直接作成してはいけません。まず、/etc/nginx/site-available/に作成し、/etc/nginx/site-enabled/にシンボリックリンクを貼ります。こうすることで、サイトを無効にしたいときにシンボリックリンクを消すだけで良くなります。

設定は以下のとおりです。

/etc/nginx/site-available/hoge

server{

listen 80;

server_name hoge.com;

root /var/www/hoge/html;

}

ここでは最低限の設定しかしていないので、必要に応じてaccess_logなどの設定も行ってください。

 

ここで、バーチャルホストの設定が正しくできたかを確認します。

まずはnignxを再起動します。

$ sudo /etc/init.d/nginx restart

次に、表示するファイルを作成します

/var/www/hoge/html/index.html

<!DOCTYPE html>

<h1>Hello World</h1>

最後に、必要に応じてhostsに書き込みます。

/etc/hosts

127.0.0.1  hocalhost

127.0.0.1 hoge.com

http://hoge.com/index.html にアクセスして、表示されれば問題ありません。(ファイル名を省略してhttp://hoge.comにアクセスすると表示されないので注意してください)

 

php-fpmのインストール

phpが入っていない場合はインストールします。

$ sudo aptitude install php5

次に、php-fpmをインストールします。

$sudo aptitude install php5-fpm

php-fpmのインストールはこれで終わりです。

 

php-fpmとnginxの連携の設定

あとは、php-fpmとnginxの連携の設定を行えばとりあえずの目的は達成できます。

まず、php-fpmとnginxが同じユーザで動くように設定します。私の環境ではデフォルトで両方共www-dataユーザで動作するように設定されていました。

/etc/php5/fpm/pool.d/www.conf

...

user = www-data

...

/etc/nginx/nginx.conf

...

user www-data;

...

次に、ソケットの設定をします。

/etc/php5/fpm/pool.d/www.conf

...

listen = /var/run/php5-fpm.sock

...

これで下準備は整ったので、最後にバーチャルホストでphpが動くように設定します。

phpの設定は、/etc/nginx/site-available/defaultを参考にしています。

/etc/nginx/site-available/hoge

server{

listen 80;

server_name hoge.com;

root /var/www/hoge/html;

index index.php

location ~ \.php$ {

fastcgi_split_path_info ^(.+\.php)(/.+)$;

fastcgi_pass unix:/var/run/php5-fpm.sock;

fastcgi_index index.php;

include fastcgi_params;

}

}

ついでにhttp://hoge.comにアクセスした時に自動でhttp://hoge.com/index.phpを表示する設定も行っています。

 

動作確認

長い長い道のりでしたが、ようやくここまでたどり着きました。

まずはindex.phpを作成します。中身はいつも通りphpinfo()を表示するだけです。

<?php

phpinfo();

http://hoge.comにアクセスして、phpinfo()が表示されていれば成功です。

 

失敗とか

何かの参考になるかもしれないので途中で発生した失敗とかを書いておきます。

  • 設定書き換えたのにリロードしてない。(頻繁にありました)
  • /etc/init.d/nignx restart するときに、sudoしてない。(エラーメッセージを読めばすぐわかります。英語だからといってちゃんと読まないのよくない)
  • セミコロンつけ忘れ 。(nginxの設定ファイルは末尾にセミコロンが必要です。あと、phpinfo()のあとにセミコロンつけ忘れて15分くらい悩んでました)

 

参考