そういうメンテ済みのAMIを拾ってくるっていう話はなしで、普通にキレイなAmazonLinuxAMIをベースに入れていきます。
既にインスタンスは起動していて、sshで接続しているのを前提にします。また、インスタンスに紐付いているセキュリティポリシーで外部からHTTP(TCP 80)へ通信が通るようにしてください。
nginxとPHPをインストール
|
1 2 |
sudo yum install nginx -y sudo yum install php56 php56-fpm php56-mbstring php56-gd php56-mcrypt php56-intl php56-xml php56-xmlrpc php56-pdo php56-mysqlnd -y |
PHPモジュールはphp56とphp56-fpmが必須です。他は任意で選択してください。
nginxの設定
nginxはデフォルトでphpファイルをハンドリングしないため、インデックスパスへの追加とphpファイルへアクセスした際にphp-fpmへソケットで受け流す設定にします。
|
1 |
sudo vim /etc/nginx/nginx.conf |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
http { - index index.html index.htm; + index index.php index.html index.htm; server { - #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$ { + 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$fastcgi_script_name; + include fastcgi_params; + } } } |
php-fpmの設定
こちらは主にapacheで使用する設定からnginxで使用する設定に変更し、ソケット通信を用いるようにします。
|
1 |
sudo vim /etc/php-fpm-5.6.d/www.conf |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-user = apache +user = nginx -group = apache +group = nginx -listen = 127.0.0.1:9000 +listen = /var/run/php-fpm/php-fpm.sock -listen.owner = nobody -listen.owner = nobody +listen.owner = nginx +listen.owner = nginx |
起動
設定ファイルの変更が終わったらいよいよ起動です。
|
1 2 3 4 5 6 |
sudo service nginx start sudo service php-fpm start # 起動確認 sudo service nginx status sudo service php-fpm status |
OSを再起動したときに自動起動する設定にしておきます。
|
1 2 3 4 5 6 |
sudo chkconfig nginx on sudo chkconfig php-fpm on # 設定確認 sudo chkconfig --list nginx sudo chkconfig --list php-fpm |
動作確認
|
1 2 3 4 5 6 7 8 9 |
# http://(ドメイン)/ echo "<?php echo 'It works! index.php';" >> /usr/share/nginx/html/index.php # http://(ドメイン)/abc.php echo "<?php echo 'It works! abc.php';" >> /usr/share/nginx/html/abc.php # http://(ドメイン)/tmp/abcd.php mkdir -p /usr/share/nginx/html/tmp echo "<?php echo 'It works! tmp/abcd.php';" >> /usr/share/nginx/html/tmp/abcd.php |
それぞれのURLでアクセスでき、正しくechoの中身だけが出力されていればOKです。
もし繋がらないときは、設定ファイルを見直して、nginxとphp-fpmが正しく起動されているか確認してください。見落としやすいミスとして、AWS上で起動したインスタンスに紐付いているセキュリティポリシーでHTTPのアクセスを弾いていることがあります。またインスタンス上でiptablesが実行されている場合は次のコマンドで停止させてください。
|
1 2 3 4 |
sudo service iptables stop # 停止確認 sudo service iptables status |
さいごに
これらの設定は最速で動かすことを目指して書いています。実際にはこれらをインストールする前にLinuxのセキュリティ設定を行うべきですし、nginxのセキュリティ設定やチューニング、アプリケーション側のnginx対応などを行う必要があります。
それらについてはまた別に書きますが、上の設定のまま実際にウェブサイトを公開することは危険です。必ずセキュアな状態にした上で公開してください。


