踩过这个坑的应该不止他一个吧?说实话,我刚入行第2个月,也因为这个断链的问题,把公司一个老电商的积分兑换页面搞崩了半天——当时那个页面用的是嵌入式支付接口,银行端只认完整证书链,差了一点点就触发风控,暂停了接口调用。
今天就把这个折腾过我和发小的、能直接落地中小公司服务器的Nginx HTTPS配置(附主流系统适配、免费SSL证书申请指引) 整理出来,面向入行1-3年的新手和兼职运维的后端,全程都是踩坑踩出来的干货,没有半点儿官方文档的废话。
先提一句,证书我个人 先拿Let’s Encrypt的免费DV证书练手,足够中小网站、小程序、非核心金融场景用,有效期虽然只有90天,但可以用certbot自动续期,完全不用管。
以最常用的CentOS 7.x和Ubuntu 22.04为例,先装certbot和nginx的插件。如果是CentOS 7,先装EPEL源,这个是必须的,yum官方源里没有certbot:
yum install -y epel-release
yum install -y certbot python3-certbot-nginx
如果是Ubuntu 22.04,直接用apt就行:
apt update && apt install -y certbot python3-certbot-nginx
敲黑板!敲黑板!敲黑板!这里一定要注意两个细节:
你的域名必须已经解析到当前服务器的公网IP,最好等个5-10分钟再执行下一步,不然Let’s Encrypt的验证服务器找不到你,申请会失败;
当前服务器的80端口和443端口必须完全开放,别只开443,Let’s Encrypt的HTTP验证默认走80,新手最容易犯这个错——我发小当时就是急着上线,先把80端口临时封了想直接上HTTPS,结果验证失败了三次才解封。
一切准备就绪,就用certbot的nginx一键配置功能,这个比手动写配置文件稳太多,踩坑率至少降80%:

certbot nginx
执行之后会让你输入邮箱(用于续期提醒和Let’s Encrypt的安全通知,不用填真实常用邮箱,但最好是能收到邮件的),然后会列出当前nginx配置里的所有域名(前提是你之前已经写过基本的HTTP server块,监听80端口),选择要配置HTTPS的域名编号就行。
接下来会问你是否要强制HTTP跳转到HTTPS,这里选2(Redirect),这个是现在主流的做法,能保证用户不管输HTTP还是HTTPS,都能安全访问。
等执行完,certbot会自动修改你的nginx配置文件,添加443监听、SSL证书路径、强制跳转规则,还会自动启动一个定时任务,每隔60天自动续期一次证书——完全不用你手动管,太省心了。
不过为了保险起见,还是 你手动检查一下nginx的配置是否正确,执行:
nginx -t
如果显示syntax is ok和test is successful,就重启nginx生效:
systemctl restart nginx
重启之后打开浏览器输入你的域名,看看左上角有没有绿锁或者安全锁,有的话就说明配置成功了。
最后再给新手补两个踩过无数次的专属避坑提醒:
如果你是手动配置HTTPS,千万不要只填主证书和私钥,一定要把fullchain.pem或者chain.pem+cert.pem填对——Let’s Encrypt的一键配置生成的证书路径一般是/etc/letsencrypt/live/你的域名/fullchain.pem(证书链)和/etc/letsencrypt/live/你的域名/privkey.pem(私钥),别搞错顺序;
不要随便删除/etc/letsencrypt目录下的任何文件,尤其是live目录里的软链接,不然证书续期会失败——我之前就有个同事为了“清理服务器空间”,把live目录下的软链接删了,结果手动续期了半天都没成功,最后只能重新申请证书。
你们在配置Nginx HTTPS的时候有没有遇到过类似的坑?欢迎在评论区分享你的排查经验!

评论列表 (0条):
加载更多评论 Loading...