Сегодня меня обновил сервер 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
файлов с 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.
Что я должен исправить?
У меня точно такая же проблема. Я разработал пару виртуальных хостов на моей локальной машине для разработки.
Во-первых, я изменил /etc/apache2/conf-available/php5-fpm.conf
. Я заменил каждый
Order Deny,Allow Deny from all
в
Require all granted
Конфигурация должна быть активирована с помощью a2enconf php5-fpm
. Я сделал то же самое с моими конфигурациями виртуальных хостов и сделал замены.
Я думаю, что это не рекомендуется по соображениям безопасности, но пока я использую свой сервер для локальных целей, я могу жить с ним.
Я столкнулся с этой точной проблемой при новой установке 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>
Сегодня я столкнулся с подобной проблемой (но с mod_wsgi
). Это может быть проблема Apache от 2.2 до 2.4. Полный список изменений можно найти здесь .
Для меня это помогло добавить дополнительный <Directory>
-entry для каждого пути, в котором журнал ошибок жаловался и заполнял раздел « Require all granted
.
Поэтому в вашем случае вы можете попробовать
<Directory /usr/lib/cgi-bin/php5-fcgi> Require all granted Options FollowSymLinks </Directory>
и мне пришлось перенести файл конфигурации из папки conf.d
в папку с sites-enabled
.
В общем, это помогло мне, но я не гарантирую, что это работает и в вашем случае.
Недавно я столкнулся с той же проблемой. Мне пришлось изменить мои виртуальные хосты:
<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>
В apache2.conf
замените или удалите <Directory /> AllowOverride None. Требовать все отклоненные </ Directory>, как предложил Ян Чарны.
Например:
<Directory /> Options FollowSymLinks AllowOverride None #Require all denied Require all granted </Directory>
Это работало в Ubuntu 14.04 (Trusty Tahr).
Ваше имя файла 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, eg #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
Я не думаю, что в этой директиве заменить «Требовать всех отрицаемых» на «Требовать все предоставленные»:
<Directory> Options FollowSymLinks AllowOverride None #Require all denied Require all granted </Directory>
как было предложено Ян Чарны и унаследовано пользователем3801675, является самым надежным способом решения этой проблемы.
Согласно файлам конфигурации Apache, эта строка запрещает доступ ко всей файловой системе вашего сервера. Замена его может действительно позволить доступ к вашим папкам виртуального хоста, но по цене, позволяющей получить доступ ко всему компьютеру!
Подход Гева Баляна, кажется, самый безопасный подход здесь. Это был ответ на вопрос о «доступе к отказам», который преследовал меня после настройки моего нового сервера Apache сегодня утром.
И я просто получил эту ошибку, потому что я использовал совершенно другой каталог DocumentRoot.
Мой основной DocumentRoot был по умолчанию /var/www/html
а на VirtualHost я использовал /sites/example.com
Я создал ссылку на /var/www/html/example.com
(на /sites/example.com
). DocumentRoot был установлен в /var/www/html/example.com
Оно работало завораживающе.
Для тех из вас, кто находится на AWS (Amazon Web Services), не забудьте добавить правило для своего SSL-порта (в моем случае 443) к вашим группам безопасности. Я получил эту ошибку, потому что забыл открыть порт.
3 часа отрыва моих волос позже …