php-fpm を使用した nginx は、Mac OS X (ローカル環境) で php ファイルを実行するのではなく、ダウンロードします。

php-fpm を使用した nginx は、Mac OS X (ローカル環境) で php ファイルを実行するのではなく、ダウンロードします。

ローカル開発マシンでPHPファイルを実行するのに問題があります。インストールは成功したようですが、nginxそしてphp-fpm正しくインストールされ、実行されているようですが、PHP ファイルが実行されるのではなくダウンロードされる理由がよくわかりません。

何時間もかけてフラストレーション、これを以前にやったことがある人に聞くのが一番だと思いました!私はすべての情報を提供するために最善を尽くしましたが、何か役に立つことや見逃したことがあれば、お気軽にお問い合わせくださいコメント欄に。

ご注意ください:私が抱えている問題についてよく読んでください。そう言う理由は、この問題に関して Google が提供できるほぼすべての記事を読み、さまざまな方法、修正、提案、再インストール、構成などを試したからです。どれも、私が経験している問題の修正やデバッグに役立ちませんでした。言い換えれば、これは間違いなく重複した質問ではありません。確認するために数時間かけて読みました。

インストールに成功しましたnginxそしてphp-fpmを使用しますhttps://github.com/josegonzalez/homebrew-php。古き良き信頼できるツールにより、brew doctorすべてが最新であり、必要なものがすべてインストールされていることが確認されます (XQuartz、Xcode コマンドライン ツールなど)。

私の設定を理解するのに役立つかもしれないファイルの抜粋を以下に示します。

php-fpm ログ

tail -f /usr/local/var/log/php-fpm.log

[24-Dec-2013 00:05:59] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[24-Dec-2013 00:05:59] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[24-Dec-2013 00:05:59] NOTICE: fpm is running, pid 31745
[24-Dec-2013 00:05:59] NOTICE: ready to handle connections

間違っていたら訂正してください。これはphp-fpmが正しく動作していることを示しているようです。

私のphp-fpm設定ファイルにおける唯一の変更点

/usr/local/etc/php/5.4/php-fpm.conf 145行目から

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = myusername
group = staff

これを変更した理由は、myusername:staff私のディレクトリでユーザー:グループがこのように設定されているためです~。これが問題の一部である可能性がありますが、よくわかりません。

確かに、一般的なファイル権限の問題にはすべて遭遇しましたが、/clients/mywebsite/local 内のすべてのファイルが と を使用してこれを修正したことを確認できますchown -R myusername:staff ./chmod -R 0755 ./これを念頭に置くと、うまくいけば、これは権限の問題ではないはずです。

nginx 設定ファイル

/usr/local/etc/nginx/nginx.config

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.php index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # 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  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

/usr/local/etc/nginx/nginx.conf.defaultにある元のファイルから変更した部分は、location / {ブロックにindex.phpを追加し、ブロックのコメントを解除してファイルlocation ~ \.php$ {のphp-fpm処理を許可しただけです。.php

また、アクセスできるようにファイルを作成し/usr/local/etc/nginx/conf.d/mywebsite.conf、ホスト ファイルに追加したことも言及する価値があります。127.0.0.1 mywebsite.localhttp://mywebsite.local

Nginx は正しく設定されているようで、フォルダーhttp://mywebsite.local/test.html内のファイルに完全にアクセスできます/clients/mywebsite/local/web/test.htmlが、PHP ファイルの場合は話が別です。PHP ファイルとしてブラウザーにダウンロードされるだけで、まったく実行されません。

mywebsite 設定ファイル

/usr/local/etc/nginx/conf.d/mywebsite.conf

server {
    listen   80;
    listen   [::]:80 default ipv6only=on;
    server_name  mywebsite.local;

    location / {
        root   /clients/mywebsite/local/web;
        index  index.php index.html index.htm;
    }

    # redirect server error pages to the static page /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

ここにある部分は上書きされhttp://mywebsite.local、ここにない部分は通常の/usr/local/etc/nginx/nginx.confファイルから取得されると想定しています。

私のファイルはエラーを返していないことも付け加えておきます/usr/local/var/log/nginx/error.log。ファイルに変更を加えるたびに.conf、コマンドを使用して nginx を再起動し、プロセスが実行されていることをsudo nginx -s reload確認できます。php-fpmnginx

127.0.0.1:9000への変更についても読みましたが、/var/run/php5-fpm/php5-fpm.sockこれは私の構成には含まれていないようです。 を使用してfindも、ackその存在を検索してみましたが、私のマシンにはありません。また、このポートが既に使用されている場合は、それを他のものに変更することも読みました:9000。これは初めてのインストールなので、そうではないことは確かですが、これをテストするにはどうすればよいでしょうか?

にある別のファイルについても読みましたが/usr/share/nginx/html、これも存在しません。

さて、ここまで読んでくださりありがとうございます。もし、何かお手伝いできることがありましたら、ご協力くださると本当にありがたいです。

答え1

nginx.conf ファイルで PHP セクションを指定する代わりに、デフォルト ファイル (sites-available ディレクトリ内) でサーバーの場所を指定して、nginx をリロードまたは再起動できますか。

server { 
        listen 80;
        listen [::]:820; #ipv6only=on;
        root /var/www/;  ##assuming your PHP application is in /var/www/
        index index.php index.html index.htm;
        server_name PHPApp;

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

また、nginx.conf ファイルに次のディレクティブが含まれていることを確認してください。

include /etc/nginx/sites-enabled/*;

答え2

問題は、http ブロックに次のような内容で、nginx に php ファイルを送信する場所を指示するアップストリームがないことだと思われます。

upstream php {
    server unix:/var/run/php-fpm.socket;
}

unix:/var/run/php-fpm.socketphp config の listen ディレクティブでwhereを指定する必要があります。

ところで、これは良い習慣ではありませんロケーションブロック内のルートまたは複数のインデックスディレクティブ

関連情報