Назад | Перейти на главную страницу

Балансировщик нагрузки Nginx зависает на SSL

Я пытаюсь заставить nginx выполнять балансировку нагрузки на моих веб-серверах, прерывая SSL на уровне балансировщика нагрузки. Файл nginx.conf, который я использую, основан на всех руководствах для выполнения именно этого, но я не могу заставить его работать. При переходе на стандартный HTTP балансировщик нагрузки работает нормально. Однако при попытке доступа к балансировщику нагрузки через HTTPS браузер просто зависает, в конечном итоге выдавая ERR_CONNECTION_REFUSED.

Я не вижу ошибок в журналах или даже чего-либо в журналах доступа при попытке HTTPS, поэтому я понятия не имею, в чем может быть проблема. Я пробовал множество различных вариантов конфигурации, в том числе пробовал разные сертификаты SSL, кодировку PEM, объединение сертификатов и т. Д. - все безрезультатно.

Вот основная часть nginx.conf:

upstream backend {
    #web01
    server 10.01.01.102;
    #web02
    server 10.02.02.77;
}

#setup proxy
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

# standard http server
server {
    listen 80;
    listen 4444;

    server_name *.example.com;

    location / {
        proxy_pass http://backend;
    }
}

#server for https requests
server {
    listen 443 ssl;

    server_name *.example.com;

    #ssl on;
    ssl_certificate /path/to/example.com.crt;
    ssl_certificate_key /path/to/example.com.key;

    location / {
        proxy_pass http://backend;
    }
}

У кого-нибудь есть идеи? Без вывода ошибок я не уверен, как понять, в чем проблема.

РЕДАКТИРОВАТЬ:

При попытке подключиться к HTTPS в журналах по-прежнему ничего нет. Журналы настроены и работают при доступе к HTTP-серверу (я получаю записи в журнале доступа). Вот соответствующая часть файла nginx.conf для журналов:

access_log /var/log/nginx/nginx.vhost.access.log;
error_log /var/log/nginx/nginx.vhost.error.log;

Я только что проверил, что журнал ошибок работает правильно, и это так. Я сделал это, удалив запись ssl_certificate из блока сервера в файле конфигурации, а затем попытался подключиться снова. Журнал ошибок (/var/log/nginx/nginx.vhost.error.log;) показал:

2014/09/23 13:41:28 [error] 10047#0: *9 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: 127.0.0.1, server: 0.0.0.0:443.

Я вернул запись ssl_certificate, но хочу подтвердить, что журналы ошибок работают. Я также просмотрел все журналы в / var / log и не обнаружил ошибок, связанных с nginx.

В комментариях вы подтвердили, что процесс nginx запущен и telnet localhost 443 работал. Но это не значит, что сторонняя сторона может добраться до вашего nginx. Один слой, который вы должны проверить, был брандмауэр. Он проверит и отбросит пакет, поступающий на nginx, если вы не разрешите правило для порта 443.

Примечание: Ошибка Nginx 400 Bad request, обычно означает, что вы подключились к nginx через порт https, но ваш запрос не был открытым текстом или неполным (например, не определены заголовки HTTP)