nginx 和 $document_root 上的斜杠?

Posted

技术标签:

【中文标题】nginx 和 $document_root 上的斜杠?【英文标题】:nginx and trailing slashes on $document_root? 【发布时间】:2011-01-30 17:12:59 【问题描述】:

我对nginx使用如下配置:http://gist.github.com/340956

但是,此配置会导致 php 出现No input file specified 错误。我能够解决它的唯一方法是改变这一行:

fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;

注意$document_root$fastcgi_script_name 之间的“/”。我被告知这是错误的配置,但没有人能够确切地告诉我为什么我的配置需要这个额外的斜线。

我怎样才能去掉那个多余的斜线?

【问题讨论】:

【参考方案1】:

刚刚遇到同样的问题(在RHEL6服务器上remi安装nginx+php-fpm),你可以通过在/etc/nginx/fastcgi_params中添加以下行来解决它

fastcgi_param  SCRIPT_FILENAME    $request_filename;

我发现这行在 RHEL 中缺失,而在完美运行的 Debian nginx 中。

【讨论】:

【参考方案2】:

参数PATH_TRANSLATED 是否获得正确的URI?我认为这是 conf 文件中不计算的变量的直接连接。在它们之间添加斜线时,它们可能被正确解释。

当您收到错误 No input file specified 时,请检查您的日志以查看请求的 URI。

【讨论】:

当我收到No input file specified 错误时应该检查什么日志? nginx 日志不显示任何内容,因为错误是由 PHP 触发的。 我的$_SERVER 转储中没有PATH_TRANSLATED nginx 记录的唯一内容是在访问日志中,它只会对任何使用重写的 URL 显示“404”。 这里的想法是找出请求的URI【参考方案3】:

删除第 3 行中的 try_files $uri index.php$uri;

【讨论】:

然后我的重写中断了,因为我有像 /foo/bar 这样的 URL 重定向到 index.php/foo/bar【参考方案4】:

偏好问题。只要你保持一致,任何一种方式都可以。

在配置文件中添加斜线,并确保文档根目录和脚本名称的末尾和开头没有额外的斜线,反之亦然。

【讨论】:

我不买。我是否在 $root 中添加斜杠似乎没有什么区别。【参考方案5】:

当您像这样显式添加根指令时会发生什么:

location ~ \.php$ 
    # fastcgi_split_path_info ^(.+\.php)(.*)$;
    include fastcgi.conf;

    root /var/www/my_webroot;

    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;

【讨论】:

我的$rootserver ... 中定义是不是不够好?

以上是关于nginx 和 $document_root 上的斜杠?的主要内容,如果未能解决你的问题,请参考以下文章

nginx和php的两种通信方式

自定义nginx访问日志和内置变量使用

nginx配置php

nginx php 配置

nginx php-fpm

详解nginx模块使用方法