Nginx에서 PHP를 실행할 때 파일을 찾을 수 없음
최근에 Nginx의 최신 버전을 설치했는데 PHP를 실행하는 데 어려움을 겪고 있는 것 같습니다.
도메인에 사용하는 설정 파일은 다음과 같습니다.
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
}
에러 로그 파일에 표시되는 에러는 다음과 같습니다.
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
다른 *fastcgi_param*을 사용해 보세요.
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
"file not found" 문제가 있어서 "root" 정의를 "server" 괄호로 이동하여 모든 위치에 기본값을 제공했습니다.임의의 위치에 자신의 루트를 지정함으로써 언제든지 이 값을 덮어쓸 수 있습니다.
server {
root /usr/share/nginx/www;
location / {
#root /usr/share/nginx/www;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}
또는 두 위치 모두에서 루트를 정의할 수도 있습니다.
대답하기엔 너무 늦었을지도 모르지만 이건 정말 짜증나는 오류니까 몇 가지 말씀 드리겠습니다.Mac OS X Yosemite에서 작동한 솔루션은 다음과 같습니다.
- 만약 당신이 가지고 있다면 최고입니다.
fastcgi_param SCRIPT_FILNAME $document_root$fastcgi_script_name;
빠른 cgi param을 가진 include는 이 행 위에 있어야 합니다.
도 포함한다) 모든 에는, 「PHP」(「PHP」)(「PHP」)가 .
a+x
권한을 부여합니다.
sudo chmod a+x /Users/ sudo chmod a+x /Users/oleg/ sudo chmod a+x /Users/oleg/www/ sudo chmod a+x /Users/oleg/www/a.php
저도 같은 문제를 겪고 있었고, 시험 기간 동안 두 가지 문제에 모두 직면했습니다.
1인치: "파일을 찾을 수 없습니다"
그리고.
2인치: 404 오류 페이지
그리고 내 경우엔,
Nginx 볼륨과 PHP 볼륨 모두에 공용 폴더의 볼륨을 마운트해야 했습니다.
Nginx에 마운트되어 있고 PHP에 마운트되지 않은 경우 "File not found"가 표시됩니다.
예(「File not found error」라고 표시됩니다).
services:
php-fpm:
build:
context: ./docker/php-fpm
nginx:
build:
context: ./docker/nginx
volumes:
#Nginx Global Configurations
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d/:/etc/nginx/conf.d
#Nginx Configurations for you Sites:
# - Nginx Server block
- ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
# - Copy Public Folder:
- ./sites/example.com/root/public/:/var/www/example.com/public
ports:
- "80:80"
- "443:443"
depends_on:
- php-fpm
restart: always
PHP에 마운트되어 있고 Nginx에 마운트되어 있지 않으면 404 Page Not Found 오류가 발생합니다.
예(404 페이지를 찾을 수 없음 오류 발생):
version: '3'
services:
php-fpm:
build:
context: ./docker/php-fpm
volumes:
- ./sites/example.com/root/public/:/var/www/example.com/public
nginx:
build:
context: ./docker/nginx
volumes:
#Nginx Global Configurations
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d/:/etc/nginx/conf.d
#Nginx Configurations for you Sites:
# - Nginx Server block
- ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
ports:
- "80:80"
- "443:443"
depends_on:
- php-fpm
restart: always
이 조작은 정상적으로 동작합니다(양쪽에 설치). (다른 것은 모두 올바르게 설정되어 있어 저와 같은 문제에 직면하고 있다고 가정합니다.)
version: '3'
services:
php-fpm:
build:
context: ./docker/php-fpm
volumes:
# Mount PHP for Public Folder
- ./sites/example.com/root/public/:/var/www/example.com/public
nginx:
build:
context: ./docker/nginx
volumes:
#Nginx Global Configurations
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/conf.d/:/etc/nginx/conf.d
#Nginx Configurations for you Sites:
# - Nginx Server block
- ./sites/example.com/site.conf:/etc/nginx/sites-available/example.com.conf
# - Copy Public Folder:
- ./sites/example.com/root/public/:/var/www/example.com/public
ports:
- "80:80"
- "443:443"
depends_on:
- php-fpm
restart: always
또, 여기에서는, Nginx/Php 를 사용한 완전한 작업 예프로젝트를 소개합니다.https://github.com/Pablo-Camara/simple-multi-site-docker-compose-nginx-alpine-php-fpm-alpine-https-ssl-certificates
누군가 도움이 되길 바라며, 이것에 대해 더 알고 있는 사람이 있으면 알려주세요, 감사합니다!
동작하지 않는 /상태를 디버깅하기 위해 약 40분밖에 걸리지 않았습니다.
$ SCRIPT_NAME=/status SCRIPT_FILENAME=/status QUERY_STRING= REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php5-fpm.sock
"File not found" 오류가 발생했지만 실제 스크립트(파일 시스템에 있는 스크립트)는 정상적으로 작동했습니다.
알고 보니 php5-fpm의 고립된 프로세스가 몇 개 있었습니다.php5-fpm을 완전히 재기동한 후 정상으로 돌아갔습니다.
이게 도움이 됐으면 좋겠다.
"Primary script unknown or in your case is file not found" 라는 오류 메시지는 거의 항상 Nginx fastcgi_filename 명령어(https://serverfault.com/a/517327/560171)에서 인용)의 SCRIPT_FILename 행에 잘못 설정된 것과 관련이 있습니다.
제 경우 Nginx 1.17.10을 사용하고 있으며 설정은 다음과 같습니다.
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 600;
}
$하면 $document_root" $realpath_root" 등 무엇이든 ./var/www/html/project/
라고 쓸가 없습니다.fastcgi_param SCRIPT_FILENAME /var/www/html/project$fastcgi_script_name;
루트가 변경될 때마다 표시됩니다.이 설정은 보다 유연합니다.이게 도움이 되길.
=================================================================================
것은, 「」를 .unix:/run/php/php7.2-fpm.sock failed (13: Permission denied) while connecting to upstream
, , , , , , , , 을./etc/nginx/nginx.conf
에서, syslogsuser nginx;
로로 합니다.user www-data;
및 은 PHP-FPM ""에서 볼 수입니다./etc/php/7.2/fpm/pool.d/www.conf
파일(https://www.linuxbabe.com/ubuntu/install-nginx-latest-version-ubuntu-18-04)의 Qoute:
user = www-data
group = www-data
이 정보가 큰 도움이 되길 바랍니다.
제 경우 PHP 스크립트 자체가 404 코드를 반환했습니다.nginx랑 아무 상관 없어
제 경우 루트 웹 디렉토리에 대한 권한이 올바르게 설정되지 않았기 때문입니다.이렇게 하려면 터미널에서 실행할 때 부모 폴더에 있어야 합니다.
sudo chmod -R 755 htmlfoldername
이렇게 하면 보안상의 이유로 운영에는 권장되지 않는 html 폴더 내의 모든 파일이 chmod됩니다.단, 트러블 슈팅 중에 문제가 없는지 확인하기 위해 해당 폴더 내의 파일을 볼 수 있습니다.
저도 이 오류가 있었어요.이 경우 동일한 루트 디렉토리를 가리키는 다른 가상 호스트가 있었기 때문입니다.
PHP72로 업그레이드한 후 php-fpm.d/www.conf에서 사용자/그룹 설정이 손실되어 오류가 발생하였습니다.셋업에 php-fpm이 포함되어 있는 경우는, 그것들을 재차 확인해 주세요.
저에게 문제는 위치 경로의 오타였습니다.
아마도 이런 종류의 문제를 먼저 확인해야 할 것이다.
프로젝트 경로입니다.
"File not found"를 표시했을 때 문제는 ngix config에서 다음 행을 가리키고 있는 폴더에 심볼링크가 없다는 것이었습니다.
root /var/www/claims/web;
다른 사람에게 도움이 될 경우 홈디렉토리의 서브폴더를 사용하고 있었기 때문인 것 같습니다만, 허가가 올바른 것 같고, SELinux 등의 기능이 없는 것 같습니다./var/www/something/something/something/something/something/something으로 변경해도 동작합니다.
(진짜 원인을 찾아내고 이 답을 기억해 두면 업데이트하겠습니다.)
이 명령어를 사용해 보세요.
sudo chmod 755 -R htdocs/
내 경우:relative dir를 사용했다.
location ~* \.(css|js)\.php$ {
root ../dolibarr/htdocs;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
이 회선도 기능하지 않았습니다.fastcgi_param SCRIPT_FILENAME /vagrant/www/p1/../p2/htdocs/core/js/lib_head.js.php;
그래서 나는 발견했다.fastcgi_param
는 상대 경로를 지원하지 않습니다.
이것은 동작합니다.
fastcgi_param SCRIPT_FILENAME /vagrant/www/p2/htdocs/core/js/lib_head.js.php;
웹사이트에 "File Not Found" (파일을 찾을 수 없습니다) 오류가 나타납니다.
nginx 웹 서비스 로그 위치를 가져오려면 /etc/nginx/nginx.conf(error_log) 구성 파일을 확인해야 합니다.그런 다음 nginx log: /var/log/nginx/error.log를 체크하여 근본 원인을 가져옵니다.
- 키워드:Fast CGI가 stderr로 전송됨: "기본 스크립트를 알 수 없음"
- 근본 원인: php-fpm 서비스 계정: apache가 webapps 디렉토리를 열 수 있는 액세스 권한이 없습니다.
스텝 0. 루트 디렉토리를 찾습니다. /etc/nginx/nginx.conf 파일을 열고 찾습니다.root
키워드
루트 디렉토리: /var/lib/nginx/webapps/
1단계. apache 계정이 ROOT 디렉토리에 액세스할 수 있는지 확인합니다.
sudo -u apache ls -l /var/lib/nginx/webapps/
스텝 2. 모든 ROOT 폴더에 대한 chmod a+x 권한
sudo chmod a+x /var/
sudo chmod a+x /var/lib/
sudo chmod a+x /var/lib/nginx/
sudo chmod a+x /var/lib/nginx/webapps/
이 문제는 nginx 버전으로 해결했습니다.nginx/1.21.3 PHP 7.4.23 macOS Catalina 버전 10.15.7
nano /usr/local/etc/nginx/nginx.conf
location ~ \.php$ {
root html;
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#Comment bellow Line
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
#Add This line
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
언급URL : https://stackoverflow.com/questions/17808787/file-not-found-when-running-php-with-nginx
'programing' 카테고리의 다른 글
컴파일을 시작할 수 없습니다.모듈의 출력 경로가 지정되지 않았습니다.." (0) | 2023.01.09 |
---|---|
python 설치 시 $PATH에서 사용할 수 있는 C 컴파일러를 찾을 수 없습니다. (0) | 2023.01.09 |
Python의 easy_install에 설치된 패키지를 삭제하려면 어떻게 해야 합니까? (0) | 2023.01.09 |
Vuex 변환을 사용하여 개체 참조를 업데이트하는 올바른 방법은 무엇입니까? (0) | 2022.12.25 |
jQuery를 사용하여 요소로 스크롤합니다. (0) | 2022.12.25 |