У меня есть обратный прокси-сервер 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>