Nginx 不将 uri 传递给 php5-fpm,而是作为文本文件

Nginx 不将 uri 传递给 php5-fpm,而是作为文本文件

如上所述,uri 未传递给 nginx。我已包含整个“try”块来显示这一点。

location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    set $page_to_view "/index.php";
    try_files $uri $uri.php $uri/;
    # Uncomment to enable naxsi on this location
    # include /etc/nginx/naxsi.rules
}

所以它本质上是在说“哦,嘿,我们做了$uri.php并且该文件存在,让我们将它作为服务器而不是实际将它发送到php。”

我的 fpm 部分如下。

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

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
#   # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

#   # With php5-cgi alone:
#   fastcgi_pass 127.0.0.1:9000;
#   # With php5-fpm:
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
}

基本都是原厂的。所以我不明白为什么 nginx 不再这样做了。我知道它在 debian 下与 fastcgi 一起工作,但现在不行了,而且由于硬盘崩溃,我丢失了旧的配置文件,这是我在将驱动器送回之前没有备份的一个文件,因为我认为重写它是完全没问题的。

答案1

您没有说要加载什么 URI,但我假设它不是以 结尾.php

你的问题在于,你没有try_files按照名称所暗示的那样从字面上理解这个指令。它专门用于尝试文件。文档中说try_files file ... uri;,只有最后一个参数才会被视为回退,从而导致内部重写。最后一个参数之前的任何参数都会被测试为静态文件,如果找到,则会作为静态文件提供。

这意味着你可以做try_files $uri $uri/ $uri.php;但你不能做try_files $uri $uri.php $uri/

答案2

尝试更换

location ~ \.php$ {

location ~ \.php {

并且 $document_root 是放置 php 文件的实际目录

例如

fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;

相关内容