Apache 2.4.6 на сервере Ubuntu: клиент, отказавшийся от конфигурации сервера (PHP FPM) [при загрузке файла PHP]
Сегодня я был обновлен 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.
Что мне следует исправить?
Ответы
Ответ 1
У меня точно такая же проблема. Я запускал пару виртуальных хостов на моем локальном компьютере для разработки.
Во-первых, я изменил /etc/apache2/conf-available/php5-fpm.conf
. Я заменил каждый
Order Deny,Allow
Deny from all
к
Require all granted
Конфигурация должна быть включена a2enconf php5-fpm
. Я сделал то же самое с моими конфигурациями виртуальных хостов и сделал замены.
Я думаю, что это не рекомендуется по соображениям безопасности, но пока я использую свой сервер для локальных целей, я могу жить с ним.
Ответ 2
Я столкнулся с этой точной проблемой при новой установке 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>
Ответ 3
Сегодня я столкнулся с подобной проблемой (но с 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
.
В целом, это помогло мне, но я не гарантирую, что оно работает и в вашем случае.
Ответ 4
Недавно я столкнулся с той же проблемой. Мне пришлось изменить мои виртуальные хосты:
<VirtualHost *:80>
ServerName local.example.com
DocumentRoot /home/example/public
<Directory />
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
To:
<VirtualHost *:80>
ServerName local.example.com
DocumentRoot /home/example/public
<Directory />
Options All
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Ответ 5
В apache2.conf
, замените или удалите < Directory/" > AllowOverride None Требуется все denied </Directory> , как предлагалось Jan Czarny.
Например:
<Directory />
Options FollowSymLinks
AllowOverride None
#Require all denied
Require all granted
</Directory>
Это работало в Ubuntu 14.04 (Trusty Tahr).
Ответ 6
Ваше имя виртуального хоста должно быть 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 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
Ответ 7
Я не думаю, что в этой директиве заменить "Требовать всех отрицаемых" на "Требовать все предоставленные":
<Directory>
Options FollowSymLinks
AllowOverride None
#Require all denied
Require all granted
</Directory>
предложенный Яном Чарни и выполненный пользователем3801675, является наиболее безопасным способом решения этой проблемы.
В соответствии с конфигурационными файлами Apache эта строка запрещает доступ ко всей файловой системе вашего сервера. Замена его может действительно позволить доступ к вашим папкам виртуального хоста, но по цене, позволяющей получить доступ ко всему вашему компьютеру!
Подход Гева Баляна, по-видимому, является самым безопасным подходом здесь. Это был ответ на "проблемы, связанные с доступом", преследующие меня после настройки моего нового сервера Apache сегодня утром.
Ответ 8
И я просто получил эту ошибку, потому что я использовал совершенно другой каталог DocumentRoot.
Мой основной DocumentRoot был по умолчанию /var/www/html
и на VirtualHost я использовал /sites/example.com
Я создал ссылку на /var/www/html/example.com
(до /sites/example.com
).
DocumentRoot был установлен в /var/www/html/example.com
Он работал как шарм.
Ответ 9
У меня была такая же проблема после обновления моей системы. В моем случае проблема была вызвана порядком загрузки файлов конфигурации. В /etc/httpd/httpd.conf
изначально это было определено следующим образом:
IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf
После нескольких часов попыток я попробовал следующий порядок:
IncludeOptional sites-enabled/*.conf
IncludeOptional conf.d/*.conf
И теперь работает нормально.
Ответ 10
У меня была следующая конфигурация в моем httpd.conf, которая запрещала выполнение файла wpadmin/setup -config.php из WordPress. Удаление части | -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>
Ответ 11
Для тех из вас, кто находится в AWS (Amazon Web Services), не забудьте добавить правило для своего SSL-порта (в моем случае 443) к вашим группам безопасности. Я получил эту ошибку, потому что забыл открыть порт.
3 часа отрыва моих волос позже...