使用Nginx运行PHP时找不到文件

use*_*995 55 php nginx

最近我安装了最新版本的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;
}
Run Code Online (Sandbox Code Playgroud)

}

这是我在错误日志文件中得到的错误:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
Run Code Online (Sandbox Code Playgroud)

小智 65

尝试另一个*fastcgi_param*之类的东西

fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)

  • 在1.6+` $ document_root $ fastcgi_script_name`似乎是正确的AFAIK方式,但为什么呢? (7认同)
  • 只是想知道你怎么调试这个?(nginx error.log中的消息实际上没有用,我在php5-fpm.log中得不到任何内容),谢谢. (7认同)
  • 或者使用$ document_root而不是绝对路径,我在维基中提到它 (4认同)
  • 如果您首先解释为什么会发生这种情况,我会给出"+ 1" (3认同)

dog*_*nic 42

我有"找不到文件"的问题,所以我将"根"定义移到"服务器"括号中,为所有位置提供默认值.您可以通过提供任何自己的根位置来覆盖它.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,我可以在我的两个位置定义root.

  • 这是为我解决的问题,接受的答案没有。 (2认同)

Ole*_*man 11

可能现在回答已经太晚了,但有几件事,因为这是一个非常烦人的错误.以下解决方案适用于Mac OS X Yosemite.

  1. 如果有的话,这是最好的

fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;

  1. 快速cgi参数的包含应该高于该行.

  2. 您正在执行的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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。在包含文件上方添加 `fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;` 在 Mac OS X Sierra 上对我来说很有效。 (2认同)

Pab*_*ara 10

我一直有同样的问题,在我的测试中,我遇到了两个问题:

1º:“找不到文件”

2º:404 错误页面

我发现,就我而言:

我必须在 Nginx 卷和 PHP 卷上为我的公共文件夹安装卷。

如果它安装在Nginx 中并且没有安装在PHP 中,它会给出:“找不到文件

示例(将显示“找不到文件错误”):


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

Run Code Online (Sandbox Code Playgroud)

如果它安装在PHP 中并且未安装在Nginx 中,它将给出404 Page Not Found 错误

示例(会抛出 404 Page Not Found 错误):

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

Run Code Online (Sandbox Code Playgroud)

这会工作得很好(安装在两侧)(假设一切良好配置,你就面临着同样的问题,因为我):

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
Run Code Online (Sandbox Code Playgroud)

这里还有一个使用 Nginx/Php 的完整工作示例项目,用于为多个站点提供服务:https : //github.com/Pablo-Camara/simple-multi-site-docker-compose-nginx-alpine-php-fpm-alpine-https -ssl-证书

我希望这对某人有所帮助,如果有人对此了解更多,请告诉我,谢谢!