Nginx가 MySql 쿼리를 수행하는 대신 파일을 다운로드하고 있습니다.

Nginx가 MySql 쿼리를 수행하는 대신 파일을 다운로드하고 있습니다.

PHP와 MySQL을 사용하기 위해 NGINX를 설정하려고 할 때 매우 이상한 문제가 발생합니다.

처음에는 모든 것이 잘 작동하는 것 같습니다. 그러나 그 인상은 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 정보에서도 참조).

MySQL 설정

보시다시피, mysqlnd 정적은 0을 표시합니까?!

나는 WordPress 뿐만 아니라 "이온화하다". Ionize에서는 MySQL 오류도 표시됩니다.

Ionize 내부 오류(MySql 오류)

이 문제를 해결하는 방법(또는 로그 파일 내에 오류가 없으므로 최소한 디버깅하는 방법)을 아는 사람이 있습니까?

힌트를 주셔서 감사합니다!

답변1

/etc/nginx/nginx.conf또는 에 있는 Nginx 구성 파일의 /etc/nginx/sites-available/구성 파일에서 포트 80에 대한 http2 프로토콜이 켜져 있습니다. 를 listen 80 http2;로 바꾸면 됩니다 listen 80;.

답변2

nginx는 파일을 다운로드하지 않고 단지 HTTP 응답을 보냅니다.
Nginx는 일반적으로 HTTP 헤더의 필드 설정을 담당하며 Content-Type:기본적으로 nginx는몸짓 광대극콘텐츠 유형을 결정할 수 없는 경우 대체 수단으로 애플리케이션/옥텟 스트림을 사용합니다.
브라우저가 이 콘텐츠 유형의 헤더를 수신하면 application/octet-stream이 바이너리 파일의 MIME 유형이므로 다운로드 작업을 요청하는 메시지가 표시됩니다. 나에게 이것은 nginx가 제대로 구성되면 헤더를 반환하기
때문에 제대로 구성되지 않았다는 표시입니다 . MIME 유형을 직접 설정할 수도 있습니다fastcgi_passhtml/plain

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과 같은 브라우저는 이전 값을 계속 캐시하므로 계속해서 다운로드하라는 메시지가 표시됩니다.
개발자 도구를 열고 개발자 도구 자체의 설정으로 이동한 다음캐시 비활성화(개발 도구가 열려 있는 동안)

관련 정보