web-dev-qa-db-ja.com

apache2:なぜ<LimitExcept>パラメータがvirtualhostタグで「deny not allowed here」エラーになるのですか?

stackoverflowと同じ質問 を質問しましたが、ここに関連しているのではないかと思いました。

apacheのhttpd.confのVirtualHostタグの間に<LimitExcept>式は次のようになります。

<VirtualHost *:80>
 ServerName geopreprod.xxx.com.tr

 <LimitExcept HEAD POST GET>
     Deny from all
 </LimitExcept> 

  ProxyRequests Off
  ProxyPreserveHost On

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass / http://XXXXXXXX...
  ProxyPassReverse / http://XXXXXXXX....
</VirtualHost>

その後、Apache Webサーバーは次のエラーを表示して起動に失敗します。

Syntax error on line 513 of XXXXX/httpd.conf:
deny not allowed here

<LimitExcept>VirtualHostタグで使用できます 公式ドキュメント なぜこのエラーが発生するのですか?

apacheドキュメントではそれは言う:

Context:    server config, virtual Host, directory, .htaccess
6
destan

<LimitExcept>ブロックがAllow/Denyディレクティブに対して有効なコンテキスト内にある限り、問題なく機能します。

裸のDenyルールでさえ<VirtualHost>コンテキストに直接配置しようとすると、同じように拒否されていることがわかります-<VirtualHost>Deny許可されていないため、それらの間に<LimitExcept>を追加することもできません。

しかし、トリックは、<LimitExcept><IfModule>のような他のいくつかのブロックタイプは、ディレクティブのコンテキストを変更しないことです。ディレクティブのドキュメントの許容可能なコンテキストのリストに「制限」が表示されることはありません。

ディレクティブを許可するかどうかを指定できるのは 4つのコンテキスト だけです。

  • サーバー構成
  • 仮想ホスト
  • ディレクトリ(<Location>および<Files>タイプのディレクティブも含まれます)
  • .htaccess

mod_authz_Hostディレクティブ(OrderAllow、およびDeny)の場合、これらはディレクトリおよびhtaccessコンテキストでのみ許可されているため、それらが1つにない場合、常にエラーになります。

あなたの場合、このリバースプロキシvhostのファイルシステムの場所がないため、<Location>ブロック(Allow/Denyの有効なコンテキスト)を使用する必要があります。ディレクトリコンテキストタイプです):

<Location />
    Order allow,deny
    Allow from all
    <LimitExcept HEAD POST GET>
        Deny from all
    </LimitExcept>
</Location>

ああ、そして<Proxy *>ブロックは何も実行していないので取り除いてください-とにかく<Location>がそれより優先されますが、<LimitExcept>の制限と競合しています。神経質。

14
Shane Madden

エラーメッセージは、Deny<LimitExcept>ブロックでは許可されていないことを示しています。

ドキュメントの別の部分: 「mod_authz_Hostによって提供されるディレクティブは、<Directory><Files>、および<Location>セクションと.htaccessファイルで使用されます」 。

2
Ladadadada