Я пытаюсь заставить 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)