Зеркальное отражение базы данных не поддерживается SQL Reporting Services.
http://msdn.microsoft.com/en-us/library/bb510781%28SQL.90%29.aspx
You dont need to drop it all, you could just use nginx in front of haproxy for SSL support, keeping all your load balancing config. You dont even need to use nginx for HTTP if you don't want to. Nginx can pass both X-Forwarded-For and a custom header indicating SSL is in use (and client cert information if you want). Nginx config snippet that sends required information:
proxy_set_header SCHEME $scheme; # http/https
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header CLIENT_CERT $ssl_client_raw_cert;
Для всех, кто нашел этот вопрос, я последовал совету Охото и использовал nginx. Вот конкретные шаги, которые я использовал для выполнения этой работы на моем маршрутизаторе pfSense :
Используя веб-интерфейс pfsense, я установил пакет pfsense PfJailctl и пакет «jail_template» в Система> Пакеты , чтобы я мог создать тюрьму FreeBSD для компиляции и установки nginx в системе pfsense.
Я настроил тюрьму для своего сервера nginx в разделе Службы> Тюрьмы , давая в новой тюрьме то же имя хоста и IP-адрес виртуального IP-псевдонима, на котором у меня был запущен HAproxy. Привязал джейл к WAN интерфейсу. Я использовал шаблон тюрьмы по умолчанию и включил unionfs, а не nullfs.
Как только тюрьма была запущена, Я зашел в ящик pfsense и запустил jls
, чтобы найти номер тюрьмы. Затем я запустил jexec 1 sh
, чтобы получить оболочку внутри тюрьмы. Оттуда я настроил порты BSD и установил nginx, используя:
portsnap extract
обновление выборки портов
компакт-диск / usr / порты / www / nginx
сделать установку чистой
Затем я настроил nginx для прослушивания порта 443 и передачи всех запросов HAproxy на порт 80, включая реальный IP-адрес и статус SSL внутри заголовков HTTP. Мой usr / local / etc / nginx / nginx.conf
выглядит так:
worker_processes 1;
События {
worker_connections 2048;
}
http {
upstream haproxy {
сервер 209.59.186.35:80;
}
server {
слушать 443;
имя_сервера my.host.name default_server;
ssl включен;
ssl_certificate my.crt;
ssl_certificate_key my.key;
ssl_session_timeout 5 мин;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:! aNULL:! MD5;
ssl_prefer_server_ciphers на;
расположение / {
proxy_pass http: // haproxy;
proxy_set_header Host $ host;
proxy_set_header X-Real-IP $ remote_addr;
proxy_set_header X-Forwarded-For $ proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
}
}
Затем я модифицировал свое приложение PHP, чтобы обнаруживать функцию X-Forwarded-Proto
HTTP Header:
, используя SSL ()
{
возвращение (
(isset ($ _ SERVER ['HTTPS']) && strtolower ($ _ SERVER ['HTTPS']) == 'on')
|| (isset ($ _ SERVER ['HTTP_X_FORWARDED_PROTO'])
&& strtolower ($ _ SERVER ['HTTP_X_FORWARDED_PROTO']) == 'https'));
}
Итак, окончательная настройка:
(internet) ---> [ -> nginx -> haproxy -]--> (pool of apache servers)
[ (pfSense server) ]
HAProxy не может подключиться к серверу SSL без использования режима raw TCP, теряя X-Forwarded -Для
, но вы потенциально можете повторно зашифровать трафик с помощью stunnel для внутреннего транзита. Однако уродливо.
Мне больше нравится подход Ochoto, но с одной оговоркой: nginx - отлично работающий балансировщик нагрузки; если вы его используете, я бы сказал, используйте его для всего. Прокси-сервер входящего HTTPS-трафика для загрузки сбалансированных HTTPS-серверов - и в этом случае нет необходимости в настраиваемых заголовках для информации SSL (если вам не нужен сертификат клиента).
Для записи, поскольку этот поток часто упоминается в отношении HAProxy + SSL, HAProxy поддерживает собственный SSL с обеих сторон, начиная с версии 1.5-dev12. Таким образом, наличие X-Forwarded-For, HTTP keep-alive, а также заголовка, сообщающего серверу о том, что соединение было выполнено через SSL, очень просто:
listen front
bind :80
bind :443 ssl crt /etc/haproxy/haproxy.pem
mode http
option http-server-close
option forwardfor
http-request set-header X-Forwarded-Proto https if { ssl_fc }
server srv1 1.1.1.1:80 check ...
...
Я уверен, что к тому времени, когда вы что-то придумаете разные, но, по крайней мере, новые посетители теперь получат простое решение: -)
Моя конфигурация для 1.5-dev-17 версии haproxy:
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
option http-server-close
retries 3
option redispatch
fullconn 1000
maxconn 1000
timeout queue 600s
timeout connect 5s
timeout client 600s
timeout server 600s
frontend http-in
bind *:80
bind *:443 ssl crt /usr/local/etc/ssl/certs
reqadd X-Forwarded-Proto:\ https if { ssl_fc }
default_backend varnish-ha
option forwardfor
backend varnish-ha
server hafront1 10.1.69.1:6081 minconn 100 maxqueue 10000
Он использует ACL ssl_fc
. Обратите внимание, что часть параметра http-server-close
очень важна.
В прошлом году я реализовал решение для интеграции HAProxy с pfSense таким образом, чтобы оно использовало все функции HAProxy и поддерживало хорошая изоляция с pfSense. Так что это жизнеспособный вариант для производственных сред . SSL прерывается на HAProxy . Я установил HAProxy внутри тюрьмы в pfSense, используя ezjail и Ports Collection . Таким образом, очень легко поддерживать оба компонента независимо друг от друга. И вы можете установить любую версию, которую хотите. Я начал с 1.5-dev13. И с тех пор у меня он отлично работает. Я все это задокументировал.
Кстати, Вилли, большое спасибо за такой отличный продукт.