Обратный прокси к URL
У меня есть сервер Ubuntu 12.04.3, настроенный как DNS-сервер (BIND9), веб-сервер (Apache2) и обратный прокси-сервер (haproxy). Моя цель - перенаправить haproxy на некоторые другие серверы в сети, некоторые из которых я хочу перенаправить на "суб URL" (не уверен, что это правильный термин. Пожалуйста, см. Пример ниже)
пользователь переходит на "monitor.example.com" > перенаправления haproxy на> "1.1.1.1:80/nagios"
Мой DNS-сервер настроен с использованием подстановочных субдоменов, и прямо сейчас, если я перейду на monitor.example.com, он перейдет на страницу apache по умолчанию на сервере монитора, но это будет выглядеть намного лучше и будет намного короче, если я наберу может заставить его направить на страницу / nagios автоматически. Если я захожу на monitor.example.com/nagios, он работает как положено, но немного избыточен.
Я потратил некоторое время на поиски решения, но мне не повезло найти ответ на мой вопрос. У кого-нибудь есть идеи, если это возможно, и если да, то как я могу решить это? Вот мой файл haproxy.conf:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
user haproxy
group haproxy
daemon
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend http-in
bind 1:80
acl host_apache hdr(host) -i example.com
acl host_monitor hdr(host) -i monitor.example.com
acl host_cloud hdr(host) -i cloud.example.com
use_backend apache if host_apache
use_backend monitor if host_monitor
use_backend cloud if host_cloud
backend apache
server web3 127.0.0.1:81
backend monitor
server monitor 1.1.1.1:80/monitor
backend cloud
server cloud 2.2.2.2:80
Если у кого-то есть какие-либо другие предложения или другая программа, которую я мог бы использовать для достижения своей цели, я открыт для предложений. Я не использую haproxy по какой-то конкретной причине. Я тоже пробовал фунт, но не смог его настроить.
Спасибо за прочтение!
Brigzzy
1 ответ
Хотя я люблю HAProxy, я бы согласился с Давидго, что это, вероятно, не лучший инструмент для этой работы. Я также думаю, что Apache с несколькими именованными vhosts и mod_rewrite для запросов прокси к необходимому бэкэнду - это путь.
Listen 80
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example.com
RewriteEngine on
ProxyPreserveHost On
RewriteRule ^/(.*)$ http://127.0.0.1:81/$1 [P]
</VirtualHost>
<VirtualHost *:80>
ServerName monitor.example.com
RewriteEngine on
ProxyPreserveHost On
RewriteRule ^/(.*)$ http://1.1.1.1:80/monitor/$1 [P]
</VirtualHost>
В зависимости от ваших приложений на бэкэнде, переписывание может работать, а может и не работать так, как вы ожидаете. Например, если nagios ожидает, что его ресурсы находятся в корневом каталоге /monitor, и он ссылается на такие вещи, как /monitor/someurl, то ваше переписывание приведет к тому, что URL окажется в /monitor/monitor/someurl раз он попадает на ваш сервер. Вероятно, это может быть преодолено другим RewriteRule или небольшим регулярным выражением в текущем.
Вы также можете просто использовать прямой mod_proxy с директивами ProxyPass вместо mod_rewrite (который в этом случае также использует mod_proxy)