web-dev-qa-db-ja.com

Ubuntu Server上のApache 2.4.6:サーバー構成によりクライアントが拒否されました(PHP FPM)[PHPファイルのロード中]

今日は更新されました buntuサーバー13.04 (鳴き声のリングテール)→ 13.1 (生意気なサンショウウオ)。

そして、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.

何を修正すればよいですか?

68
Jan Czarny

私はまったく同じ問題を抱えています。開発用にローカルマシンで仮想ホストをいくつか実行しました。

まず、/etc/Apache2/conf-available/php5-fpm.confを変更しました。毎回交換しました

Order Deny,Allow
Deny from all

Require all granted

この構成は、a2enconf php5-fpmで有効にする必要があります。仮想ホスト構成でも同じことを行い、置き換えを行いました。

セキュリティ上の理由からこれはお勧めできないと思いますが、ローカルの目的でのみサーバーを使用している限り、それと共存できます。

113
user1259341

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>
39
whyscream

今日、同様の問題に遭遇しました(ただし、mod_wsgiを使用)。 Apache 2.2から2.4の問題である可能性があります。変更の包括的なリストは here にあります。

私にとって、それはエラーログが不平を言っていたすべてのパスに追加の<Directory>- entryを追加し、セクションをRequire all grantedで埋めることに役立ちました。

あなたの場合、あなたは試すことができます

<Directory /usr/lib/cgi-bin/php5-fcgi>
    Require all granted
    Options FollowSymLinks
</Directory>

構成ファイルをフォルダーconf.dからフォルダーsites-enabledに移動する必要がありました。

全体として、それは私のためのトリックをしましたが、あなたの場合にもそれが機能することを保証しません。

22
OBu

私は最近、同じ問題に遭遇しました。仮想ホストを次から変更する必要がありました。

<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>
20
Luke

Apache2.confで、推奨されるJan Czarnyのように、<Directory /> AllowOverrideなしをすべて置換または削除します。すべての拒否された</ Directory>を要求します。

例えば:

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

これは buntu 14.04 (Trusty Tahr)で機能しました。

9
user3801675

仮想ホストのファイル名は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
7
Gev Balyan

このディレクティブの「すべて拒否」を「すべて許可」に置き換えるとは思わない:

<Directory>

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

jan Czarnyによって提案され、user3801675によってseondedされたこの問題を解決する最も安全な方法です。

Apache構成ファイルによると、その行はサーバーのファイルシステム全体へのアクセスを拒否します。置き換えると、実際には仮想ホストフォルダーへのアクセスが許可される場合がありますが、コンピューター全体へのアクセスも許可されます。

Gev Balyanのアプローチは、ここで最も安全なアプローチのようです。これは、今朝新しいApacheサーバーをセットアップした後に私を悩ませた「アクセス拒否問題」への答えでした。

3
whatshisname

そして、まったく異なるDocumentRootディレクトリを使用したため、このエラーが発生しました。

私のメインのDocumentRootはデフォルトの/var/www/htmlで、VirtualHostでは/sites/example.comを使用しました

/var/www/html/example.comに(/sites/example.comへの)リンクを作成しました。 DocumentRootは/var/www/html/example.comに設定されました

それは魅力のように働いた。

1
user5140921

システムをアップグレードした後、同じ問題が発生しました。私の場合、問題は構成ファイルのロード順序が原因でした。 /etc/httpd/httpd.confinitallyで、次のように定義されました。

IncludeOptional conf.d/*.conf
IncludeOptional sites-enabled/*.conf

数時間試行した後、次の順序を試しました。

IncludeOptional sites-enabled/*.conf
IncludeOptional conf.d/*.conf

そして、今はうまく機能しています。

0
CROSP

Httpd.confに次の設定があり、wordpressからwpadmin/setup-config.phpファイルの実行を拒否しました。 | -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>
0
Perrier