Мне нужно настроить прокси 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 зависит от того, что вы делаете для имен хостов. Если изменяется только поддомен, вы можете использовать сертификат с подстановкой или вам понадобится сертификат для каждого виртуального хоста. Оба могут стать дорогими.
Как правило, наиболее важным фактором между двумя вариантами будут решения «делового» типа. Более четкое разделение между внутренними серверами.
То, как вы фактически открываете доступ к внутренним серверам извне, - не самый эффективный способ. Технически это работает, но вы можете столкнуться с множеством проблем. Ссылки на страницах могут отображаться неправильно. На внешнем веб-сайте вы фактически открываете внутренние ссылки и создаете впечатление, что сайт не работает. Изображения и 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>