Apache 2.4.6 на сервере Ubuntu: клиент запрещен конфигурацией сервера (PHP FPM) [При загрузке файла PHP]



сегодня я был обновлен Ubuntu server 13.04 (Raring Ringtail) → 13.10 (Дерзкая Саламандра).



и моя установка Apache 2 нарушена.



вот моя конфигурация:



File 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


File 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>


File 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.


что я должен исправить?

574   9  

9 ответов:

у меня точно такая же проблема. Я запустил несколько виртуальных хостов на своей локальной машине для разработки.

во-первых, я изменил /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> - запись для каждого пути, на который жаловался журнал ошибок, и заполнение раздела 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>

To:

<VirtualHost *:80>
  ServerName local.example.com

  DocumentRoot /home/example/public

  <Directory />
    Options All
    AllowOverride All
    Require all granted
  </Directory>
</VirtualHost>

на apache2.conf, заменить или удалить AllowOverride нет требуют все отказано , как предложил Ян Чарни.

например:

<Directory />
    Options FollowSymLinks
    AllowOverride None
    #Require all denied
    Require all granted
</Directory>

он работал в Ubuntu 14.04 (Надежный Тар).

ваше имя файла 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 [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

Я не думаю, что замена "Require all denied" на "Require all granted"в этой директиве:

<Directory>

    Options FollowSymLinks
    AllowOverride None
    #Require all denied
    Require all granted
</Directory>

как предложил Ян Чарни и seonded user3801675 является наиболее безопасным способом решения этой проблемы.

согласно конфигурационным файлам Apache, эта строка запрещает доступ ко всей файловой системе вашего сервера. Замена его действительно может разрешить доступ к папкам виртуального хоста, но по цене предоставления доступа ко всему компьютеру в качестве хорошо!

подход Гева Баляна, похоже, является самым безопасным подходом здесь. Это был ответ на "проблемы с отказом в доступе", преследующие меня после настройки моего нового сервера Apache сегодня утром.

и я просто получил эту ошибку, потому что я использовал совершенно другой каталог DocumentRoot.

мой основной DocumentRoot был по умолчанию /var/www/html а на виртуальном хосте я использовал /sites/example.com

Я создал ссылку на /var/www/html/example.com (to /sites/example.com). DocumentRoot был установлен в /var/www/html/example.com

Он работал как шарм.

для тех из вас, кто работает на AWS (Amazon Web Services), не забудьте добавить правило для вашего порта SSL (в моем случае 443) в свои группы безопасности. Я получал эту ошибку, потому что забыл открыть порт.

3 часа рвать на себе волосы позже...

Comments

    Ничего не найдено.