页面显示正确,但Nginx日志显示“找不到文件”

时间:2012-08-08 02:42:49

标签: php codeigniter url-rewriting nginx webserver

我正在使用Nginx和Codeigniter以及php5-fpm。一切“似乎”工作得很好,页面显示,一切看起来都很棒。 Ofcource这不是我在这里提出这个问题的原因,我实际上有一个问题。

我面临的问题是,页面会抛出404错误,即使页面呈现正确,我仍然会获得404(在日志中)。

我得到404的原因(在查看Nginx的错误日志之后)是因为Nginx无法打开我正在请求的文件,因为Nginx尝试直接打开PHP文件,而不是引用{ {1}}不幸的是Codeigniter以这种方式工作。

例如:
请求controller/method在Nginx日志中生成404,其背后的原因是http://website.com/<controller>/<function>/<other_params>无法打开指定的目录,因为它不存在,而不是引用open()。 / p>

一些重要的日志:
Nginx错误日志:

controller/method

正如我之前所说,Nginx正试图直接访问该文件,而不是让Codeigniter处理它。

我的[error] 4172#0: *482 open() "/var/www/<domain>/public/site/section/main" failed (2: No such file or directory), client: <client_ip>, server: <domain>, request: "GET /site/section/main HTTP/1.1", host: "<domain>" 配置:

sites-enabled/ci

那么,Nginx和Codeigniter之间误解的原因是什么? 提前致谢。

1 个答案:

答案 0 :(得分:2)

似乎你的配置中没有规则告诉nginx在找不到文件时尝试向php发送请求。有try_files@codeigniter的评论区几乎看起来像。理论上这就是你想要的nginx:

  1. 检查网址是否存在,是否存在。
  2. 将其他所有内容发送给codeigniter并让它整理出来。
  3. 为此,这两个块应该足够了:

    location / {
        # Check if a file exists, or route it to index.php.
        try_files $uri $uri/ /index.php;
    }
    
    location ~ \.php$ {     
       # for security, see http://forum.nginx.org/read.php?2,88845,page=3
       try_files $uri =404;
       fastcgi_split_path_info ^(.+\.php)(.*)$;
    
       fastcgi_pass 127.0.0.1:9000;
       fastcgi_index index.php;
       include fastcgi_params;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    

    另一个if防护区块不应该破坏这些区域。