Heute wurde ich aktualisiert buntu Server 13.04 (Raring Ringtail) → 13.1 (Saucy Salamander).
Und meine Apache 2-Installation ist kaputt.
Hier meine Konfiguration:
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>
Wenn ich versuche, die Datei über den Browser zu laden, erhalte ich:
site_name/TEST/
Forbidden
You don't have permission to access /php5-fcgi/TEST/index.php on this server.
Was soll ich tun, um das Problem zu beheben?
Ich habe genau das gleiche Problem. Ich habe ein paar virtuelle Hosts auf meinem lokalen Computer zum Entwickeln ausgeführt.
Zuerst habe ich /etc/Apache2/conf-available/php5-fpm.conf
. Ich habe jeden ersetzt
Order Deny,Allow
Deny from all
zu
Require all granted
Die Konfiguration muss durch a2enconf php5-fpm
. Ich habe dasselbe mit meinen virtuellen Hosts-Konfigurationen gemacht und die Ersetzungen vorgenommen.
Ich denke, dies wird aus Sicherheitsgründen nicht empfohlen, aber solange ich meinen Server nur für lokale Zwecke benutze, kann ich damit leben.
Genau auf dieses Problem bin ich bei einer Neuinstallation von Apache 2.4 gestoßen. Nach ein paar Stunden googeln und testen stellte ich schließlich fest, dass ich auch Zugriff auf das Verzeichnis gewähren musste, das das (nicht vorhandene) Ziel der Alias-Direktive enthält. Das heißt, das hat bei mir funktioniert:
# 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>
Ich bin heute auf ein ähnliches Problem gestoßen (aber mit mod_wsgi
). Möglicherweise handelt es sich um ein Apache 2.2-to-2.4-Problem. Eine umfassende Liste der Änderungen finden Sie hier .
Für mich hat es geholfen, ein zusätzliches <Directory>
- Eintrag für jeden Pfad, über den sich das Fehlerprotokoll beschwert hat und Füllen des Abschnitts mit Require all granted
.
Also in deinem Fall könntest du es versuchen
<Directory /usr/lib/cgi-bin/php5-fcgi>
Require all granted
Options FollowSymLinks
</Directory>
und ich musste meine Konfigurationsdatei aus dem Ordner conf.d
zum Ordner sites-enabled
.
Alles in allem hat das den Trick für mich getan, aber ich garantiere nicht, dass es auch in Ihrem Fall funktioniert.
Ich bin vor kurzem auf dasselbe Problem gestoßen. Ich musste meine virtuellen Hosts wechseln von:
<VirtualHost *:80>
ServerName local.example.com
DocumentRoot /home/example/public
<Directory />
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Zu:
<VirtualHost *:80>
ServerName local.example.com
DocumentRoot /home/example/public
<Directory />
Options All
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Im Apache2.conf
, ersetze oder lösche <Directory /> AllowOverride None Erfordert alle verweigerten </ Directory>, wie von Jan Czarny vorgeschlagen.
Beispielsweise:
<Directory />
Options FollowSymLinks
AllowOverride None
#Require all denied
Require all granted
</Directory>
Dies funktionierte in buntu 14.04 (Trusty Tahr).
Ihr virtualhost-Dateiname sollte mysite.com.conf sein und diese Informationen enthalten
<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 [email protected]
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
Ich glaube nicht, dass das Ersetzen von "Require all denied" durch "Require all grant" in dieser Direktive:
<Directory>
Options FollowSymLinks
AllowOverride None
#Require all denied
Require all granted
</Directory>
wie von Jan Czarny vorgeschlagen und vom Benutzer 3801675 getrennt, ist dies die sicherste Methode, um dieses Problem zu lösen.
Gemäß den Apache-Konfigurationsdateien verweigert diese Zeile den Zugriff auf das gesamte Dateisystem Ihres Servers. Wenn Sie es ersetzen, können Sie zwar auf Ihre virtuellen Host-Ordner zugreifen, dies kostet jedoch auch Zugriff auf Ihren gesamten Computer!
Der Ansatz von Gev Balyan scheint hier der sicherste zu sein. Dies war die Antwort auf die "Probleme mit verweigertem Zugriff", die mich plagten, nachdem ich heute Morgen meinen neuen Apache-Server eingerichtet hatte.
Und ich habe einfach diesen Fehler bekommen, weil ich ein völlig anderes DocumentRoot-Verzeichnis verwendet habe.
Mein Haupt-DocumentRoot war der Standard /var/www/html
Und auf dem VirtualHost habe ich /sites/example.com
Verwendet.
Ich habe einen Link zu /var/www/html/example.com
(Zu /sites/example.com
) Erstellt. DocumentRoot wurde auf /var/www/html/example.com
Gesetzt.
Es wirkte wie ein Zauber.
Ich hatte das gleiche Problem nach dem Upgrade meines Systems. In meinem Fall wurde das Problem durch die Reihenfolge des Ladens der Konfigurationsdateien verursacht. Im /etc/httpd/httpd.conf
Wurde es zunächst folgendermaßen definiert:
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
Nach einigen Stunden von Versuchen habe ich die folgende Reihenfolge versucht:
IncludeOptional sites-enabled/*.conf
IncludeOptional conf.d/*.conf
Und es funktioniert jetzt gut.
Ich hatte die folgende Konfiguration in meiner httpd.conf, die das Ausführen der wpadmin/setup-config.php-Datei von WordPress verweigerte. Das Entfernen des Teils | -config löste das Problem. Ich denke, diese httpd.conf ist von plesk, aber es könnte eine vorgeschlagene Standardkonfiguration von WordPress sein, ich weiß es nicht. Wie auch immer, ich könnte es sicher wieder hinzufügen, nachdem das Setup abgeschlossen ist.
<LocationMatch "(?i:(?:wp-config\\.bak|\\.wp-config\\.php\\.swp|(?:readme|license|changelog|-config|-sample)\\.(?:php|md|txt|htm|html)))">
Require all denied
</LocationMatch>