AWSでNginxとPHP7.0の環境を用意する

はじめに

AWSRDBを用いた簡易なアプリを作成しろと大学の課題として出されたので、課題の前の環境設定についてまとめようと思いました。 Ubuntuでの設定のブログなり記事が見当たらなかった(日本語で)のでやってることは他のOSと変わらないんですがまとめておきます。 AWSインスタンス作成までは公式のページ参照してください。

AWSでNginxとPHPの設定をする

Nginxのインストール

$ ssh -i ~/.ssh/*******.pem ubuntu@[インスタンス名]
$ sudo apt-get update
$ sudo apt-get install nginx
$ sudo service nginx start

nginxをapt-getでインストールする前にapt-getのupdateを済ませないと最新版がふってきません。 これでnginxのインストールは終わりです。

Nginxの設定

ディレクトリの作成

サービスを公開するディレクトリを先に作ります。

「www」や「mysite」は適宜自分のディレクトリと読みかえて下さい。

最後にパーミッションを変更しておきます。

$ sudo mkdir www
$ cd www
$ sudo mkdir mysite
$ cd mysite
$ sudo vim index.html
$ cd
$ sudo chmod -R 755 www

Nginxのサーバ設定

Nginxの設定ファイルですが/etc/nginx/sites-availableにあります。

既にdefaultというファイルがありますが、これを直接いじるのではなくコピーして使用していきます。

$ cd /etc/nginx/sites-available
$ sudo cp default mysite

mysiteの設定ファイルを書き換えます rootのところはOSとしてUbuntuを指定した場合はubuntuになります。Ubuntu以外は適宜書き換えて下さい。 server_nameはAWSのパブリックDNSを参照してください。

$ sudo vim mysite

server {
        listen 80;
        listen [::]:80;
        root /home/ubuntu/www/mysite;
        index index.html index.htm;
 
        # Make site accessible from http://localhost/
        server_name *.amazonaws.com;
 
        location / {
 
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
}

sites-availablesの設定内容を反映させるために、sites-enabledにシンボリックリンクを作ります。

$ cd ..
$ cd sites-enabled
$ sudo ln -s /etc/nginx/sites-available/mysite mysite

最後にnginx.serviceをリスタートします

$ sudo service nginx restart
もしくは
$ sudo systemctl restart nginx

エラーが出た場合

nginxのrestart時にエラーが出た場合

$ sudo service nginx restart
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

このような感じが出ると思います。

この時は/var/log/nginx/error.logを見るといいです。

$ less /var/log/nginx/error.log
2016/11/14 14:20:14 [emerg] 27680#27680: invalid number of arguments in "root" directive in /etc/nginx/sites-enabled/bulletin_board:41

となっていた場合構文エラーです。セミコロンがなかったりします。

$ less /var/log/nginx/error.log
2016/11/14 14:27:39 [emerg] 27786#27786: could not build server_names_hash, you should increase server_names_hash_bucket_size: 64

となっていた場合サーバの名前の長さが長すぎるということなので

$ sudo vim /etc/nginx/nginx.conf 
-- server_names_hash_bucket_size: 64
++ server_names_hash_bucket_size:128

上のような感じで適当な長さに編集すればエラー解決できます。

 PHP7.0の設定

php7.0の導入

PHP7.0の導入についてです。

PHP7が公開されてからしばらくたつので、特に指定しなくてもphp70をapt-getで入手できます。

$ sudo apt-get install php

指定してやる方法は下の方法でいいはずです。

$ sudo apt-get install php70
$ sudo apt-get install php7.0-fpm

php7.0をnginxで使えるようにする

/etc/nginx/sites-available/mysiteを上で編集しましたが、それに追加します。 デフォルトだとコメントアウトされています。

$ sudo vim /etc/nginx/sites-available/mysite

 location / {
 
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
                # Uncomment to enable naxsi on this location
                # include /etc/nginx/naxsi.rules
        }
# 上がnginxの設定で書いた部分
# ここから下がphp7のための設定

location ~ \.php$ {
        
                fastcgi_pass unix:run/php/php7.0-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
                include fastcgi_params;
        #       include snippets/fastcgi-php.conf;
        #
        #       # With php7.0-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php7.0-fpm:
        #       fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

このように設定したら、nginxをリスタートします

$ sudo service nginx restart

最初に作ったディレクトリにindex.phpを作ります。

$ cd
$ cd www/mysite
$ sudo vim index.php

<?php
phpinfo();
?>

アクセスしてphpinfoが表示されれば完成です。