Lighttpd对PHP文件的403禁止访问

20

我刚在我的专用服务器上安装了lighttpd,启用了mod_fastcgi,所以我追加了以下行到lighttpd.conf文件中:

fastcgi.server = ( ".php" =>
( "localhost" =>
                     (
                        "socket" => "/tmp/php-fastcgi.socket",
                        "bin-path" => "/usr/local/bin/php-cgi"
                      )
                   )
)
但这并没有帮助,因为当我尝试在我的Web浏览器中输入一个PHP文件时,我会收到“403 - 禁止访问”的消息……当我从Web根目录中删除index.php文件,并将index.html放在那里时,一切都正常,没有错误,无论index.php文件有100行还是只有一行-<?php echo 'test'; ?>它总是显示一个403 - 禁止访问的错误,现在我已经没有想法了。
为什么会发生这种情况?
我的Web根目录的ls -la
#
total 6

    drwxr-xr-x  15 root  wheel   1536 Jul 18 10:23 .
    drwxr-xr-x   4 root  wheel    512 Jul 18 08:45 ..
    drwxr-xr-x   2 www   www      512 Jul  1 02:36 cache
    drwxr-xr-x   2 www   www      512 Jul  1 02:36 config
    drwxr-xr-x   6 www   www      512 Jul  1 02:36 inc
-rw-r--r--   1 www   www        9 Jul 18 11:02 index.php

你能展示一下网站根目录的 ls -la 吗?很可能是权限设置有误。 - Martin
我的问题已经进行了编辑。 - Scott
php-cgi 正在以哪个用户身份运行?另外,您的日志中是否有任何错误? - Martin
这个链接是否有帮助?它解决了许多用户在使用php和lighty时遇到的403错误。 - j0k
我遇到了同样的问题。尝试了这篇文章中的所有方法,但最终在另一个论坛上找到了解决方案,现在分享给大家:`service lighttpd stop;ps -e | grep "lighttpd"`如果你得到了结果,那么你很可能已经有了一个完美工作的配置,但是lighttpd仍然在运行php安装之前的配置。只需对该进程运行kill命令,然后再次运行service lighttpd start即可!请注意,这会停止lighttpd,请记住如果这不是问题的原因,请重新启动它。 - Brian Hannay
6个回答

14

您的php配置不正确。请检查您的lighttpd错误日志,其中会有类似以下的信息:

(mod_fastcgi.c.1397) [ERROR]: spawning fcgi failed. 

我使用:

fastcgi.server = ( ".php" => ((                                      
                     "bin-path" => "/bin/php-cgi",             
                     "socket" => "/tmp/php.socket",              
                     "max-procs" => 1,                                     
                     "bin-environment" => (                         
                       "PHP_FCGI_CHILDREN" => "16",                    
                       "PHP_FCGI_MAX_REQUESTS" => "10000"           
                     ),         
                     "broken-scriptfilename" => "enable"
                 )))   

请确保在modules.conf中启用了FastCGI模块。

server.modules = (
  "mod_access",
  "mod_fastcgi",
#  "mod_alias",
#  "mod_auth",
#  "mod_evasive",
#  "mod_redirect",
#  "mod_rewrite",
#  "mod_setenv",
#  "mod_usertrack",
)

11

同样的问题,Mint的解决方法是安装php5-cgi包。
sudo apt-get install php5-cgi
启用fastcgi模块
sudo lighttpd-enable-mod fastcgi fastcgi-php
最后重新加载
sudo service lighttpd force-reload


这是唯一与我一起工作的代码,我正在使用php5-cgi。 - Salem
1
现代发行版应该使用“sudo apt-get install php7.0-cgi”。 - Nimjox
sudo apt-get install php5.6-cgi - HM Tanbir
由于目前不支持 php5-cgi - HM Tanbir

6

我曾经遇到了同样的问题。修复方法非常简单,只需要将配置文件移动到启用位置即可。我的操作步骤如下:

$ ln -s /etc/lighttpd/conf-available/10-fastcgi.conf /etc/lighttpd/conf-enabled/
$ ln -s /etc/lighttpd/conf-available/15-fastcgi-php.conf /etc/lighttpd/conf-enabled/

并重新加载...

$ service lighttpd force-reload

2
这不是正确的做法。你可能没有运行lighty-enable-mod命令。 - Robert Baker

4

1
你需要配置你的lighttpd:

只需:

sudo lighty-enable-mod fastcgi; sudo lighty-enable-mod fastcgi-php; sudo service lighttpd force-reload

重复答案。与@Geom16先前提供的答案类似,只需添加一个额外的指令。请考虑将附加指令作为评论添加到原始答案中。 - Missaka Iddamalgoda
这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - ahuemmer

1

虽然不太可能,但应该注意 "403 Forbidden" 响应的另一个可能原因。

检查配置文件(lighttpd.conf)中是否有任何访问模块(mod_access)语句。

示例:

      url.access-deny = ( "", ".php");

文档:模块 mod_access


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接