[nginx] Amazon Linux + nginx + php-fpmでPHPスクリプトを実行する (ベーシック認証付き)


Amazon Linux 2015.09環境にnginx + php-fpmでPHPスクリプトが動作する環境を構築します。

1. 事前作業

1.1. Amazon Linux環境の構築

1.2. PHP環境の構築

インストール(yumパッケージの場合)
sudo yum install php54 -y
コマンド
which php
結果(例/AmazonLinux)
/usr/bin/php
コマンド(バージョン確認)
 php -v
結果(例/AmazonLinux)
PHP 5.4.45 (cli) (built: Sep 11 2015 21:23:18) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

1.3. nginxのインストール

コマンド
which nginx
結果(例/AmazonLinux)
/usr/sbin/nginx

1.4. (任意) htpasswdコマンド

nginxでベーシック認証する場合に必要です。
Amazon Linuxの場合、最初からはいっているようです。

コマンド
which htpasswd
結果(例/AmazonLinux)
/usr/bin/htpasswd

存在しない場合はインストールしておきます。

コマンド
sudo yum install httpd-tools

2. php-fpmのインストール

2.1. インストール

コマンド
sudo yum install php54-fpm -y
結果(例/AmazonLinux)
()

インストール:
  php54-fpm.x86_64 0:5.4.45-1.75.amzn1

完了しました!

2.2. 確認

コマンド
which php-fpm
結果(例/AmazonLinux)
/usr/sbin/php-fpm

3. php-fpmの設定

設定ファイルのうち、apacheと記述されているところをnginxに書き換えます。

/etc/php-fpm.d/www.conf
;39行目付近
;user = apache
user = nginx

;41行目付近
;group = apache
group = nginx

4. php-fpmの起動

コマンド
sudo service php-fpm start
結果(例/AmazonLinux)
Starting php-fpm:                                          [  OK  ]
コマンド
sudo chkconfig php-fpm on \
  && chkconfig --list php-fpm
結果(例/AmazonLinux)
php-fpm         0:off   1:off   2:on    3:on    4:on    5:on    6:off

5. nginxの設定変更

5.1 nginxの設定変更

/etc/nginx/nginx.conf
    # 44行目付近
    # index   index.html index.htm;
    index   index.php index.html;

        # 78行目付近
        #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  /usr/share/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }

設定変更をしたら設定ファイルが正しい文法に従っているかチェックをします。

コマンド
sudo nginx -t
結果(例/AmazonLinux)
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

5.2 nginxの再起動

一旦、nginxを再起動し、正常に起動するか確認します。

コマンド
sudo service nginx restart
結果(例/AmazonLinux)
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]

6. (任意) ベーシック認証の設定

ここでは、'sysadm'というディレクトリに対してベーシック認証することにします。

6.1. 認証ファイル用ディレクトリの作成

認証ファイルは、公開ディレクトリ(/usr/share/nginx/html)直下ではないところに置きましょう。

コマンド
sudo mkdir /usr/share/nginx/credentials

6.2. 認証ファイルの作成

変数の設定
AUTH_USER='sysadm'
コマンド
htpasswd -c htpasswd ${AUTH_USER}
入力
New password: 
Re-type new password:
結果(例)
Adding password for user sysadm

作成した認証ファイルを配置します。

コマンド
sudo mv htpasswd /usr/share/nginx/credentials/ \
  && ls /usr/share/nginx/credentials/htpasswd

6.3. ベーシック認証するディレクトリの作成

コマンド
sudo mkdir /usr/share/nginx/html/sysadm

6.4. nginxの設定変更

sysadmディレクトリの設定をnginxに追加します。
'/sysadm'以下でPHPスクリプトを実行する場合は、php-fpmの設定も個別で必要なようです。

/etc/nginx/nginx.conf
        # 57行目付近に追加
        location ~ ^/sysadm/* {
          auth_basic "Welcome sysadm.";
          auth_basic_user_file /usr/share/nginx/credentials/htpasswd;

          location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php; 
            fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
          }
        }

設定変更をしたら設定ファイルが正しい文法に従っているかチェックをします。

コマンド
sudo nginx -t
結果(例/AmazonLinux)
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

6.5 nginxの再起動

コマンド
sudo service nginx restart
結果(例/AmazonLinux)
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]

7. PHPスクリプトの動作確認

7.1. PHPスクリプトの作成

コマンド
cat << EOF > ~/info.php 
<?php
phpinfo();
EOF

作成したPHPスクリプトを公開ディレクトリに配置します。

コマンド(ベーシック認証の設定をした場合)
sudo cp ~/info.php /usr/share/nginx/html/sysadm/ \
  && cat /usr/share/nginx/html/sysadm/info.php
コマンド(ベーシック認証の設定をしなかった場合)
sudo cp ~/info.php /usr/share/nginx/html/ \
  && cat /usr/share/nginx/html/info.php

7.2. PHPスクリプトの動作確認

ブラウザからPHPスクリプトにアクセスしてみます。

  • ベーシック認証の設定をした場合: http://<ホスト>/sysadm/info.php

ベーシック認証のダイアログが表示され、ユーザ名とパスワードを入力すると以下の画面が表示されるはずです。

  • ベーシック認証の設定をしなかった場合: http://<ホスト>/info.php

以下の画面が表示されるはずです。

ベーシック認証の設定をしなかった場合は、動作確認後にかならず削除しておきましょう。

コマンド
sudo rm /usr/share/nginx/html/info.php
  && cat /usr/share/nginx/html/info.php
結果(例)
cat: /usr/share/nginx/html/info.php: そのようなファイルやディレクトリはありません

完了