LoginSignup
3
3

More than 5 years have passed since last update.

初心者が学んだログ(AWS+Nginx+PHP)

Posted at

この記事を読んで幸せになれそうな人

  • なんかレンタルサーバにphpファイルをおいて動かしたことあるよ!みたいな人
  • よくサーバのことわからんけどNginxでphpのなんか(wordpressとか)を使いたい人

お勉強の経緯

AWSに他のレンタルサーバからWordPressを移管することになった。
結構アクセスがくるので、Nginxで作ってみようかってはなしになったりした。

Nginxでphpを動かす際の注意点

レンタルサーバ君はPHPファイルを置いたら勝手に実行してくれたりするけど、普通はそうじゃない。
私はここで果てしなく躓いていた

Nginxはファイルを渡してくれるだけなので、PHPの実行はしてくれない。
PHPの実行は他のサービスがやってもらわないといけない。よくよく考えると当たり前だ

PHPを実施してくれるのはphp-fpmのお仕事です

NginxとPHPの導入

AWSのEC2(Amazon Linux2)でやってみる。
NginxとPHPの導入はamazon-linux-extrasでやるといいと思う。

# amazon-linux-extrasの一覧を確認
$ amazon-linux-extras

# phpとnginxを導入(バージョンは↑で確認したのを使うといい)
$ amazon-linux-extras install php
$ amazon-linux-extras install nginx

Nginxの設定

この辺は他といろんな記事と一緒。ドキュメントルートはどこでもいいけど/www配下としときます。

www
  ├─phpmyadmin
  └─wordpress

ちゃんとwww配下をnginxの持ち物にしておこう。

$ sudo chown -R nginx:nginx /www

Nginxの設定ファイルは多分/var/nginx/nginx.confとかにある。
まずはPHPが実行できるようにする

nginx.conf
# ...略...
server {
    listen 80;
    server_name www.example.com;
    index index.php ;
    root /www;
    # phpの設定
    location ~ \.php$ {
         fastcgi_pass   127.0.0.1:9000; # ここはphp-fpmの設定をみる
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         include        fastcgi_params;
    }
}
# ...略...

fastcgi_passphp-fpmの設定を参照すること。

次は、/wordpress配下に行くようにする。あとはphpmyadminにもいくようにする。
おまけにwp-config.phpを見えないようにしとく。
locationの順番に注意すること

nginx.conf
# ...略...
server {
    listen 80;
    server_name www.example.com;
    index index.php;
    root /www/wordpress;         # rootを/www/wordpressに向ける
    # wp-config.phpのまもり
    location ~* .*/wp-config\.php {
        return 301 /;
    }
    # phpmyadminの設定
    location /phpmyadmin {
        root /www/phpmyadmin;    # /phpmyadminに来たらrootは/www/phpmyadminに向ける
        location ~* /phpmyadmin/.*\.php {
             fastcgi_pass   127.0.0.1:9000; # ここはphp-fpmの設定をみる
             fastcgi_index  index.php;
             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
             include        fastcgi_params;
        }
    }
    # phpの設定
    location ~ \.php$ {
         fastcgi_pass   127.0.0.1:9000; # ここはphp-fpmの設定をみる
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
         include        fastcgi_params;
    }
}
# ...略...

php-fpmの設定

phpを実行するのはphp-fpmさんなので、ファイル書き込み、作成が発生する処理(wordpressのプラグインインストールとか)はパーミッションがかかわってくる。
php-fpmさんは初期設定ではapacheユーザになってるみたいなのでnginxユーザで実行する様にしとく。

確認

サービス再実行してcurlしてみる

$ sudo systemctl restart php-fpm.service
$ sudo systemctl restart nginx
$ curl -i localhost:80/

わかったこと

何となくで環境構築はやっちゃだめだよね。。。。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3