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