nginx mit php-fpm lädt PHP-Dateien herunter, anstatt sie auf Mac OS X auszuführen (lokale Umgebung)

nginx mit php-fpm lädt PHP-Dateien herunter, anstatt sie auf Mac OS X auszuführen (lokale Umgebung)

Ich habe Probleme, PHP-Dateien auf meinem lokalen Entwicklungscomputer auszuführen. Ich habe anscheinend erfolgreich installiertnginxUndphp-fpmscheint auch korrekt installiert und ausgeführt zu sein, aber ich kann nicht ganz herausfinden, warum PHP-Dateien heruntergeladen und nicht ausgeführt werden.

Nach vielen, vielen StundenFrustration, dachte ich, es wäre am besten, jemanden zu fragen, der das vielleicht schon einmal gemacht hat! Ich habe mein Bestes getan, um alle Informationen bereitzustellen, aber wenn es etwas gibt, das hilfreich sein könnte oder das ich übersehen habe,Bitte zögern Sie nicht zu fragenin den Kommentaren.

Bitte beachten Sie:Lesen Sie sich das Problem, das ich habe, sorgfältig durch. Der Grund dafür ist, dass ich fast jeden Artikel zu diesem Problem gelesen habe, den Google mir geben kann, und verschiedene Möglichkeiten, Korrekturen, Vorschläge, Neuinstallationen, Konfigurationen usw. ausprobiert habe. Keiner davon konnte mir helfen, das Problem, das ich habe, zu beheben oder auch nur zu debuggen. Mit anderen Worten, dies ist definitiv keine doppelte Frage. Ich habe ein paar Stunden damit verbracht, zu lesen, um sicherzugehen!

Ich habe erfolgreich installiertnginxUndphp-fpmusing https://github.com/josegonzalez/homebrew-php. Der gute alte Verlässliche brew doctorbestätigt, dass alles auf dem neuesten Stand ist und ich alles Notwendige installiert habe (XQuartz, Xcode-Befehlszeilentools usw.).

Hier sind einige Dateiauszüge, die beim Versuch, mein Setup zu verstehen, hilfreich sein könnten:

php-fpm-Protokoll

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

Bitte korrigieren Sie mich, wenn ich falsch liege, aber dies scheint zu zeigen, dass php-fpm korrekt läuft

die einzige Änderung in meiner php-fpm Konfigurationsdatei

/usr/local/etc/php/5.4/php-fpm.conf aus Zeile 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

Der Grund, warum ich dies geändert habe, myusername:staffist, dass die Benutzergruppe in meinem ~Verzeichnis so eingestellt ist. Dies könnte Teil des Problems sein, ich bin mir nicht sicher.

Ich bin tatsächlich auf alle üblichen Dateiberechtigungsprobleme gestoßen und kann bestätigen, dass alle meine Dateien in /clients/mywebsite/local dies mithilfe von chown -R myusername:staff ./und behoben haben chmod -R 0755 ./. In Anbetracht dessen sollte dies hoffentlich kein Berechtigungsproblem sein.

nginx-Konfigurationsdatei

/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;
    #    }
    #}

}

Die einzigen Teile, die ich gegenüber der Originaldatei in /usr/local/etc/nginx/nginx.conf.default geändert habe, sind das Hinzufügen von index.php zum location / {Block und das Auskommentieren des location ~ \.php$ {Blocks, um die php-fpm-Verarbeitung für .phpDateien zu ermöglichen

Erwähnenswert ist auch, dass ich eine /usr/local/etc/nginx/conf.d/mywebsite.confDatei erstellt und 127.0.0.1 mywebsite.localzu meiner Hosts-Datei hinzugefügt habe, die mir den Zugriff ermöglicht http://mywebsite.local.

Nginx scheint richtig eingerichtet zu sein, da ich auf http://mywebsite.local/test.htmlalle Dateien in meinem /clients/mywebsite/local/web/test.htmlOrdner zugreifen kann. Bei PHP-Dateien sieht die Sache jedoch anders aus. Sie werden vom Browser einfach als PHP-Datei heruntergeladen und überhaupt nicht ausgeführt.

mywebsite-Konfigurationsdatei

/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;
    }
}

Ich gehe davon aus, dass alle Teile hier überschrieben werden http://mywebsite.localund alles, was hier nicht enthalten ist, aus der normalen Datei übernommen wird /usr/local/etc/nginx/nginx.conf.

Es ist auch erwähnenswert, dass meine /usr/local/var/log/nginx/error.logDatei keine Fehler zurückgibt. Jedes Mal, wenn ich eine Änderung an den .confDateien vornehme, starte ich nginx mit dem Befehl neu sudo nginx -s reloadund kann bestätigen php-fpm, dass nginxProzesse ausgeführt werden.

Ich habe auch gelesen, dass man zu ändern hat 127.0.0.1:9000, was in meiner Konfiguration nicht enthalten zu sein scheint. Ich habe sogar /var/run/php5-fpm/php5-fpm.sockversucht, mithilfe von nach seiner Existenz zu suchen, aber es ist nicht auf meinem Computer vorhanden. Ich habe auch gelesen, dass man diesen Port zu etwas anderem ändern kann, als wenn er bereits verwendet wird. Da dies meine erste Installation ist, bin ich ziemlich sicher, dass dies nicht der Fall ist, aber wie würde ich das testen?findack:9000

Ich habe auch von einer anderen Datei gelesen, die sich dort befindet, /usr/share/nginx/htmlaber auch diese existiert nicht.

Nun, Sie haben bis hierhin gelesen, also vielen Dank! Wenn Sie irgendwie helfen können, würde ich mich sehr über Ihre Zeit freuen.

Antwort1

Können Sie, anstatt den PHP-Abschnitt in der Datei nginx.conf anzugeben, einen Serverstandort in der Standarddatei (im Verzeichnis „sites-available“) angeben und nginx entweder neu laden oder neu starten:

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;
        }
}

Stellen Sie außerdem sicher, dass Ihre Datei nginx.conf die folgende Anweisung enthält:

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

Antwort2

Ich denke, das Problem besteht darin, dass Sie keinen Upstream haben, um Nginx mitzuteilen, wohin PHP-Dateien gesendet werden sollen, etwa Folgendes in Ihrem HTTP-Block:

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

wo unix:/var/run/php-fpm.socketmuss in der Direktive „listen“ der PHP-Konfiguration angegeben werden.

Übrigens: ist keine gute PraxisWurzel innerhalb eines Standortblocksnochmehrere Indexanweisungen.

verwandte Informationen