Apache 2.4.6 на сервере Ubuntu: клиент, отказавшийся от конфигурации сервера (PHP FPM)

Сегодня меня обновил сервер 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 часа отрыва моих волос позже …