Прокси-сервер 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 требует только 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>
Другие вопросы по тегам