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
<LimitExcept>
ブロックがAllow
/Deny
ディレクティブに対して有効なコンテキスト内にある限り、問題なく機能します。
裸のDeny
ルールでさえ<VirtualHost>
コンテキストに直接配置しようとすると、同じように拒否されていることがわかります-<VirtualHost>
とDeny
許可されていないため、それらの間に<LimitExcept>
を追加することもできません。
しかし、トリックは、<LimitExcept>
と<IfModule>
のような他のいくつかのブロックタイプは、ディレクティブのコンテキストを変更しないことです。ディレクティブのドキュメントの許容可能なコンテキストのリストに「制限」が表示されることはありません。
ディレクティブを許可するかどうかを指定できるのは 4つのコンテキスト だけです。
<Location>
および<Files>
タイプのディレクティブも含まれます)mod_authz_Host
ディレクティブ(Order
、Allow
、および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>
の制限と競合しています。神経質。
エラーメッセージは、Deny
が<LimitExcept>
ブロックでは許可されていないことを示しています。
ドキュメントの別の部分: 「mod_authz_Hostによって提供されるディレクティブは、<Directory>
、<Files>
、および<Location>
セクションと.htaccessファイルで使用されます」 。