V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imsuwj
V2EX  ›  PHP

Nginx+PHP-fpm 出现 File not found( Primary script unknown)

  •  
  •   imsuwj · 2015-05-23 01:18:12 +08:00 · 8941 次点击
    这是一个创建于 3473 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ```
    server {
    listen 80;
    server_name localhost;
    root /home/user/www;
    index index.html index.htm index.php;
    location ~ \.php$ {
    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    ```
    LOG的错误是
    ```
    2015/05/23 00:58:54 [error] 6007#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/php-fpm.sock:", host: "127.0.0.1"
    ```
    路径没错。其他文件都可以访问。
    折腾了一天,不知道如何解决。
    Google出来的都是说fastcgi_param配置错误,然而我改了貌似也不行。
    第 1 条附言  ·  2015-06-02 12:55:12 +08:00
    帖子的问题解决办法:
    尝试了许多解决办法,无果,并不是php.ini、nginx.conf、php-fpm.conf都没有问题。我重新安装了nginx和php-fpm,设置什么的还是和原来一样,然后,可以了。。。还是不知道为什么。

    我在留言里说的那个403 Forbidden错误,确实是文件夹的权限问题。我之前只检查了/home/xxx/www这一层的权限,而/home/xxx的权限没有给到http用户。我把http用户加入和桌面用户xxx相同的users组,文件夹权限设置为751。
    9 条回复    2015-06-01 20:16:53 +08:00
    extreme
        1
    extreme  
       2015-05-23 01:34:18 +08:00
    试试这个:
    删掉这行:fastcgi_param SCRIPT_FILENAME
    然后用http://downloads.yzs.me/fastcgi_params的替换已有的fastcgi_params。
    重启Nginx, PHP FPM。
    kslr
        2
    kslr  
       2015-05-23 01:56:01 +08:00 via Android
    看看PHP.INI末尾有没有限制网站目录的
    fdb713
        3
    fdb713  
       2015-05-23 02:47:37 +08:00
    确保nginx是最新版(1.8.x)
    然后
    include fastcgi_params;
    改成
    include fastcgi.conf
    最后nginx -t检查无误后
    service nginx restart/systemctl restart nginx
    leecade
        4
    leecade  
       2015-05-23 03:05:43 +08:00
    no

    检查权限 nginx / php-fpm 是什么用户
    stanhou
        5
    stanhou  
       2015-05-23 12:58:53 +08:00
    你访问哪个文件出现这提示?“其他文件都可以访问”又是什么意思……
    bjdchwr
        6
    bjdchwr  
       2015-05-23 15:03:44 +08:00
    @leecade 同意

    我之前就是,404搞了半天最后是目录权限问题,有些目录创建时是sudo的root权限,www用户权限不足
    imsuwj
        7
    imsuwj  
    OP
       2015-05-23 17:08:37 +08:00
    @bjdchwr
    @leecade
    php-fpm和nginx的用户都是http,用户组为http
    我把root路径设为/usr/share/nginx/html的话就没有问题了,/usr/share/nginx/html的所有者为root
    但是我想设置root目录到/home/xxx/www 这里,就会403 Forbidden,www文件夹的权限应该设为什么呢?是保持桌面用户还是设成http用户所有?我试过chown -R http:http www,也还是403错误
    bjdchwr
        8
    bjdchwr  
       2015-05-23 18:23:39 +08:00
    @imsuwj 我的命令是这样的

    chown -R www-data:www-data /root <----我用HTTP当文件传输工具用,所以简单暴力的直接定义到root目录下然后施加IP限制

    貌似UID在我这里是33.。。
    ctexlive
        9
    ctexlive  
       2015-06-01 20:16:53 +08:00
    你贴出来的是全部配置吗?
    “我把root路径设为/usr/share/nginx/html的话就没有问题了”-》从这句话描述,怀疑你的配置文件没贴全,有个默认配置在里面。比如 php那段,有个“root html”。他有默认的路径,可能就是/usr/share/nginx/...
    所以如果全局root到别的目录下, 在php段要注释掉这句话,或者手动添加
    ocation ~ \.php$ {
    root /home/user/www;
    fastcgi_index index.php;
    fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }

    还有,你的php-fpm.d/www.conf必须设置正确的
    -----------------------
    user = nginx
    group = nginx
    listen.owner = nginx #关键和Nginx的运行uid一致
    listen.group = nginx #关键和Nginx的运行gid一致
    listen.mode = 0660 #关键必须赋予读写权限。实在不行,可以赋予777权限测试
    ------------------------
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2991 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:02 · PVG 21:02 · LAX 05:02 · JFK 08:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.