Сертификат обслуживания Nginx для сайта, хотя SSL не включен - PullRequest
0 голосов
/ 08 октября 2018

Я устранял проблему с неясной проблемой nginx, когда у нас есть сайт, корректно обслуживающий сертификат и устанавливающий ssl-соединение через порт 443, даже если ssl явно не включен для порта.Ниже вы можете увидеть конфигурацию для сайта, который прослушивает порт 443, но не использует директиву ssl .

server {
  listen 443;
  port_in_redirect off;
  server_name xyz.abcd.com;

  # websockets
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";

  client_max_body_size                1m;
  proxy_set_header X-Request-Id       $request_id;
  proxy_set_header X-Request-Start    $msec;
  proxy_set_header X-Forwarded-Proto  "https";
  proxy_set_header Host               $host;

  location / {
    proxy_pass http://xyz-svc;
  }
}

Кроме того, наш nginx.conf явно не упоминает порт 443 или ssl, но включает в себя путь к сертификату для abcd.com:

http {
..

  ssl_certificate     /etc/ssl/certs/abcd.pem;
  ssl_certificate_key /etc/ssl/private/abcd.key;

..
}

Наконец, еслимы переходим к http://abcd.com:443, nginx выдает ошибку, говоря: «Простой HTTP-запрос был отправлен на порт HTTPS».Таким образом, очевидно, что порт 443 для этого сайта интерпретируется как порт ssl, хотя мы явно не определяем это в нашей конфигурации.Такое поведение верно как для nginx версии 1.7.5, так и для nginx версии 1.13.8.

По каким возможным причинам nginx правильно установит ssl-соединение через порт 443 для сайта с соответствующим сертификатом, если он никогда не определенв конфигурации сделать так?

...