当我尝试设置 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 信息):
可以看到,mysqlnd静态显示0?!
我正在尝试使用 wordpress 以及“电离“。Ionize 还显示了一些 MySQL 错误:
有人知道如何解决这个问题(或者至少调试,因为日志文件中没有错误)吗?
谢谢任何提示!
答案1
在位于/etc/nginx/nginx.conf
或的 Nginx 配置文件中/etc/nginx/sites-available/
,您已在端口 80 的配置文件中打开了 http2 协议。只需将 替换listen 80 http2;
为 即可listen 80;
。
答案2
nginx 不会下载文件,它只是发送 HTTP 响应。Nginx
通常负责设置Content-Type:
HTTP 标头上的字段,默认情况下,nginx 使用哑剧当无法确定内容类型时,application/octet-stream 作为后备。
当浏览器收到具有此内容类型的标头时,它将提示下载操作,因为 application/octet-stream 是二进制文件的 MIME 类型。
对我来说,这表明 nginx 配置不正确,因为当它fastcgi_pass
正确设置时它会返回html/plain
标头。
您也可以直接设置 mime 类型
http://nginx.org/en/docs/http/ngx_http_core_module.html#types
或者此代码片段将设置 nginx 的默认 MIME 为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 等浏览器将继续缓存以前的值 - 因此它将继续提示下载。
可以通过打开开发人员工具,进入开发人员工具本身的设置,然后单击来克服这个问题禁用缓存(当开发工具处于打开状态时)