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

Контроль доступа к обратному прокси-серверу Apache

У меня есть обратный прокси-сервер Apache, который в настоящее время выполняет обратное проксирование для нескольких сайтов. Однако сейчас я собираюсь добавить новый сайт (назовем его newsite.com), который должен быть доступен только с определенных IP-адресов. Возможно ли это, используя Apache в качестве обратного прокси?

Я использую VirtualHosts для прокси-сайтов. Я пробовал использовать директивы Allow / Deny в сочетании с операторами Location. Например:

<VirtualHost *:80>  
Servername newsite.com   
<Location http://newsite.com>
Order Deny,Allow
Deny from all
Allow from x.x.x.x
</Location>
<IfModule rewrite_module>
 RewriteRule ^/$ http://newsite.internal.com [proxy]
</IfModule>

Я также попытался настроить разрешить / запретить специально для сайта в директивах Proxy, например

<Proxy http://newsite.com/>
  Order deny,allow
  Deny from all
  Allow from x.x.x.x
</Proxy>

Однако у меня все еще есть это определение для остальных прокси-сайтов.

<Proxy *>
  Order deny,allow
  Allow from all
</Proxy>

Независимо от того, что я делаю, кажется, что он доступен откуда угодно. Это из-за определения для всех других прокси-сайтов. Есть ли порядок, к которому он применяет директивы Proxy. У меня был новостной сайт до и после *, а также в заявлении VirtualHost.

Ты используешь Название сервера и ServerAlias для соответствия newsite.com.

Вам следует НЕ используйте для конфигурации обратного прокси директиву:

<Proxy whatever>

Вам следует использовать:

Для apache 2.2:

<Location />
Order Deny,Allow
Deny from all
Allow from x.x.x.x
</Location>

Для apache 2.4:

<Location />
   <RequireAny>
       Require             ip x.x.x.x/255.255.255.0
       Require ...
   </RequireAny>
</Location>

После выполнения Authz вам просто нужно выполнить ProxyPass и ProxyPassReverse (для 302 301 перенаправления):

ProxyPass /  http://newsite.com/
ProxyPassReverse /  http://newsite.com/

Имейте в виду, что для этого вам нужно добавить newsite.com в ваш / etc / hosts или что dns должен разрешать хост в URL-адресе. Вы также можете использовать только IP-адрес, но вы должны указать серверу httpd, который сохраняет заголовок «Host:», с помощью:

ProxyPreserveHost On

была похожая проблема сегодня; Было связано с тем, как выполняется сопоставление подстановочных знаков, я думаю, что он использует полный URL-адрес: в моем случае у меня

<Proxy /jira*>
  Order allow,deny
  Deny from all
</Proxy>
ProxyPass /jira https://myhost.com

и это не сработало. Сайт был доступен откуда угодно. Я попробовал пару вещей и нашел рабочую версию:

<Proxy *jira*>

Итак, в вашем случае попробуйте

<Proxy http://newsite.com*>

чтобы убедиться, что apache соответствует этому URL-адресу.

<VirtualHost *:80>
    Servername newsite.com

    <Proxy *>
            Order Deny,Allow
            Deny from all
            Allow from x.x.x.x
    </Proxy>

    ProxyPass /  http://newsite.com/
    ProxyPassReverse /  http://newsite.com/

</VirtualHost>