今天我更新了Ubuntu server 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.
我该怎么办呢?
答案 0 :(得分:113)
我有完全相同的问题。我在本地计算机上运行了几个虚拟主机进行开发。
首先,我改变了/etc/apache2/conf-available/php5-fpm.conf
。我替换了每个
Order Deny,Allow
Deny from all
到
Require all granted
必须由a2enconf php5-fpm
启用配置。我对我的虚拟主机配置做了同样的事情并进行了替换。
我认为出于安全原因不建议这样做,但只要我将服务器用于本地目的,我就可以忍受它。
答案 1 :(得分:39)
我在新安装的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>
答案 2 :(得分:22)
我今天遇到了类似的问题(但mod_wsgi
)。它可能是Apache 2.2到2.4的问题。可以找到完整的更改列表here。
对我来说,它有助于为错误日志抱怨的每个路径添加额外的<Directory>
条目,并使用Require all granted
填充该部分。
所以在你的情况下你可以尝试
<Directory /usr/lib/cgi-bin/php5-fcgi>
Require all granted
Options FollowSymLinks
</Directory>
我必须将配置文件从文件夹conf.d
移到文件夹sites-enabled
。
总而言之,这对我有用,但我不保证它也适用于你的情况。
答案 3 :(得分: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>
答案 4 :(得分:9)
在apache2.conf
中,替换或删除&lt;目录/&gt; AllowOverride无需要全部拒绝&lt; / Directory&gt;,就像建议的Jan Czarny一样。
例如:
<Directory />
Options FollowSymLinks
AllowOverride None
#Require all denied
Require all granted
</Directory>
这在Ubuntu 14.04(Trusty Tahr)中有效。
答案 5 :(得分: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
答案 6 :(得分:3)
我不认为在此指令中将“要求所有被拒绝”替换为“需要所有被授予”:
<Directory>
Options FollowSymLinks
AllowOverride None
#Require all denied
Require all granted
</Directory>
由Jan Czarny建议并由user3801675分析是解决此问题的最安全方式。
根据Apache配置文件,该行拒绝访问整个服务器的文件系统。更换它可能确实允许访问您的虚拟主机文件夹,但代价是允许访问您的整个计算机!
Gev Balyan的方法似乎是最安全的方法。这是在今天早上设置我的新Apache服务器后困扰我的“访问被拒绝的问题”的答案。
答案 7 :(得分:1)
我只是得到了这个错误,因为我使用了一个完全不同的DocumentRoot目录。
我的主要DocumentRoot是默认的/var/www/html
在VirtualHost上,我使用了/sites/example.com
我在/var/www/html/example.com
(/sites/example.com
)上创建了一个链接。
DocumentRoot设置为/var/www/html/example.com
它就像一个魅力。
答案 8 :(得分:0)
升级系统后,我遇到了同样的问题。
就我而言,问题是由加载配置文件的顺序引起的。
最初在/etc/httpd/httpd.conf
中定义如下:
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
经过数小时的尝试,我尝试了以下命令:
IncludeOptional sites-enabled/*.conf
IncludeOptional conf.d/*.conf
现在工作正常。
答案 9 :(得分: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>
答案 10 :(得分:-3)
对于那些在AWS(亚马逊网络服务)上的人,请记住将SSL端口规则(在我的情况下为443)添加到您的安全组。我收到此错误是因为我忘了打开端口。
3小时后我的头发被撕掉了......