Ich installiere eine Website in einem Droplet (Digital Ocean). Ich habe ein Problem bei der Installation von NGINX mit PHP. Ich habe ein Tutorial gemacht https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04 aber wenn ich Versuchen Sie, eine .php-Datei auszuführen, es wird nur heruntergeladen ... Zum Beispiel ... http://5.101.99.123/info.php
es funktioniert, aber ... Wenn ich zum Hauptcode http://5.101.99.123
gehe, wird mein index.php heruntergeladen: /
Irgendeine Idee?
-rw-r--r-- 1 agitar_user www-data 418 Jul 31 18:27 index.php
-rw-r--r-- 1 agitar_user www-data 21 Aug 31 11:20 info.php
Mein/etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /var/www/html;
index index.html index.htm index.php;
# Make site accessible from http://localhost/
server_name agitarycompartir.com;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location / {
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
... Andere "Standort" sind kommentiert (#)
Versuche dies:
/etc/nginx/sites-available/default
bearbeitenlisten 80; ## listen for ipv4; this line is default and implied
listen [::]:80 default_server ipv6only=on; ## listen for ipv6
server_name
in Ruhe# Make site accessible (...)
server_name localhost;
index.php
zur Zeile index
hinzuroot /usr/share/nginx/www;
index index.php index.html index.htm;
location ~ \.php$ {}
# pass the PHP scripts to FastCGI server listening on (...)
#
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
/etc/php5/fpm/php.ini
und stellen Sie sicher, dass cgi.fix_pathinfo
auf 0
eingestellt ist.Ich habe gerade vor einer Woche mit Linux angefangen und hoffe, dass ich Ihnen dabei helfen kann. Ich verwende Nano-Texteditor zum Bearbeiten der Dateien. Führen Sie apt-get install nano aus, wenn Sie es nicht haben. Google darauf, um mehr zu erfahren.
Sie müssen dies zu/etc/nginx/sites-enabled/default hinzufügen, um PHP-Dateien auf Nginx Server auszuführen:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Ich hatte ein ähnliches Problem, das durch das Leeren des Browser-Cache gelöst wurde (funktionierte auch mit anderen Browsern).
Update nginx config/etc/nginx/sites-available/default oder Ihre Konfigurationsdatei
wenn Sie PHP 7 verwenden, verwenden Sie dies
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
wenn Sie PHP 5 verwenden, verwenden Sie dies
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Besuchen Sie hier für vollständige Details Details hier
Das hat für mich gearbeitet.
1) MyApp-Datei
vi/etc/nginx/sites-available/meineAnwendung
server {
listen 80;
listen [::]:80;
root /var/www/myApp;
index index.php index.html index.htm;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
PHP5-Benutzer
Veränderung
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
zu
fastcgi_pass unix:/var/run/php5-fpm.sock;
2) cgi.fix_pathinfo konfigurieren
Setzen Sie cgi.fix_pathinfo auf 0
Ort:
PHP5 /etc/php5/fpm/php.ini
PHP7 /etc/php/7.0/fpm/php.ini
3) Dienste neu starten
FPM
php5 Sudo service php5-fpm restart
php7 Sudo service php7.0-fpm restart
NGINX
Sudo service nginx restart
Ich hatte das gleiche Problem und keine der Antworten löste das Problem.
Ich rannte:
Sudo nginx -t
um die Konfigurationsdatei unter/etc/nginx/sites-available/default zu testen.
Es gab mir diese Fehler:
nginx: [emerg] unexpected end of file, expecting "}" in /etc/nginx/sites-enabled/default:115
nginx: configuration file /etc/nginx/nginx.conf test failed
Also ging ich in die Konfigurationsdatei und in der letzten Zeile war es
#}
Ich kommentierte den Testbefehl erneut und es funktionierte
Wenn eine der vorgeschlagenen Antworten nicht funktioniert, versuchen Sie Folgendes:
listen = 127.0.0.1:9000;(delete all line contain listen= )
remove server block server{} (if exist) in block html{} because we use server{} in default (config file in etc/nginx/site-available) which was included in nginx.conf.
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi_params; }
Sudo-Dienst nginx Neustart
dienst php5-fpm Neustart
Erstellen Sie eine beliebige PHP-Datei in/usr/share/nginx/html und führen Sie sie in "servername/dateiname.php" aus (servername hängt von Ihrer Konfiguration ab, normalerweise ist dies localhost, dateiname.php ist der Name der Datei, die in/usr/share/nginx erstellt wurde/html).
Ich benutze Ubuntu 14.04
Für mich war es hilfreich, ?$query_string
am Ende von /index.php wie folgt hinzuzufügen:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
Ich sehe viele Lösungen oben und viele funktionierten für mich richtig, aber ich verstand nicht, was sie taten, und machte mir Sorgen, nur den Code einzufügen, insbesondere fastcgi. Also hier sind meine 2 Cent,
Für einige Server wie Apache gibt es eine integrierte Unterstützung für die Interpretation von PHP, sodass keine CGI erforderlich ist.
Dieser Digital Ocean-Link erklärt die Schritte zum Installieren von FPM ziemlich gut, und ich schreibe nicht die Schritte, die erforderlich sind, um das Problem der PHP-Dateien zu lösen, die heruntergeladen werden, statt zu rendern, da die anderen Antworten meiner Meinung nach ziemlich gut sind.
Die Antwort oben schien für die Lösung, die ich erreichte, zu viel zu kommentieren. So sah meine Akte aus:
/ etc/nginx/sites-available/default
location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Hoffe, das hilft einigen Leuten, die an einem Sonntagnachmittag frustriert sind (c:
In meinem Fall habe ich /etc/nginx/sites-available/default
nicht verwendet. Ich verwendete eine andere Serverblock-Konfigurationsdatei (z. B. example.com). Die einzige Möglichkeit, dieses Problem zu beheben, besteht darin, die symbolische Verknüpfung der Standardserverblock-Konfigurationsdatei zu entfernen:
$ rm /etc/nginx/sites-enabled/default
laden Sie dann Nginx neu:
$ Sudo systemctl reload nginx
Meine Lösung war hinzuzufügen
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
zu meiner benutzerdefinierten Konfigurationsdatei, zum Beispiel etc/nginx/sites-available/example.com.conf
Das Hinzufügen zu /etc/nginx/sites-available/default
hat für mich nicht funktioniert.
Für mich war es die Zeile: fastcgi_pass unix: /var/run/php5-fpm.sock;
das musste nur sein: fastcgi_pass unix: /run/php5-fpm.sock;
Kommentieren Sie die .php-Position in/etc/nginx/sites-available/default
Sudo vi/etc/nginx/sites-available/default:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
Ich hatte das gleiche Problem, was gelöst wurde. Dieser Serverblock hatte auch diesen Block über anderen Standortblöcken, wenn css Probleme nicht geladen hat. Die ich meiner zu meiner Site verfügbaren Conf-Datei hinzugefügt habe.
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
include fastcgi_params;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Das ist es also, was sich in meinem Fall schließlich als Umschreiberegeln für den Schuldigen erwiesen hat
Ich habe die Nginx Rewrite-Regeln wie folgt geändert.
location /vendors { rewrite ^/vendors/?$ /vendors.php break; }
wird...
location /vendors { rewrite ^/vendors/?$ /vendors.php last; }
Anscheinend wurde die Anfrage ohne das Schlüsselwort last nicht neu gestartet, sodass sie nie das .php
location-Segment erreichte und einfach als Download interpretiert wurde.
Wenn dir sonst nichts hilft. Und vielleicht haben Sie Apache2 bereits mit der Testdatei info.php installiert. Löschen Sie einfach die App-Daten (Cache, Cookie) für localhost.
Überprüfen Sie, ob Ihre Nginx-Konfigurationsdateierweiterung * .conf ist.
zum Beispiel: /etc/nginx/conf.d/myfoo.conf
Ich habe die gleiche Situation. Nachdem ich meine config-Datei von myfoo in myfoo.conf umbenannt habe, wurde sie behoben.
Für alle, die dasselbe Problem mit PHP 7 haben, habe ich Folgendes getan, damit Nginx PHP-Dateien ordnungsgemäß in CentOS 7 ausführt. Hier finden Sie Informationen, falls jemand dasselbe Problem hat:
Folgen Sie diesem Dokument Schritt für Schritt auf Digital Ocean .
Öffnen Sie den /etc/nginx/conf.d/default.conf
(standardmäßig stehen keine Sites zur Verfügung, noch Sites, die Sie bearbeiten können.).
Bearbeiten Sie den Parameter location
wie folgt:
default.conf:
location ~ \.php$ {
try_files $uri =404;
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
#instruct nginx execute php7 files instead download them :D
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Starten Sie die Dienste Nginx und PHP Sudo systemctl restart php-fpm
und Sudo systemctl restart nginx
neu.
Der allerletzte, klare Browser-Cache oder das Ausführen in incognito (Chrome)
oder Private Browsing (Firefox)
etc ...
Hoffe das hilfreiche und glückliche Programmieren
Ich wollte gerade versuchen, das Problem zu beheben. Für mich bestand das Problem darin, dass Cloudflare die PHP-Datei zwischengespeichert hatte und mich ständig dazu brachte, sie herunterzuladen.
Die Lösung für mich bestand darin, den Cache von Cloudflare zu leeren.
Ich habe mein Problem jetzt mit diesem Code gelöst (ändere deine IP):
location / {
access_log off;
log_not_found off;
client_max_body_size 2000m;
client_body_buffer_size 512k;
proxy_buffering on;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_buffer_size 64k;
proxy_buffers 32 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_connect_timeout 300s;
proxy_http_version 1.1;
proxy_set_header Range "";
proxy_pass https://123.123.123.123:444;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
Zuerst müssen Sie in Ihrem Browser
Remove cache
eingeben
Öffnen Sie dann das Terminal und führen Sie den folgenden Befehl aus:
Sudo apt-get install php-gettext
Sudo nano /etc/nginx/sites-available/default
Fügen Sie dann den folgenden Code in die default
-Datei ein:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.php index.html index.htm;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Bei Unstimmigkeiten korrigieren Sie einfach Nginx vom Terminal mit dem folgenden Befehl
Sudo systemctl nginx neu starten
Dann gehe zum Browser und genieße ...
für eine Aufzeichnung fand ich, dass meine PHP-Fpm nicht lief und ich reparierte es mit service php7.2-fpm stop
Was für mich mit Ubuntu 16.04 und PHP7 funktionierte, war das Löschen dieser Zeile
fastcgi_split_path_info ^(.+\.php)(/.+)$;
Danach wurden keine PHP-Dateien mehr heruntergeladen.