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

Прокси-сервер Apache для нескольких серверов: сравнение двух решений

Мне нужно настроить прокси Apache для нескольких серверов, один прокси для одного сервера. Я могу сделать это двумя способами:

  1. Настройте один виртуальный хост и несколько прокси. Каждый сервер обслуживается как подкаталог виртуального хоста: 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>
    
  2. Настройте 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>