[Sy] 【解決した】HomebrewでNginx + php-fpmの環境を作ろうとしたらPHPファイルがダウンロードされる
Macbook Pro を最近新調したので、Nginx + php-fpm の環境を作ろうとしたら、設定をいくらいじってもPHPファイルがダウンロードされてしまうという感じでハマりました。同じ理由でハマった記事が見つからずに苦労したのでメモしておきます。まさかあいつが犯人とは・・・
環境
- Mac OS X / 10.11.5 (El Capitan)
- Homebrew / 0.9.9
- Nginx / 1.10.1
- PHP / 5.6.23
- Chrome / 51.0.2704.103
現象と経緯
- 普通に Homebrew 経由で Nginx と PHP をインストール。
- ドキュメントルートに
index.php
を適当に作成。 - 一旦ブラウザで
index.php
にアクセスして、ファイルがダウンロードされる。久々の php-fpm の設定だったので、この時は「そっかそっか。nginx.conf
いじらないとねー。忘れてた。」的な感じでまだ余裕かましてた。 nginx.conf
とphp-fpm.conf
の設定を変更。- 再度
index.php
にアクセス。まだPHPが実行できず。 - 何度か4と5を繰り返す。予定外のハマりに焦る。
みたいな感じです。
PHP5.6のインストールとphp-fpmの設定については以下に書きました。
⇒ [Sy] Mac(El Capitan)にPHP5.6とかPHP7をインストールして使えるようにする手順原因と解決方法
結局、以下2つが原因となっていてハマってました。
原因1:nginx.confの設定をミスってた
Homebrew でインストールされる Nginx のデフォルトの nginx.conf
には、以下のようなphp-fpm用の設定がコメントアウトされています。
http {
・
・
server {
・
・
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
# location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /script$fastcgi_script_name;
# include fastcgi_params;
# }
}
}
これを、最初以下のように変更していました。
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ { <-- ↓コメント解除 ここから
root /xxx/xxx/xxx; <-- ドキュメントルートの変更
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /script$fastcgi_script_name;
include fastcgi_params;
} <-- ↑コメント解除 ここまで
原因1の解決方法
「ここをコメント解除すればいいんだよね。あ、ドキュメントルート変更しなきゃね。」とささっと修正しましたが、1箇所変更が漏れてました。。。
fastcgi_param SCRIPT_FILENAME /script$fastcgi_script_name;
↓
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
原因1はこれでOKです。
そして、強敵だったのがもう一つの原因。。。
原因2:ChromeがPHPファイルをダウンロードした時の誤ったキャッシュを持ち続けていた
はい。そういうことでした。 最近のChromeは、例えばリダイレクトのキャッシュをずっと持ち続けたり、ちょいちょい他のブラウザよりも強力なキャッシュの実装になっていて開発時に困ったことがこれまでも何度かありました。
今回もそれが原因で、いくらnginx.conf
を修正しても、最初index.php
にアクセスした時にダウンロードされた時のキャッシュをChromeが持ち続けていて、原因がわかりづらくなっていたんですね。なので余計にハマってしまったということでした。
これはなかなか気づかなかったんですが、前にもキャッシュに苦しめられたことがあったので、もしかして。。。という感じで試しにFirefoxでアクセスしたらPHPファイルがダウンロードされなかったことで気づくことができました。
原因2の解決方法
ということで、以下の手順でキャッシュをクリアします。
- Chromeの「設定」(
chrome://settings
)を開く - 下の方にある、「詳細設定を表示…」リンクをクリックする
- 「プライバシー」のところにある「閲覧履歴データの消去…」ボタンをクリックする
- 「キャッシュされた画像とファイル」にチェックを入れる(念のため「Cookieなどのサイトデータやプラグインデータ」もチェックしました)
- 「閲覧履歴データを消去する」ボタンをクリックする
これで再度index.php
にアクセスすると、うまくいきました。
ひとこと
かなり時間ロスしました。悔しい。。。