Apache:クライアントがサーバー構成によって拒否されました


150

私は得ています

[2012年4月24日火曜日12:12:55] [エラー] [クライアント127.0.0.1]クライアントがサーバー構成によって拒否されました:/ labs / Projects / Nebula / bin /

私のディレクトリ構造は次のようになります(私はSymfony 2を使用していますが、他のWebフレームワークでも同様の構造にする必要があります)

ここに画像の説明を入力してください

私は次のようなvhostsセットアップを持っています:

<VirtualHost nebula:80>
    DocumentRoot "/labs/Projects/Nebula/web/"
    ServerName nebula
    ErrorLog "/var/log/httpd/nebula-errors.log"
</VirtualHost>

<Directory "/labs/Projects/Nebula/">
    Options All
    AllowOverride All
    Order allow,deny
    Allow from 127.0.0 192.168.1 ::1 localhost
</Directory>

何が問題なのでしょうか、どうすれば修正できますか?


1
@JiewMeng:おそらくフィルの答えを受け入れるべきです。今日のほとんどの Apacheインストールに問題があるようです(Apache 2.4)。ありがとう。
dotancohen 2015

回答:


396

Apache 2.4.3(または多分少し前)は、このエラーを引き起こすことが多い新しいセキュリティ機能を追加しました。「クライアントはサーバー構成によって拒否されました」という形式のログメッセージも表示されます。この機能では、ディレクトリにアクセスするために承認されたユーザーIDが必要です。これは、Apacheに同梱されているhttpd.confのDEFAULTによってオンになります。ディレクティブで機能の有効化を確認できます

Require all denied

これは基本的に、すべてのユーザーのアクセスを拒否することを意味します。この問題を修正するには、拒否されたディレクティブを削除する(または、はるかに良い)次のディレクティブを、アクセスを許可するディレクトリに追加します。

Require all granted

のように

<Directory "your directory here">
   Order allow,deny
   Allow from all
   # New directive needed in Apache 2.4.3: 
   Require all granted
</Directory>

9
また、追加する必要があるかもしれませんSatisfy AnyRequire all granted
MarkHu

@MarkHu- Satisfy anyこのコンテキストで考えられる必要性を説明できますか?ここで髪を引っ張っていたので、これを追加すると、すべてがうまくいきました。奇妙なことに、最近のApacheがにアップグレードされるまで、アプリは既存のvhostエントリで動作していました2.4.9。奇妙なことに、同じapp / vhostとApache / PHPのバージョンを持つ別のサーバーでうまく機能しているということです。ただし、異なるサーバー-AWS LinuxとUbuntu 14.10。奇妙なことに、各サーバーのhttpd.confファイルを比較して、そこに構成の違いがあるかどうかを確認する必要があると思います...
Darragh Enright

またhtaccess、アクセスしようとしているパスをチェックしてください
Ujjwal Singh

@MarkHu Satisfy Anyソリューションを使用することを決定するまで、私の環境は機能していませんでした。ありがとう!!!
Neonigma

すべての付与を要求するように変更した後でも、同じエラーAccess Deniedが表示されます。
Deepak 2016

10

OK私は間違った構文を使用しています。

Allow from 127.0.0.1
Allow from ::1
...

1
Apache> 2.4では、これだけではうまくいきませんでした。組み合わせたときしかし、それは働いRequire all grantedにより示唆されるように、@フィル-L
Mugoma J. Okomba

5

Apache 2.4では、古いアクセス認証構文は非推奨になり、Requireを使用する新しいシステムに置き換えられました。

次に必要なのは次のようなものです。

<Directory "/labs/Projects/Nebula/">
  Options All
  AllowOverride All
  <RequireAny>
    Require local
    Require ip 192.168.1
  </RequireAny>
</Directory>

これは、発信接続を許可するいずれかのローカルホストからか、「192.168.1」で始まるIPアドレスからを。

設定をすぐに更新したくない場合は、Apache 2.4に古い構文を認識させる新しいモジュールもあります。

sudo a2enmod access_compat

1

「127.0.0 192.168.1 :: 1 localhostから許可」を「すべて許可」に変更してみてください。それで問題が解決した場合は、コンテンツをどこからリクエストできるかについて制限を緩和する必要があります


1

これが、debian上のsymfony 1.4仮想ホストファイルです。これは正常に動作します。

  <Directory /var/www/sf_project/web/>
    Options All Indexes FollowSymLinks    
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

特定のIP範囲、たとえばlocalhostへのアクセスを制限したくない場合は、次のようにします。

Allow from 127.0.0.0/8

mod_authz_hostは、 IPアドレスの範囲をフィルタリングする責任があります。そこから細かいことまで調べられます。

しかし、多分問題はあなたの "apache2.conf"のある種の設定ミスに関連しているかもしれません。

ApacheはどのOSで実行されていますか?


1

あなたが持っているなら

Allow from All

httpd.confで、次のことを確認してください

index.php

httpd.confの以下の行のように

DirectoryIndex index.html index.php

1

私はVesta CPを使用してこの問題を抱えていましたが、私にとってのトリックは.htaccessを削除し、任意のファイルに再度アクセスしようとすることでした。

その結果、.htaccessファイルが再生成され、ファイルにアクセスできました。



-3

このコードは私のために働いた。

 <Location />
Allow from all
Order Deny,Allow
</Location> 

これが他の人を助けることを願っています


1
これは、絶対にApache構成に追加することをお勧めしません。
Ricky Mutschlechner、2015年

これにより、Apacheはコンピューター上のすべてのファイルにアクセスできます。セキュリティに非常に悪い。
2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.