programing

Nginx에서 PHP를 실행할 때 파일을 찾을 수 없음

javaba 2023. 1. 9. 21:21
반응형

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에서 작동한 솔루션은 다음과 같습니다.

  1. 만약 당신이 가지고 있다면 최고입니다.

fastcgi_param SCRIPT_FILNAME $document_root$fastcgi_script_name;

  1. 빠른 cgi param을 가진 include는 이 행 위에 있어야 합니다.

  2. 도 포함한다) 모든 에는, 「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

반응형