我已经提出了相同的问题stackoverflow,但后来我认为这可能是更多的相关在这里。
在apache的httpd.conf中的VirtualHost
标签之间,我把<LimitExcept>
expression式如下:
<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
指令有效的上下文中,那么它将工作得很好。
如果你试图直接在<VirtualHost>
上下文中直接使用Deny
规则,你会发现它被拒绝了,同样的,拒绝它的<VirtualHost>
也是不允许的,所以在它们之间不要添加一个<LimitExcept>
。
但是,诀窍在于<LimitExcept>
和其他一些块types(如<IfModule>
)不会修改指令的上下文; 在指令的文档中,您永远不会在可接受的上下文列表中看到“限制”。
只有四个上下文可以决定是否允许指令:
<Location>
和<Files>
types指令) 在mod_authz_host
指令( Order
, Allow
和Deny
)的情况下,它们只允许在目录和htaccess上下文中,所以当它们不在一个时,它们总是会出错的。
在你的情况下,这个反向代理虚拟主机没有文件系统的位置,所以你需要使用<Location>
块(这是一个Allow
/ Deny
的有效上下文,因为它是目录上下文types):
<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文件中。