Help us understand the problem. What is going on with this article?

AWSのEC2で行うAmazon Linux(nginx・php7.1-fpm)環境構築

More than 3 years have passed since last update.

Amazon Linuxの初期設定まで記事はこちらになります。

それでは前回までに作成したAmazon Linuxでnginx・php-fpmの環境構築をしていきます。

開発環境

  • Mac OS X(El Capitan) 10.11.6
  • Amazon Linux AMI 2017.09.1 (HVM), SSD Volume Type - ami-33c25b55
    • nginx version: nginx/1.12.1
    • PHP 7.1.11 (cli)
    • php71-fpm-7.1.11-1.29.amzn1.x86_64

事前に用意しておく必要があるもの

  • 接続先EC2のパブリックDNS
  • 作業ユーザ(Amazon Linuxの場合デフォルトはec2-user)
  • EC2からダウンロードした秘密鍵(デフォルトは****.pem)

AWSのEC2にSSH接続

SSH接続

以下のコマンドを実行してAWSのEC2にSSH接続します。

$ ssh -i ~/.ssh/秘密鍵名.pem ユーザ名@パブリックDNS

ログイン完了

以下が表示がされたらログイン完了です。

Last login: Mon Jan 15 17:27:41 2018 from ***.***.***.***

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.09-release-notes/

nginxをインストール

nginxをインストール

以下のコマンドを実行してnginxをインストールします。

# nginxをインストール
$ sudo yum install nginx -y

# インストール確認
$ nginx -v

nginxの起動設定

以下のコマンドを実行してnginxを起動します。

# 起動
$ sudo service nginx start

# 自動起動設定確認
$ sudo chkconfig --list nginx

# 自動起動有効化設定
$ sudo chkconfig nginx on

# ステータス確認
$ sudo service nginx status

# ブラウザ確認
$ パブリックDNS

php-fpmをインストール

php-fpmをインストール

以下のコマンドを実行してphp-fpmをインストールします。

# phpをインストール
$ sudo yum install php71 php71-fpm -y

# インストール確認
$ php -v

# パッケージバージョン確認
$ rpm -qa | grep php

php71-json-7.1.11-1.29.amzn1.x86_64
php71-cli-7.1.11-1.29.amzn1.x86_64
php71-xml-7.1.11-1.29.amzn1.x86_64
php71-common-7.1.11-1.29.amzn1.x86_64
php71-fpm-7.1.11-1.29.amzn1.x86_64
php71-process-7.1.11-1.29.amzn1.x86_64
php71-7.1.11-1.29.amzn1.x86_64

php-fpmの起動設定

以下のコマンドを実行してphp-fpmを起動します。

# 起動
$ sudo service php-fpm start

# 自動起動設定確認
$ sudo chkconfig --list php-fpm

# 自動起動有効化設定
$ sudo chkconfig php-fpm on

# ステータス確認
$ sudo service php-fpm status

php-fpmとnginxの接続設定

www.confの編集

以下のコマンドを実行して、www.confファイル内の【user】と【group】を【apache】から【nginx】に変更します。

# www.confファイルがあるディレクトリへ移動
$ cd /etc/php-fpm-7.1.d

# オリジナルファイルのバックアップを作成
$ sudo cp www.conf www.conf.org

# www.confの編集
$ sudo vi www.conf
/etc/php-fpm-7.1.d/www.conf
# php-fpmでのnginx実行ユーザー指定 
 - user = apache
 + user = nginx
 - group = apache
 + group = nginx

nginx.confの編集

以下のコマンドを実行して、nginx.confファイル内の【server】ブロック内を変更します。

# default.confファイルがあるディレクトリへ移動
$ cd /etc/nginx

# オリジナルファイルのバックアップを作成
$ sudo cp nginx.conf nginx.conf.org

# nginx.confの編集
$ sudo vi nginx.conf
/etc/nginx/nginx.conf
# インデックスファイル指定
 - index index.html index.htm;
 + index index.html index.htm index.php;

# try_filesディレクティブ設定
 - location / {
 - }

 + location / {
 +     try_files $uri $uri/ /index.php$is_args$args;
 + } 

# nginxでのphpスクリプト実行設定
 - #location ~ \.php$ {
 - #    root           html;
 - #    fastcgi_pass   127.0.0.1:9000;
 - #    fastcgi_index  index.php;
 - #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 - #    include        fastcgi_params;
 - #}

 + location ~ \.php$ {
 +      fastcgi_pass  127.0.0.1:9000;
 +      fastcgi_index index.php;
 +      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 +      include       fastcgi_params;
 + }

php-fpmとnginxの接続確認

ドキュメントルートにphpinfo.phpのテストファイルを追加

以下のコマンドを実行して、ドキュメントルートでphpが実行できるか確認します。

# スーパーユーザーに切り替え
$ sudo su

# テスト用phpファイルの作成
$ echo '<?php phpinfo();' > /usr/share/nginx/html/phpinfo.php

nginxとphp-fpmの再起動

以下のコマンドを実行して、nginxとphp-fpmを再起動し設定を反映させます。

# nginxの再起動
$ sudo service nginx restart

# php-fpmの再起動
$ sudo service php-fpm restart

# ブラウザ確認
パブリックDNS/phpinfo.php

nginx error!対応

php-fpm再起動時にACLのワーニングが出る場合

Starting php-fpm-7.1: 
[16-Jan-2018 11:04:52] WARNING: [pool www] ACL set, listen.owner = 'nginx' is ignored
[16-Jan-2018 11:04:52] WARNING: [pool www] ACL set, listen.group = 'nginx' is ignored

php-fpm再起動時にACLのワーニングが出る場合は、www.confファイル内の【listen.acl_users】をコメントアウトします。

/etc/php-fpm-7.1.d/www.conf
- listen.acl_users = apache,nginx
+ ;listen.acl_users = apache,nginx

ブラウザで再確認してみますが、また【nginx error!】が表示されましたのでnginxの【error.log】を確認してみます。

ファイルパス:/var/log/nginx/error.log

参考までにphp-fpmの【error.log】は/var/log/php-fpm/7.1/error.logで出力されています。

# スーパーユーザーに切り替え
$ sudo su

# error.logの確認
$ less /var/log/nginx/error.log

## lessコマンドオプション
Shift + f (更新監視モードを実行)
Ctrl + c (更新監視モードを終了)
q (終了)

# エラー内容
2018/01/16 12:20:40 [crit] 32408#0: *13 connect() to unix:/var/run/php-fpm/www.sock failed (2: No such file or directory) while connecting to upstream, client: 111.107.157.137, server: localhost, request: "GET /phpinfo.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm/www.sock:", host: "13.231.12.47"

connect() to unix:/var/run/php-fpm/www.sock failedの修正

connect() to unix:/var/run/php-fpm/www.sock failed (2: No such file or directory) while connecting to upstream

上記エラーは【www.sock】ファイルがないため起こっているので、UNIXドメインソケット設定しphp-fpmを再起動して【.sock】ファイルを作成します。

その際、nginx.conf内の【include /etc/nginx/conf.d/*.conf;】という設定で/conf.d/php-fpm.confが読み込まれ【unix:/var/run/php-fpm/www.sock;】が使用されているのでUNIXドメインソケット設定はこちらに合わせて使用します。

UNIXドメインソケット設定

php-fpmのUNIXドメインソケット動作確認

以下のコマンドを実行して、php-fpmでUNIXドメインソケットを使用しているか確認できます。

# php-fpmのUNIXドメインソケット動作確認
$ netstat -al --protocol=unix |egrep "Proto|fpm"

Proto RefCnt Flags       Type       State         I-Node   Path

www.confの編集

以下のコマンドを実行して、www.confファイル内の【listen】と【listen.owner】と【listen.group】を変更します。

# www.confの編集
$ sudo vi /etc/php-fpm-7.1.d/www.conf
/etc/php-fpm-7.1.d/www.conf
# listenの内容を変更
- listen = 127.0.0.1:9000

- ;listen.owner = nobody
- ;listen.group = nobody

+ listen = /var/run/php-fpm/www.sock

+ listen.owner = nginx
+ listen.group = nginx

nginx.confの編集

以下のコマンドを実行して、nginx.confファイル内の【fastcgi_pass】を変更します。

# nginx.confの編集
$ sudo vi /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
# fastcgi_passの変更
- fastcgi_pass  127.0.0.1:9000;
+ fastcgi_pass  unix:/var/run/php-fpm/www.sock;

nginxとphp-fpmの再起動

以下のコマンドを実行して、nginxとphp-fpmを再起動し設定を反映させます。

# nginxの再起動
$ sudo service nginx restart

# php-fpmの再起動
$ sudo service php-fpm restart

# php-fpmのUNIXドメインソケット動作確認
$ netstat -al --protocol=unix |egrep "Proto|fpm"

Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     54424  /var/run/php-fpm/www.sock

ブラウザ再確認

以下のパスからブラウザ再確認します。無事表示されました。

パブリックDNS/phpinfo.php

ブログ記事の転載になります。

2no553
インターネットと自由を愛するマークアップエンジニア兼クラウドエンジニア。20代は教師目指して働いたり、ボランティアしたり色々やって、ニートからバックパッカーとして世界一周、その後に30歳で未経験からWebプログラマーに転職。中国移住を目指して神奈川から福岡に移住し、今、西を目指し中。人生は何事も気楽が一番!
https://ninolog.com/profile/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away