Перенаправить HTTP на HTTPS с помощью ldirectord/LVS
Мы используем LVS для балансировки нагрузки и хотим выполнить перенаправление 301 для http://example.com/ на https://example.com/
LVS включает https без проблем, но реальные http-серверы не добавляются в пул (вес 0).
LVS не следует за 301 перенаправлениями? Если нет, как мне настроить ldirectord для отправки всего HTTP-трафика по HTTPS?
Вот конфиг nginx:
server {
listen 80;
server_name example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443;
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
server_name example.com;
# more here
}
И ldirectord.cf выглядит так:
virtual=VIP:80
fallback=127.0.0.1:80
real=10.0.0.7:80 masq 5
real=10.0.0.8:80 masq 5
service=http
request="lvs.htm"
receive="lvs"
virtualhost=example.com
scheduler=wlc
protocol=tcp
checktype=negotiate
virtual=VIP:443
fallback=127.0.0.1:443
real=10.0.0.7:443 masq 5
real=10.0.0.8:443 masq 5
service=https
request="lvs.htm"
receive="lvs"
virtualhost=example.com
scheduler=wlc
protocol=tcp
checktype=negotiate
Я также попытался установить свой VIP на порт 80, а мои порты RIP на 443, что привело к добавлению серверов в пул, но затем nginx возвращает 400 "Ошибка простого HTTP-запроса на порт HTTPS".
1 ответ
Я делал это сложнее, чем нужно было.
Я изменил свой nginx.conf так:
server {
listen 80;
server_name example.com;
root /var/www;
location = /lvs.htm {
#do nothing
}
location / {
return 301 https://example.com$request_uri;
}
}
lvs.htm находится в / var / www, поэтому местоположение совпадает, поиск останавливается, а lvs.htm предоставляется код ответа 200. LVS добавляет сервер в пул, и при его ударе nginx правильно перенаправляет на https с 301.