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

Прокси мод Apache для локального сервера, на котором работает VPN

У меня есть открытый сервер, на котором работает Apache, и закрытый сервер, на котором также работает Apache, который находится за брандмауэром и работает с VPN.

Я пытаюсь перенаправить запросы из поддомена на закрытый сервер с помощью открытого сервера. subdomain.request.com -> open server -> closest server

Насколько я понимаю, этого можно достичь с помощью прокси-сервера Apache, но у меня возникают трудности с его настройкой. Я могу запросить домашнюю страницу, но все остальные страницы производят DNS lookup failure ошибка.

vhost

<VirtualHost *:80> ServerName subdomain.request.com ProxyPass / http://10.0.0.54:8080 ProxyPassReverse / http://10.0.0.54:8080 ProxyPassMatch ^/(.*)$ http://10.0.0.54:8080/$1i </VirtualHost>

Гаррет почти прав, но вам нужно сделать наоборот:

<VirtualHost *:80>
ServerName subdomain.request.com
RewriteEngine On
ProxyPreserveHost On
RewriteRule ^/(.*)$ http://10.0.0.54:8080/$1 [P,QSA,L]
</VirtualHost>

Таким образом, сервер 10.0.0.54 получит исходный заголовок "Host:" (также известный как subdomain.request.com, а не 10.0.0.54), а поскольку сервер 10.0.0.54 мощь создавать ссылки на основе этого заголовка, это, вероятно, решит вашу проблему.

Я предполагаю, что возникшая у вас ошибка не является ошибкой DNS, а сетевой ошибкой, потому что с вашей настройкой сервер генерирует URL-адреса, похожие на: http://10.0.0.54... и эти URL-адреса недоступны из Интернета (потому что 10.0.0.54 - это частная сеть за вашим vpn).

С участием ProxyPreserveHost On ваш сервер будет генерировать ссылки на: http://subdomain.request.com...

В этом случае проще использовать функцию прокси [P] в mod_rewrite

<VirtualHost *:80>
ServerName subdomain.request.com
RewriteEngine On
RewriteRule ^/(.*)$ http://10.0.0.54:8080/$1 [P,QSA,L]
</VirtualHost>

Вы также должны знать о директиве ProxyPreserveHost.

ProxyPreserveHost On|Off

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypreservehost

Если на вашем прокси-сервере этот параметр включен, он будет передавать имя хоста, которое вы ищете, в mod_proxy, и если mod_proxy не может решить это, он выдаст вам ошибку DNS.