#この記事を読んで幸せになれそうな人
- なんかレンタルサーバに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が実行できるようにする
# ...略...
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_pass
はphp-fpm
の設定を参照すること。
次は、/
がwordpress
配下に行くようにする。あとはphpmyadminにもいくようにする。
おまけにwp-config.phpを見えないようにしとく。
location
の順番に注意すること
# ...略...
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/
#わかったこと
何となくで環境構築はやっちゃだめだよね。。。。