php5-fpm으로 nginx 서버를 설정했습니다. 사이트를로드하려고하면 오류없이 빈 페이지가 나타납니다. HTML 페이지는 훌륭하지만 PHP는 제공되지 않습니다. php.ini에서 display_errors를 켜려고했지만 운이 없습니다. php5-fpm.log에서 오류가 발생하지 않으며 nginx도 아닙니다.
nginx.conf
server {
listen 80;
root /home/mike/www/606club;
index index.php index.html;
server_name mikeglaz.com www.mikeglaz.com;
error_log /var/log/nginx/error.log;
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
편집하다
내 nginx 오류 로그는 다음과 같습니다.
2013/03/15 03:52:55 [error] 1020#0: *55 open() "/home/mike/www/606club/robots.txt" failed (2: No such file or directory), client: 199.30.20.40, server: mikeglaz.com, request: "GET /robots.txt HTTP/1.1", host: "mikeglaz.com"
답변
참고로, 확장명을 location
가진 파일을 잡기 위해 블록을 첨부 하고 .php
있습니다.
location ~ \.php$ {
include /path/to/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
를 다시 확인 /path/to/fastcgi-params
하고 nginx 사용자가 읽고 읽을 수 있는지 확인하십시오.
답변
바꾸다
include fastcgi_params;
와
include fastcgi.conf;
nginx.conf에서 fastcgi_param SCRIPT_FILENAME … 제거
답변
또한이 문제를했고 마침내 해결책을 발견 여기에 . 요컨대, nginx fastcgi 설정 파일 (우분투 12.04의 / etc / nginx / fastcgi_params)에 다음 줄을 추가해야합니다
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
답변
많은 사용자 가이 스레드에 빠져 nginx + php-fpm 을 사용하는 동안 빈 페이지가 표시되는 솔루션을 찾을 것으로 기대 합니다. 이것은 여기에 많은 답변과 내 자신의 조사 (php7.2로 업데이트 됨)를 읽은 후에 한 일을 요약 한 것입니다.
1) /etc/php/7.2/fpm/pool.d/www.conf
파라미터 값을 열고 확인합니다 listen
.
listen = /var/run/php/php7.2-fpm.sock
2) 매개 변수 listen
는 fastcgi_pass
사이트 구성 파일의 매개 변수 와 일치해야 합니다 (i, e 🙂 /etc/nginx/sites-enabled/default
.
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
3) 파일이 실제로 존재하는지 확인하십시오.
$ file /var/run/php/php7.2-fpm.sock
/var/run/php/php7.2-fpm.sock: socket
4) 존재하지 않으면 php7.2-fpm 이 실행되고 있지 않다는 것을 의미 하므로 다시 시작해야합니다.
$ sudo /etc/init.d/php7.2-fpm restart
[ ok ] Restarting php7.2-fpm (via systemctl): php7.2-fpm.service.
의 location
섹션 과 관련하여 /etc/nginx/sites-enabled/default
:
# pass PHP scripts to FastCGI server
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
파일 snippets/fastcgi-php.conf
이 위치에 있는지 확인하십시오 /etc/nginx/
.
$ file /etc/nginx/snippets/fastcgi-php.conf
/etc/nginx/snippets/fastcgi-php.conf: ASCII text
이 파일에는 php7.2-fpm에 필요한 변수 정의 목록이 포함되어 있습니다. 변수는 직접 또는 분리 된 파일의 포함을 통해 정의됩니다.
include fastcgi.conf;
이 파일은 다음 위치에 /etc/nginx/fastcgi.conf
있으며 다음과 같습니다.
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
...
fastcgi_param REDIRECT_STATUS 200;
nginx 에는 두 개의 가능한 매개 변수 파일 인 fastcgi_params 및 fastcgi.conf가 포함되어 있습니다. 둘의 차이점은 변수의 정의입니다 SCRIPT_FILENAME
.
$ diff fastcgi_params fastcgi.conf
1a2
> fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
긴 이야기를 짧게하려면 fastcgi.conf 가 항상 작동해야합니다. 어떤 이유로 든 설정이 fastcgi_params를 사용 하는 경우 다음을 정의해야합니다 SCRIPT_FILENAME
.
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
이제 nginx 구성을 다시로드하십시오.
$ sudo nginx -s reload
그리고 PHP 파일이 올바르게 표시되는지 확인하십시오. 예를 들어 :
/var/www/html/test.php
<pre><?php var_export($_SERVER)?></pre>
/var/www/html
문서 루트의 경로는 어디에 있습니까 ?
여전히 빈 파일을보고있는 그 모든에도 불구하고, 확인 경우가 php.ini
있다 short_open_tag
(당신이 짧은 태그와 PHP 페이지를 테스트하는 경우)를 활성화.
답변
/ etc / nginx / fastcgi_params에 있는지 확인하십시오.
fastcgi_param SCRIPT_FILENAME $ request_filename;
왜 이것이 없는지 누가 알겠습니까? 이것이 총체적으로 낭비되어야하는 시간!
답변
nginx에서 fastCGI 응용 프로그램으로 전달 된 환경 변수를 반환하는 짧은 C 프로그램을 작성했습니다.
#include <stdlib.h>
#include <fcgi_stdio.h>
extern char **environ;
int main(int argc, char **argv) {
char *envvar;
int i;
int count = 0;
while(FCGI_Accept() >= 0) {
printf("Content-type: text/html\n\n"
"<html><head><title>FastCGI Call Debug Tool</title></head>\n"
"<body><h1>FastCGI Call Debugging Tool</h1>\n"
"<p>Request number %d running on host <i>%s</i></p>\n"
"<h2>Environment Variables</h2><p>\n",
++count, getenv("SERVER_NAME"));
i = 0;
envvar = environ[i];
while (envvar != NULL) {
printf("%s<br/>",envvar);
envvar = environ[++i];
}
printf("</p></body></html>\n");
}
return 0;
}
예를 들어 파일에 저장하십시오. fcgi_debug.c
설치 첫째, 그것을 컴파일하려면 gcc
하고 libfcgi-dev
, 다음 실행 :
gcc -o fcgi_debug fcgi_debug.c -lfcgi
실행하려면을 설치 spawn-fcgi
한 후 다음을 실행하십시오.
spawn-fcgi -p 3000 -f /path/to/fcgi_debug
그런 다음 디버그 프로그램을 가리 키도록 nginx fcgi 구성을 변경하십시오.
fastcgi_pass 127.0.0.1:3000;
nginx를 다시 시작하고 페이지를 새로 고치면 디버깅 할 수 있도록 모든 매개 변수가 브라우저에 나타납니다! 🙂
답변
이 힌트는 Ubuntu 14.04 LTS 설치에 도움이되었습니다.
또한 전원을 켜야 short_open_tag
했습니다/etc/php5/fpm/php.ini
$ sudo kate /etc/php5/fpm/php.ini
short_open_tag = On
$ sudo service php5-fpm restart
$ sudo service nginx reload