我正在尝试使用 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 并失败。::1
127.0.0.1
curl
当然,在您(可能)最终将您的网站放在的全球互联网上,您也必须使用 IPv6,无论是现在还是在不久的将来。所以您今天就应该为此做好准备。