即使未启用SSL,Nginx的网站服务证书

时间:2018-10-08 18:17:44

标签: nginx nginx-config

我一直在解决一个晦涩的nginx问题,其中我们有一个站点可以正确提供证书并在端口443上建立ssl连接,即使未为该端口显式打开ssl。在下面,您可以看到站点的配置,该站点正在侦听端口443,但未使用ssl directive

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,也将此站点的端口443解释为ssl端口。对于nginx 1.7.5版和nginx 1.13.8版,此行为都是正确的。

如果未在配置中定义nginx,则nginx会使用适当的证书在端口443上为站点正确建立ssl连接的可能原因是什么?

0 个答案:

没有答案