Я устранял проблему с неясной проблемой 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 для сайта с соответствующим сертификатом, если он никогда не определенв конфигурации сделать так?