Прокси-сервер переадресации Apache, разрешать прокси-сервер только определенным хостам, запрещать все остальное

#apache #mod-proxy

Вопрос:

Я настроил прямой прокси-сервер с помощью Apache 2.4. Я хочу разрешить пользователям прокси-сервера доступ к семи различным доменам и запретить все остальное. Я настроил доступ к семи доменам следующим образом:

 # Allow proxy only to these test sites
<ProxyMatch ^https:.{1,20}.?test.(com|io|zone)>
      Include /etc/apache2/sites-available/password-protect.conf
</ProxyMatch>

<ProxyMatch ^https:.{1,20}.?testhost.(cloud|com|io)>
      Include /etc/apache2/sites-available/password-protect.conf
</ProxyMatch>

<ProxyMatch ^https:.{1,20}.?test-content.com>
      Include /etc/apache2/sites-available/password-protect.conf
</ProxyMatch>
 

Я временно включил защиту паролем в каждую из директив ProxyMatch, чтобы проверить соответствие регулярного выражения. Эта часть работает правильно. Проблема в том, что я не могу найти способ отрицать все остальное. Я добавил тег ProxyMatch, чтобы запретить*, и он действительно все отрицает. Apache не просто находит первый подходящий прокси-сервер, а затем останавливается. Последнее отрицание полностью соответствует всему.

Я думаю, что могу создать сложное регулярное выражение, в котором я беру три выражения регулярного выражения ProxyMatch, добавляю оператор NOT к каждому и «или» их все вместе. Это кажется огромным беспорядком. Если я добавлю больше совпадений регулярных выражений позже, мое проксимальное соответствие «поймать все» будет недоступно. Просто хочу проверить, есть ли лучший способ создать полный запрет для любых запросов прокси-сервера, которые не соответствуют трем приведенным выше выражениям соответствия. Я уже просмотрел все директивы прокси-сервера в документации mod_proxy. Не вижу никакого способа сделать это без беспорядка.

Комментарии:

1. вы поставили свой «Отказ в проксиматче» последним в конфигурации ? потому что: The first rule that matches wins.

2. вы также можете использовать httpd.apache.org/docs/2.4/mod/core.html#if вместо ProxyMatch этого и отрицать внутри Else

3. Да, я поставил отрицание последним. Похоже, что каждый матч выигрывает.