本地主机上的 Nginx SSL

本地主机上的 Nginx SSL

我正在尝试使用 Nginx 在本地主机上配置 SSL。我创建了一个自签名证书,我的 Nginx 配置如下:

server {
  listen 443 ssl;
  server_name localhost;

  root /usr/share/nginx/html;
  index index.html index.htm;

  ssl on;
  ssl_certificate /etc/nginx/ssl/nginx.crt;
  ssl_certificate_key /etc/nginx/ssl/nginx.key;

  ssl_session_timeout 5m;

  ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
  ssl_prefer_server_ciphers on;

  location / {
        try_files $uri $uri/ =404;
  }
}

但当我尝试访问时,出现了以下错误

$ curl -i https://localhost            
  curl: (7) Failed to connect to localhost port 443: Connection refused

造成此错误的可能原因是什么?

这是命令“netstat -tuplen”的输出

tcp    0     0 0.0.0.0:443     0.0.0.0:*      LISTEN     0    71662       - 

答案1

您缺少一个listen指令:

listen [::]:443 ssl;

这告诉 nginx 监听 IPv6 连接。您现有的listen指令仅监听 IPv4 连接,这在您的netstat输出中得到了证实。

之所以需要这个(除了现有listen指令之外),是因为除了历史 IPv4 地址之外,localhost还会解析为 IPv6 地址。但是,IPv6 是建立连接的首选协议。因此尝试通过 IPv6 连接到 nginx 并失败。::1127.0.0.1curl

当然,在您(可能)最终将您的网站放在的全球互联网上,您也必须使用 IPv6,无论是现在还是在不久的将来。所以您今天就应该为此做好准备。

相关内容