Я должен установить прокси Apache для нескольких серверов, один прокси для одного сервера. Я могу сделать это двумя способами:
Установите один виртуальный хост и несколько прокси. Каждый сервер подается в качестве подкаталога виртуального хоста: aaa.bbb.ccc/test1 и aaa.bbb.ccc/test2
<VirtualHost *:443>
ServerName aaa.bbb.ccc
RewriteEngine on
RewriteRule ^/test1$ /test1/ [R]
RewriteRule ^/test1(.*) http://localhost:8080$1 [P]
RewriteRule ^/test2$ /test2/ [R]
RewriteRule ^/test2(.*) http://localhost:8081$1 [P]
<Location "/test1">
...
</Location>
<Location "/test2">
...
</Location>
....
</VirtualHost>
Установите виртуальные хосты N и прокси N, служа N серверам. Каждый сервер будет подаваться с одним виртуальным хостом.
NameVirtualHost *:443
<VirtualHost *.443>
ServerName aaa.bbb.ccc
RewriteEngine on
RewriteRule ^(.*) http://localhost:8080$1 [P]
<Location "/">
...
</Location>
</VirtualHost>
<VirtualHost *.443>
ServerName ddd.bbb.ccc
RewriteEngine on
RewriteRule ^(.*) http://localhost:8081$1 [P]
<Location "/">
...
</Location>
</VirtualHost>
Обе работы. Однако я не знаю, какой лучше. Кто-то может сравнить за и против двух подходов?
В любом случае, на самом деле все в порядке. Но большая разница между ними заключается в управлении сертификатами. Вариант 1 требует только 1 сертификат для SSL. Вариант 2 зависит от того, что вы делаете для имен хостов. Если единственное, что меняется - это субдомен, вы можете использовать сертификат wild card или вам понадобится сертификат для каждого виртуального узла. Оба варианта могут стать дорогими.
Обычно самым большим реальным драйвером между этими двумя вариантами будут решения типа "бизнес". Более четкое разделение между внутренними серверами.
То, как вы на самом деле подвергаете внутренние серверы воздействию извне, не самый эффективный способ. Технически он работает, но вы можете столкнуться с множеством проблем. Ссылки на страницах могут выдавать неверный результат. На внешнем сайте, вы на самом деле разоблачаете внутренние ссылки и создаете впечатление, что сайт сломан. Изображения и Javascript также будут работать некорректно или делать какие-то фанки. Вы действительно должны использовать Proxy и ReverseProxy
ProxyRequests off
ProxyPass /test1/ http://127.0.0.1:8080/
ProxyPass /test2/ http://127.0.0.1:8081/
ProxyHTMLURLMap http://127.0.0.1:8080 /app1
ProxyHTMLURLMap http://127.0.0.1:8081 /app2
<Location /test1/>
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLURLMap / /test1/
</Location>
<Location /test2/>
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLURLMap / /test2/
</Location>