Nginx lädt die Datei herunter, anstatt eine MySql-Abfrage durchzuführen

Nginx lädt die Datei herunter, anstatt eine MySql-Abfrage durchzuführen

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):

MySQL-Einstellungen

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:

Fehler innerhalb von Ionize (MySql-Fehler)

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.confoder /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_passrichtig konfiguriert ist, gibt es den html/plainHeader 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)

verwandte Informationen