#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. Да, я поставил отрицание последним. Похоже, что каждый матч выигрывает.