Мы используем 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».
Я делал это труднее, чем нужно.
Я изменил свой 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.