web-dev-qa-db-ja.com

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

PHPファイルをローカルの開発マシンで実行するのに問題があります。nginxphp-fpmも正しくインストールされ、実行されているようですが、なぜPHPファイルが実行されるのではなくダウンロードされているのか)を完全には理解できません。

欲求不満が何時間も続いた後、私はこれを以前にしたかもしれない誰かに尋ねることが最善だと思いました!私はすべての情報を提供するために最善を尽くしましたが、役立つかもしれない、または見逃した何かがある場合は、コメントで遠慮なく尋ねてください

ご注意ください:私が抱えている問題について注意深くお読みください。私がこれを言った理由は、Googleがこの問題に関連する可能性のあるほぼすべての記事を読み、修正、提案、再インストール、構成など、いくつかの異なる方法を試したためです。それらのすべてが助けることができませんでした私が経験している問題を修正またはデバッグします。つまり、これは間違いなく重複した質問ではありません。念のため読んで数時間過ごしました!

nginxおよびphp-fpmhttps://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.conf145行目から

; 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に変更した理由は、user:groupが~ディレクトリに設定されているためです。これは問題の一部である可能性がありますが、よくわかりません。

実際、通常のファイルアクセス権の問題はすべて発生しており、/ [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にある元のファイルから変更した唯一の部分は、index.phpをlocation / {ブロックに追加してコメントを外すことですlocation ~ \.php$ {ブロックは.phpファイルのphp-fpm処理を許可します

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

http://mywebsite.local/test.htmlフォルダーの/clients/mywebsite/local/web/test.html絶対ファイルにアクセスできるため、nginxは正しく設定されているようですが、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ファイルに変更を加えるたびに、コマンドSudo nginx -s reloadを使用してnginxを再起動し、php-fpmおよびnginxプロセスが実行されていることを確認できます。

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

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

まあ、ここまで読んだのでよろしくお願いします!とにかく手伝っていただけると助かります。

6
Oliver Tappin

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/*;
4
ali haider

問題は、phpブロックをどこに送信するかをnginxに伝えるためのアップストリームがないことだと思います。たとえば、httpブロックでは次のようになります。

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

どこ unix:/var/run/php-fpm.socketは、php configのlistenディレクティブで指定する必要があります。

ところで: ロケーションブロック内のルート複数のインデックスディレクティブ を使用することはお勧めしません。

0
ElBaulP