Ubuntu Server上的Apache 2.4.6:服务器配置(PHP FPM)拒绝了客户端[加载PHP文件时]


68

今天,我更新了Ubuntu服务器13.04(Raring Ringtail)→ 13.10(Saucy Salamander)。

而且我的Apache 2安装已损坏。

这是我的配置:

文件 error.log

[Fri Oct 18 10:48:07.237170 2013] [:notice] [pid 8292:tid 139804677900160] FastCGI: process manager initialized (pid 8292)
[Fri Oct 18 10:48:07.241185 2013] [mpm_event:notice] [pid 8289:tid 139804677900160] AH00489: Apache/2.4.6 (Ubuntu) mod_fastcgi/mod_fastcgi-SNAP-0910052141 configured -- resuming normal operations
[Fri Oct 18 10:48:07.241652 2013] [core:notice] [pid 8289:tid 139804677900160] AH00094: Command line: '/usr/sbin/apache2'
[Fri Oct 18 10:48:28.313923 2013] [authz_core:error] [pid 8294:tid 139804573181696]   [client 81.219.59.75:3536] AH01630: client denied by server configuration: /usr/lib/cgi-bin/php5-fcgi

文件 default.conf

#EU
<VirtualHost *:80>
    #ServerName
    DocumentRoot /var/www/dev_stable

    DirectoryIndex index.php index.html index.htm

    <Directory /var/www/dev_stable>
          Options Indexes FollowSymLinks MultiViews

          AllowOverride all
          Require all granted
    </Directory>
</VirtualHost>

文件 mods-enabled/fastcgi.conf

#<IfModule mod_fastcgi.c>
#  AddHandler fastcgi-script .fcgi
# FastCgiWrapper /usr/lib/apache2/suexec
#  FastCgiIpcDir /var/lib/apache2/fastcgi
#</IfModule>


<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
</Ifmodule>

当我尝试通过浏览器加载文件时,得到了:

site_name/TEST/

Forbidden

You don't have permission to access /php5-fcgi/TEST/index.php on this server.

我该怎么解决?


也许您错过了Allow from allstackoverflow.com/questions/10351167/...
Qben

4
httpd.apache.org/docs/2.4/upgrading.html#run-time - #阿帕奇2.4的变化Allow from allOrderRequire
扬Czarny

另外,最好查看映射site_name/TEST/到的配置/php5-fcgi/TEST
Qben13年

Answers:


115

我有完全一样的问题。我在本地计算机上运行了几个虚拟主机以进行开发。

首先,我改变了/etc/apache2/conf-available/php5-fpm.conf。我更换了每个

Order Deny,Allow
Deny from all

Require all granted

必须通过启用配置a2enconf php5-fpm。我对虚拟主机配置进行了相同的操作,并进行了替换。

我认为出于安全原因不建议这样做,但是只要我将服务器用于本地目的,就可以使用它。


22
在apache2.conf中->替换或删除<Directory /> AllowOverride none Require all denied </Directory>
Jan Czarny 2013年

40

我在安装新的Apache 2.4时遇到了这个确切的问题。经过数小时的搜寻和测试,我终于发现我还必须允许访问包含Alias指令的目标(不存在)的目录。也就是说,这对我有用:

# File: /etc/apache2/conf-available/php5-fpm.conf
<IfModule mod_fastcgi.c>
    AddHandler php5-fcgi .php
    Action php5-fcgi /php5-fcgi
    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization

    # NOTE: using '/usr/lib/cgi-bin/php5-cgi' here does not work,
    #   it doesn't exist in the filesystem!
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</Ifmodule>

值得一提的是,我将我的整个php5-fpm.conf切换到了上面的一个,以使我的php5-fpm.conf正常工作,而不仅仅是添加了目录部分。
Fabor 2014年

1
<Directory>为cgi-bin添加标签解决了我的问题!
Geremia'3

谢谢@whyscream,这解决了我的问题。实际上,此目录授予是在serve-cgi-bin.conf中定义的,但是仅在启用cgi.load时才加载!我将通过添加serve-cgi-bin.conf中的定义来改进解决方案:`<目录/ usr / lib / cgi-bin> AllowOverride None选项+ ExecCGI -MultiViews + SymLinksIfOwnerMatch要求所有已授予</ Directory>`
清道夫

22

我今天也遇到了类似的问题(但有mod_wsgi)。这可能是Apache 2.2到2.4的问题。完整的更改列表可在此处找到。

对我来说,这有助于为<Directory>错误日志抱怨的每个路径添加一个附加条目,并用填充该部分Require all granted

因此,您可以尝试

<Directory /usr/lib/cgi-bin/php5-fcgi>
    Require all granted
    Options FollowSymLinks
</Directory>

并且我不得不将配置文件从folderconf.d移到folder sites-enabled

总而言之,这对我来说是成功的秘诀,但我不保证它也能适用于您的情况。


3
+1为指向Apache 2.2-> 2.4更改列表的链接。每个要升级的人都应该阅读此书。
Zilk

那会进入什么文件?/etc/apache2/apache2.conf?在一些文件/etc/apache2/mods-enabled/?别的地方?
彼得·莫滕森

20

我最近遇到了同样的问题。我必须从以下位置更改虚拟主机:

<VirtualHost *:80>
  ServerName local.example.com

  DocumentRoot /home/example/public

  <Directory />
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

至:

<VirtualHost *:80>
  ServerName local.example.com

  DocumentRoot /home/example/public

  <Directory />
    Options All
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

漂亮,将一堆域从2.2服务器转移到2.4服务器,并保留vhost.conf文件以节省时间。非常感谢
unc0nnected

非常感谢。这可以帮助我在Windows 10上使用xampp 5.6
kolodi 16-4-28

9

在中apache2.conf,替换或删除<Directory /> AllowOverride无要求全部拒绝</ Directory>,如建议的Jan Czarny。

例如:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    #Require all denied
    Require all granted
</Directory>

这在Ubuntu 14.04(Trusty Tahr)中有效。


正是在升级到Ubunto 14.04之后,我才受到打击...谢谢。
khmarbaise19年

这会影响安全吗?
Skora

7

您的virtualhost文件名应为mysite.com.conf,并应包含此信息

<VirtualHost *:80>
    # The ServerName directive sets the request scheme, hostname and port that
    # the server uses to identify itself. This is used when creating
    # redirection URLs. In the context of virtual hosts, the ServerName
    # specifies what hostname must appear in the request's Host: header to
    # match this virtual host. For the default virtual host (this file) this
    # value is not decisive as it is used as a last resort host regardless.
    # However, you must set it for any further virtual host explicitly.
    ServerName mysite.com
    ServerAlias www.mysite.com

    ServerAdmin info@mysite.com
    DocumentRoot /var/www/mysite

    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
    # error, crit, alert, emerg.
    # It is also possible to configure the loglevel for particular
    # modules, e.g.
    #LogLevel info ssl:warn

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

<Directory "/var/www/mysite">
Options All
AllowOverride All
Require all granted
</Directory>


    # For most configuration files from conf-available/, which are
    # enabled or disabled at a global level, it is possible to
    # include a line for only one particular virtual host. For example the
    # following line enables the CGI configuration for this host only
    # after it has been globally disabled with "a2disconf".
    #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

3

我不认为在此伪指令中将“需要全部拒绝”替换为“需要全部授予”:

<Directory>

    Options FollowSymLinks
    AllowOverride None
    #Require all denied
    Require all granted
</Directory>

由Jan Czarny建议并由user3801675取代是解决此问题的最安全方法。

根据Apache配置文件,该行拒绝访问服务器的整个文件系统。替换它可能确实允许访问您的虚拟主机文件夹,但代价是也允许访问您的整个计算机!

Gev Balyan的方法似乎是这里最安全的方法。这是今天早晨设置新Apache服务器后困扰我的“访问被拒绝问题”的答案。


1
这不是答案,而是评论。
DrCord

1

我只是得到了这个错误,因为我使用了完全不同的DocumentRoot目录。

我的主DocumentRoot是默认的, /var/www/html 并且在我使用的VirtualHost上/sites/example.com

我创建了一个链接/var/www/html/example.com (到/sites/example.com)。DocumentRoot设置为/var/www/html/example.com

它像魅力一样运作。


0

升级系统后,我遇到了同样的问题。就我而言,问题是由加载配置文件的顺序引起的。在/etc/httpd/httpd.confinitally它被定义如下:

IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf

经过几个小时的尝试,我尝试了以下命令:

IncludeOptional sites-enabled/*.conf
IncludeOptional conf.d/*.conf

现在,它可以正常工作。


0

我在httpd.conf中进行了以下配置,该配置拒绝从wordpress执行wpadmin / setup-config.php文件。除去| -config部分可以解决此问题。我认为这个httpd.conf来自plesk,但是我不知道它可能是wordpress的一些默认建议配置。无论如何,我可以在安装完成后安全地将其添加回去。

<LocationMatch "(?i:(?:wp-config\\.bak|\\.wp-config\\.php\\.swp|(?:readme|license|changelog|-config|-sample)\\.(?:php|md|txt|htm|html)))">
                        Require all denied
                </LocationMatch>

-3

对于在AWS(Amazon Web Services)上的那些人,请记住将SSL端口(在我的情况下为443)规则添加到安全组。我收到此错误是因为我忘记打开端口。

3个小时后把头发拔掉...


此答案与此错误消息完全无关。
Berend de Boer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.