nginx
+를 사용하여 테스트 서버를 설치했습니다 php-fpm
. 나는 다음을 모두 시도했다.
PHP 파일을 렌더링하지 않는 Nginx + Php5-fpm
Nginx + PHP FPM-> 404 PHP 페이지-파일을 찾을 수 없음
PHP 파일에 액세스하면 nginx에서 404 오류가 발생합니다
내가 시도한 것을 요약하면 :
- 재설치.
- 스크립트 권한 변경 (로 변경
0777
) fastcgi_intercept_errors on
.- , 및
root
레벨에서 지시문을 확인했습니다 .server
location
location ~ \.php
fastcgi_param SCRIPT_FILENAME
지시문을 확인했습니다 .
서버는 .php
스크립트 에서 404를 반환합니다 . 이름을 바꿀 수 .html
있고 괜찮을 것입니다. 이 문제를 어떻게 해결할 수 있습니까?
이것은 내 nginx.conf
:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 2;
include /etc/nginx/conf.d/*.conf;
index index.html index.htm;
server {
listen 80;
server_name _;
root /var/www/html;
location / {
root /var/www/html;
index index.php index.html index.htm;
}
error_page 404 /404.html;
location = /40x.html {
#root /var/www/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
#root /var/www/html;
}
location ~ \.php$ {
root /var/www/html;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
}
답변
해결했습니다. 문제는 PHP가 듣고있는 소켓에 설정된 권한이라는 것이 밝혀졌습니다. 방금 호출 listen.mode
된 지시문을 변경해야했습니다 ./etc/php-fpm.d/www.conf
listen.mode = 0750
그리고 사용자를 nginx
다음 과 같이 설정하십시오 .
listen.owner = nginx
listen.group = nginx
따라서 파일은 다음과 같습니다.
srwxr-x---. 1 nginx nginx 0 jul 8 08:59 /var/run/php5-fpm.sock
tcp 포트 대신 유닉스 소켓을 사용했기 때문에 :
listen = /var/run/php5-fpm.sock;
또한, 나는 얻고 있었다 404
대신에 500
또는 503
내가 있기 때문 www.conf
하도록 구성된 리디렉션 오류를 사용자 정의 페이지 , 그들은이 없을 때부터, 나는 점점 된 404
‘들.
편집하다:
Fedora (Fedora 22, 23)의 최신 버전의 nginx 배포판에서 nginx는 기본적으로 아파치 사용자를 사용하며 소켓도 사용자 아파치로 설정되므로 추가 구성이 필요하지 않습니다.
답변
읽은 책 /php_status
이 php-fpm 7.0.x (현재 7.0.19) 및 nginx 1.12 (현재 1.12.0)에서 구성한 경로에 대해 일치하지 않는 문자열을 제공했기 때문에 실제로 “찾을 수 없음”오류가 발생했습니다.
여기는 /etc/php/7.0/fpm/pool.d/{config}
pm.status_path = /php_status
여기에 대한 구성이 default
있습니다 /etc/nginx/sites-available
(우분투에 있습니다).
server {
listen 80 default;
root /var/www;
index index.html index.htm default.html;
access_log /dev/null;
error_log /dev/null;
location / {
try_files $uri $uri/ =404;
}
location /php_status {
fastcgi_pass unix:/var/run/php7.0-fpm.sock;
# fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
allow 127.0.0.1;
deny all;
}
}
참고 : 다음은
/php_status
인터넷에서 공개적으로 사용할 수 없도록 설계되었습니다 (PHP 제공 또는 기본 호스트 설정도 아님). 또한fastcgi_pass
tcp 및 unix-socket php-fpm에 대한 지시문 도 포함 합니다.
또한 다음 두 명령을 실행해야합니다.
sudo service nginx reload
sudo service php7.0-fpm restart
실행을 확인하려면
curl http://127.0.0.1/php_status