CentOS7.3にnginx&PHP-FPMによるWebアプリケーション環境を構築する

#概要
nginxを使ってapacheに代わるWebアプリケーションサーバ環境を作る。

## このTIPSの目的

+ nginxがどのようなものか体験してみたい。
+ nginxとphpをどのように連携させるものか体験してみたい。

## インストールするソフトウェア

+ nginx 1.12.1-1
+ php-fpm 5.4.16


#手順

## 1.nginxのインストール

### 1-1.nginxのリポジトリを追加する

CentOS7.3にnginxの公式サイトからnginxのインストールパッケージを入手するため、`nginx.repo`を作成する。

```:/etc/yum.repos.d/nginx.repo
[nginx]
name=nginx.repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
```

### 1-2.nginxインストール

nginxからパッケージをダウンロードし、インストールする。

```
[root@localhost]# yum -y install nginx

 - 中略 -

Installed:
 nginx.x86_64 1:1.12.1-1.el7

Complete!
```

### 1-3.nginxのサービスを開始する

nginxインストール直後にwebサーバとしてのサービス確認ができるので、nginxサービスを開始する。

```
[root@localhost]# systemctl start nginx
```

### 1-4.nginxの動作確認
他コンピュータからcentosのipアドレスにアクセスした時、下記ウェルカムメッセージが表示されれば、Webサービスの正常性を確認したことになる。

![nginx_services_check.png](https://qiita-image-store.s3.amazonaws.com/0/184939/f39a2e69-ba36-788b-50a8-656707422a80.png)


## 2.PHP(PHP-FPM)のインストール

### 2-1.php5.4のインストール
centosサイトからphp5.4関連のパッケージをダウンロードし、インストールする。

```
[root@localhost]# yum -y install php php-mbstring php-pear php-fpm

- 中略 -

installed:
  php.x86_64 0:5.4.16-42.el7
  php-fpm.x86_64 0:5.4.16-42.el7
  php-mbstring.x86_64 0:5.4.16-42.el7
  php-pear.norach 1:1.9.4-21.el7

Dependency Installed:
  httpd.x86_64 0:2.4.6-67.el7.centos.2
  httpd-tools.x86_64 0:2.4.6-67.el7.centos.2
  libzip.x86_64 0:0.10.1-8.el7
  mailcap.noarch 0:2.1.41-2.el7
  php-cli.x86_64 0:5.4.16-42.el7
  php-common.x86_64 0:5.4.16-42.el7
  php-process.x86_64 0:5.4.16-42.el7
  php-xml.x86_64 0:5.4.16-42.el7

Complete!
```

### 2-3.php-fpmの設定を変更
nginxと連携させるため、php-fpmの設定を編集。
※ユーザアカウントnginxとグループアカウントnginxはパッケージ導入時に勝手に作成される

```:/etc/php-fpm.d/www.conf
[www]

listen = /var/run/php-fpm/php-fpm.sock;
listen.owner = nginx
listen.group = nginx
listen.mode = 660
user = nginx ← user = apacheから変更
group = nginx ← user = apacheから変更
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
```


### 2-4.php-fpmのサービスを開始する

```
[root@localhost]# systemctl start php-fpm
```


### 2-5.nginxに.phpファイルを処理するための設定を追記する
nginxの設定ファイルを下記のように書き換える。

```:/etc/nginx/conf.d/default.conf

listen       80;
server_name  localhost;

location / {
  root   /usr/share/nginx/html;
  index  index.php index.html index.htm;
}

error_page   500 502 503 504  /50x.html
location = /50x.html {
    root    /usr/share/nginx/html;
}

location ~ \.php$ {
  root           /usr/share/nginx/html;
  fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME  $document_root/scripts$fastcgi_script_name;
  fastcgi_param  PATH_INFO $fastcgi_script_name;
  include        fastcgi_params;
}

```

### 2-6.nginxを再起動
`/etc/nginx/cond.d/default.conf`への追記を反映させるため、nginxサービスを再起動する。

```
[root@localhost]# systemctl restart nginx
```

### 2-7.動作テストスクリプトを作成
phpが正常に処理していることを確認するため`phpinfo()`を実行するコードを記述したスクリプトファイルを作成する。

```php:/usr/share/nginx/www/index.php

<?php phpinfo(); ?>

```

## 3.サービスリリース
CentOSが再起動されてもサービスを提供できるように、systemctlで`nginx`と`php-fpm`の自動管理を有効にする。

```
[root@localhost]# systemctl enable nginx 
[root@localhost]# systemctl enable php-fpm 
```

# 一通りやってみた感想
Qiitaやgoogleで見つかった情報を参考にいろいろ試してみたが、実際に自分でやらないとわからない箇所が多く、やはり手順は自分で試して成功したものを正にするのが一番だなぁと思った。