Назад | Перейти на главную страницу

apache2: why <limitexcept> Результат параметра «запретить здесь нельзя» ошибка в теге virtualhost?</limitexcept>

Я спросил тот же вопрос к 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 не запускается из-за следующей ошибки:

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>, не изменяйте контекст директивы; вы никогда не увидите «предел» в списке допустимых контекстов в документации для директивы.

Есть только четыре контекста который может определять, разрешена ли директива:

  • конфигурация сервера
  • виртуальный хост
  • каталог (который включает <Location> и <Files> директивы типа тоже)
  • .htaccess

В случае mod_authz_host директивы (Order, Allow, и Deny), они разрешены только в контексте каталогов и htaccess, поэтому они всегда будут ошибаться, если их нет в одном.

В вашем случае для этого виртуального хоста с обратным прокси-сервером нет расположения файловой системы, поэтому вы захотите использовать <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 ".