Я столкнулся с очень странной проблемой при попытке настроить NGINX для использования PHP и MySQL.
Сначала все вроде бы нормально и работает. Но это впечатление длится только до тех пор, пока не поступит SQL-запрос (по крайней мере, так мне кажется). И вместо того, чтобы передать результат запроса в PHP, мне предлагают загрузить файл с типом application/octet-stream.
Когда я использую SQLite или вообще не использую базу данных, все нормально. Есть ли у кого-нибудь идеи, почему это происходит?
Когда я просматриваю информацию о PHP, я получаю следующий результат:
Дополнительные проанализированные файлы .ini:
/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
А это моя конфигурация MySQL (также из PHP info):
Как видите, статистика mysqlnd показывает 0?!
Я пытаюсь сделать это с помощью WordPress, а также "Ионизировать". Ionize также показывает мне некоторые ошибки MySQL:
Кто-нибудь знает, как решить эту проблему (или хотя бы отладить, поскольку в файлах журнала ошибок нет)?
Спасибо за любые подсказки!
решение1
В файлах конфигурации Nginx, расположенных в /etc/nginx/nginx.conf
или /etc/nginx/sites-available/
, протокол http2 включен в файлах конфигурации для порта 80. Просто замените listen 80 http2;
на listen 80;
.
решение2
nginx не скачивает файлы, он просто отправляет HTTP-ответы.
Nginx обычно отвечает за установку Content-Type:
поля в заголовке HTTP и по умолчанию nginx используетMIMEapplication/octet-stream в качестве запасного варианта, когда он не может определить тип контента.
Когда браузер получает заголовок с этим типом контента, он предлагает выполнить загрузку, так как application/octet-stream — это тип MIME для двоичных файлов.
Для меня это признак того, что nginx настроен неправильно, потому что когда он fastcgi_pass
настроен правильно, он возвращает html/plain
заголовок.
Вы также можете задать тип MIME напрямую
http://nginx.org/en/docs/http/ngx_http_core_module.html#types
или этот фрагмент установит MIME по умолчанию для nginx наtext/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
Кроме того, если вы правильно настроите nginx и PHP и отправите правильные Content-Type:
заголовки, браузеры вроде Chrome продолжат кэшировать предыдущие значения, поэтому они продолжат предлагать загрузку.
Это можно обойти, открыв инструменты разработчика, зайдя в настройки самих инструментов разработчика и нажавотключить кэш(пока инструменты разработчика открыты)