Nginx http to https перенаправление не работает при прослушивании балансировщика нагрузки восходящего потока

В настоящее время у меня есть балансировщик нагрузки HAProxy, без завершения SSL, который направляет трафик на пару веб-серверов. На веб-сервере nginx завершает работу SSL и теоретически обеспечивает перенаправление http на https. Однако при запросе http в браузере он не перенаправляет, а вместо этого выдает ошибку 400 Bad Request, в которой говорится, что простой HTTP-запрос был отправлен на порт https. Есть идеи, что я здесь делаю не так?

Пример файла конфигурации nginx:

server {
    listen private.ip:80;
    allow lb.ip;
    allow secondary_lb.ip;
    deny all;

    server_name qa.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen private.ip:443 ssl;
    allow lb.ip;
    allow secondary_lb.ip;
    deny all;

    server_name qa.example.com;

    # rest of config
}

Я считаю, что соответствующие разделы конфигурации HAProxy следующие (присутствуют некоторые доступные переменные, но вы поняли идею) ...

frontend http
    bind    my_ip:80
    bind    my_ip:443
    option tcplog
    mode tcp
    default_backend app_pool

backend app_pool
    mode tcp
    balance roundrobin
    option ssl-hello-chk
    {% for server in backend_webservers %}
    server {{ server.name }} {{ server.ip }}:443 check
    {% endfor %}
0
задан 29 November 2018 в 18:00
1 ответ

Учитывая вашу конфигурацию, HAProxy направляет запрос на порт 443, даже если это HTTP. трафик получен через порт 80.
Лучший способ справиться с этим - настроить перенаправление http на https на HAProxy, а не на серверной части. Таким образом, вам нужно будет добавить в интерфейс HAProxy следующее:

схема перенаправления https-код 301 if! {Ssl_fc}

0
ответ дан 5 December 2019 в 05:02

Теги

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