Beim Versuch, NGINX für die Verwendung von PHP und MySQL einzurichten, stoße ich auf ein sehr seltsames Problem.
Zunächst scheint alles in Ordnung zu sein und zu funktionieren. Aber dieser Eindruck hält nur so lange an, bis eine SQL-Abfrage erfolgt (zumindest ist das mein Eindruck). Und anstatt das Ergebnis der Abfrage an PHP zu übergeben, werde ich aufgefordert, eine Datei mit dem Typ application/octet-stream herunterzuladen.
Wenn ich SQLite oder gar keine Datenbank verwende, ist jedoch alles in Ordnung. Hat jemand eine Idee, warum das passiert?
Wenn ich mir meine PHP-Informationen anschaue, erhalte ich dieses Ergebnis:
Zusätzlich analysierte INI-Dateien:
/etc/php/7.0/fpm/conf.d/10-mysqlnd.ini, /etc/php/7.0/fpm/conf.d/10-opcache.ini, /etc/php/7.0/fpm/conf.d/10-pdo.ini, /etc/php/7.0/fpm/conf.d/15-xml.ini, /etc/php/7.0/fpm/conf.d/20-calendar.ini, /etc/php/7.0/fpm/conf.d/20-ctype.ini, /etc/php/7.0/fpm/conf.d/20-curl.ini, /etc/php/7.0/fpm/conf.d/20-dom.ini, /etc/php/7.0/fpm/conf.d/20-exif.ini, /etc/php/7.0/fpm/conf.d/20-fileinfo.ini, /etc/php/7.0/fpm/conf.d/20-ftp.ini, /etc/php/7.0/fpm/conf.d/20-gd.ini, /etc/php/7.0/fpm/conf.d/20-gettext.ini, /etc/php/7.0/fpm/conf.d/20-iconv.ini, /etc/php/7.0/fpm/conf.d/20-imagick.ini, /etc/php/7.0/fpm/conf.d/20-imap.ini, /etc/php/7.0/fpm/conf.d/20-intl.ini, /etc/php/7.0/fpm/conf.d/20-json.ini, /etc/php/7.0/fpm/conf.d/20-mbstring.ini, /etc/php/7.0/fpm/conf.d/20-mcrypt.ini, /etc/php/7.0/fpm/conf.d/20-memcache.ini, /etc/php/7.0/fpm/conf.d/20-mysqli.ini, /etc/php/7.0/fpm/conf.d/20-pdo_mysql.ini, /etc/php/7.0/fpm/conf.d/20-pdo_sqlite.ini, /etc/php/7.0/fpm/conf.d/20-phar.ini, /etc/php/7.0/fpm/conf.d/20-posix.ini, /etc/php/7.0/fpm/conf.d/20-pspell.ini, /etc/php/7.0/fpm/conf.d/20-readline.ini, /etc/php/7.0/fpm/conf.d/20-recode.ini, /etc/php/7.0/fpm/conf.d/20-shmop.ini, /etc/php/7.0/fpm/conf.d/20-simplexml.ini, /etc/php/7.0/fpm/conf.d/20-sockets.ini, /etc/php/7.0/fpm/conf.d/20-sqlite3.ini, /etc/php/7.0/fpm/conf.d/20-sysvmsg.ini, /etc/php/7.0/fpm/conf.d/20-sysvsem.ini, /etc/php/7.0/fpm/conf.d/20-sysvshm.ini, /etc/php/7.0/fpm/conf.d/20-tidy.ini, /etc/php/7.0/fpm/conf.d/20-tokenizer.ini, /etc/php/7.0/fpm/conf.d/20-wddx.ini, /etc/php/7.0/fpm/conf.d/20-xmlreader.ini, /etc/php/7.0/fpm/conf.d/20-xmlrpc.ini, /etc/php/7.0/fpm/conf.d/20-xmlwriter.ini, /etc/php/7.0/fpm/conf.d/20-xsl.ini
Und dies ist meine MySQL-Konfiguration (auch aus den PHP-Informationen):
Wie Sie sehen, zeigt die MySQL-Statistik 0?! an.
Ich versuche dies sowohl mit WordPress als auch mit "Ionisieren". Ionize zeigt mir auch einige MySQL-Fehler an:
Weiß jemand, wie man das löst (oder zumindest debuggt, da die Protokolldateien keine Fehler enthalten)?
Danke für alle Hinweise!
Antwort1
In den Nginx-Konfigurationsdateien in /etc/nginx/nginx.conf
oder /etc/nginx/sites-available/
haben Sie das http2-Protokoll in den Konfigurationsdateien für Port 80 aktiviert. Ersetzen Sie einfach das listen 80 http2;
durch listen 80;
.
Antwort2
nginx lädt keine Dateien herunter, sondern sendet nur HTTP-Antworten.
Nginx ist normalerweise für das Setzen des Content-Type:
Felds im HTTP-Header verantwortlich und verwendet standardmäßig einenMIMEvon application/octet-stream als Fallback, wenn der Inhaltstyp nicht bestimmt werden kann.
Wenn ein Browser einen Header mit diesem Inhaltstyp empfängt, fordert er die Download-Aktion an, da application/octet-stream der MIME-Typ für Binärdateien ist.
Für mich ist das ein Hinweis darauf, dass nginx nicht richtig konfiguriert ist, denn wenn es fastcgi_pass
richtig konfiguriert ist, gibt es den html/plain
Header zurück.
Sie können den MIME-Typ auch direkt festlegen
http://nginx.org/en/docs/http/ngx_http_core_module.html#types
oder dieser Codeausschnitt setzt den Standard-MIME für nginx auftext/plain
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
# change application/octet-stream to text/plain
sudo sed -i 's/default_type application\/octet-stream/default_type text\/plain/'
/etc/nginx/nginx.conf
Wenn Sie nginx und PHP richtig konfigurieren und die richtigen Content-Type:
Header senden, werden Browser wie Chrome weiterhin die vorherigen Werte zwischenspeichern - es wird also weiterhin ein Download angefordert.
Dies kann umgangen werden, indem Sie Entwicklertools öffnen, in die Einstellungen für die Entwicklertools selbst gehen und dann aufCache deaktivieren(während die Entwicklertools geöffnet sind)