Прокси 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
задан 5 September 2014 в 17:58
1 ответ

В любом случае, на самом деле все в порядке. Но большая разница между ними заключается в управлении сертификатами. Вариант 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>
1
ответ дан 4 December 2019 в 00:19

Теги

Похожие вопросы