をやったので手順。

環境


  • Ubuntu 16.04
  • PHP 7.1
  • nginx

PHPとnginxはunixソケットで通信するようにしました。

nginxインストール & ユーザー作成


nginxをインストール。

1
2
sudo apt-get update
sudo apt-get install nginx

nginxのユーザとグループを作成。

1
sudo useradd -U nginx -s /sbin/nologin

/var/lib/nginxの所有者を作成したユーザに変更します。

1
sudo chown -R nginx:nginx /var/lib/nginx

/etc/nginx/nginx.confの1行目のuserを作成したユーザに変更します。

1
user nginx;

ここで一旦アクセスして「Welcome to nginx」が表示されることを確認します。

PHPインストール & 設定


nginxは一旦置いておいて、PHPをインストールします。標準のリポジトリでは7.0まで登録されていなかったのでadd-apt-repositoryでPPAリポジトリ追加してインストールします。

1
2
3
4
sudo apt-get install software-properties-common 
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.1-fpm

www.conf変更

次に/etc/php/7.1/fpm/pool.d/にあるwww.confを編集します。www-dataになっているものを先ほど作成したnginxに変更します。

1
2
3
4
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx

同じくwww.conflistenを下記の値に変更します。

1
listen = /var/run/php/php7.1-fpm.sock

ここまで終わると、再度nginxの設定に戻ります。

nginxの設定


sites-availableディレクトリ配下のdefaultに設定記述します。

少し話がそれますがsites-availableに複数の設定ファイルをおいてsites-enabledにシンボリックリンクを張ることで、単一Webサーバで複数のドキュメントルートを管理できます。バーチャルホストというやつです。この辺は説明しだすともう1記事かけてしまうので省略します。

今回は1サイトだけなので/etc/nginx/sites-available配下のdefaultを変更します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
server {
listen 80 default_server;

root /var/www/html;

server_name _;

location / {
try_files $uri /index.php?$query_string;
}

rewrite ^(.+)/$ $1;

location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(.+)$;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}

}

ちなみに上記の設定はnginx.confに直接書いても構いません。
また、この設定含めて開発環境用に必要最低限の記述しか書いてないので、残りは適当に設定してください。

index.php作成


前述のnginxの設定でドキュメントルートを/var/www/htmlにしているので、そこの下にindex.phpを作成します。とりあえず表示確認用にindex.phpにはphpinfoを書きます。

1
<?php phpinfo(); ?>

php-fpm & nginx再起動


php-fpmとnginxを再起動します。

1
2
service php7.1-fpm restart
service nginx restart

確認


アクセスして下記のような画面が表示されたら終わりです。

ダメな場合…


nginxのエラーログ、php-fpmのエラーログを確認します。