nginx + php-fpm =未找到文件

时间:2014-06-13 14:47:33

标签: php nginx

当我尝试访问info.php时,出现File not found.错误。

我尝试了一些教程无济于事。

CONFIGS: 默认值:

server {
    listen         80;
    listen   [::]:80 default ipv6only=on; 
    server_name  localhost;

    location / {
        root   /var/www;
        index  index.html index.htm index.php;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:7777;
        fastcgi_index  index.php;
        fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
        fastcgi_buffers 256 128k;
        #fastcgi_buffer_size 16k;
        #fastcgi_busy_buffers_size 256k;
        fastcgi_connect_timeout 300s;
        fastcgi_send_timeout 300s;
        fastcgi_read_timeout 300s;
        include fastcgi_params;
    }
}

问题是什么?

8 个答案:

答案 0 :(得分:16)

如果那个info.php在/ var / www中,那么指示fast_cgi查找

是错误的
/usr/share/nginx/html/info.php;

对html和php使用相同的根目录。此外,rootindex参数应位于特定位置之外,但非常特殊的用途。

server {
   listen         80;
   listen   [::]:80 default ipv6only=on; 
   server_name  localhost;
   root   /var/www;
   index  index.html index.htm index.php;


   #pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

   location ~ \.php$ {
       fastcgi_pass 127.0.0.1:7777;
       fastcgi_index  index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       fastcgi_buffers 256 128k;
       fastcgi_connect_timeout 300s;
       fastcgi_send_timeout 300s;
       fastcgi_read_timeout 300s;
       include fastcgi_params;
    }
}

不用说,你仍然需要确保你的php-fpm服务正在端口7777上侦听。常见的情况是让它在9000端口监听。

答案 1 :(得分:10)

如果您检查了所有内容并且配置正确,那么我得到了最后一点:

  • 检查文件/etc/php-fpm.d/www.conf
  • 中提到的用户名是否正确

答案 2 :(得分:1)

server {
listen         80;
listen   [::]:80 default ipv6only=on; 
server_name  localhost;
root   /var/www;
location / {
    index index.php;
}
location ~ \.php(?:$|/) {
   fastcgi_pass 127.0.0.1:7777;
   fastcgi_index  index.php;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_buffers 256 128k;
   fastcgi_connect_timeout 300s;
   fastcgi_send_timeout 300s;
   fastcgi_read_timeout 300s;
   include fastcgi_params;
}

}

答案 3 :(得分:1)

Nginx&符号链接

注意,如果query是符号链接,请将其更改为c.getString(0),否则nginx将不会超过符号链接,您将收到public String getLyrics(long id) { String rv = "no lyrics found"; String whereclause = "id=?"; String[] whereargs = new String[]{String.valueOf(id)}; String[] columns = new String[]{"Lyrics"}; Cursor c = this.getWritableDatabase().query("Songs",columns,whereclause,weherargs,null,null,null); if (c.moveToFirst()) { rv = c.getString(c.getColumnIndex("Lyrics")); } c.close(); return rv; } 错误

答案 4 :(得分:0)

我仔细看了一下,最后发现FPM没有运行:-s在我的情况下,一个简单的服务php7.2-fpm重启就行了!

答案 5 :(得分:0)

我遇到了这个问题,这里没有答案。对我来说,这个问题最终是由SELinux引起的。我disabled SELinux并解决了问题。

请注意,禁用SELinux确实会对安全性产生影响。几乎肯定有解决此问题的更好方法,但是禁用SELinux可以达到我的目的。

答案 6 :(得分:0)

我在尝试解决类似问题时遇到了这个问题。因此,我将添加当我找到它时发现的解决方案。这是在Arch上的,但是与systemd相关。

此解决方案适用于我的开发机器,出于充分的原因,您不应从/ home文件夹中运行公共站点。

我将php-fpm和nginx配置为以我的用户身份运行。编辑以下文件,然后删除ProtectHome = true行

sudo vi /etc/systemd/system/multi-user.target.wants/php-fpm.service

重新加载,然后重新启动所有内容;

systemctl daemon-reload
systemctl restart nginx.service
systemctl restart php-fpm.service

答案 7 :(得分:0)

location nginx部分中,如果使用root,则$document_root$fastcgi_script_name的值正确。但是,如果您使用alias,则该值是错误的。使用alias时,您需要使用$request_filename而不是$document_root$fastcgi_script_name

location /myapp {
    alias /home/site/www/myapp;
    location ~* "\.php$" {
        fastcgi_pass   php_fpm_server:9000;
        fastcgi_index  index.php;

        # Works in all cases.
        fastcgi_param  SCRIPT_FILENAME $request_filename;

        ## Not work for 'alias' directive, only for 'root' directive.
        # fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

以上变量的文档:

$request_filename

基于根或别名指令以及请求URI的当前请求的

文件路径

$document_root

当前请求的根或别名指令的值

$fastcgi_script_name

请求URI,或者,如果URI以斜杠结尾,则请求URI,其索引文件名由fastcgi_index伪指令配置。此变量可用于设置SCRIPT_FILENAME和PATH_TRANSLATED参数,这些参数确定PHP中的脚本名称。例如,对于带有以下指令的“ / info /”请求

了解更多