nginx 配置https,并适配微信小程序

前言

最近接手了个小程序项目,但是由于交接文档不完善,于昨天上午域名证书过期,导致无法调用后端服务,短暂(五分钟左右)影响了小程序的使用,也算是一个不大不小的事故吧[手动捂脸笑...]

解决过程

临时处理

发现是证书过期导致的问题,立马就上阿里云申请新的证书,五分钟左右,证书就签发下来了,还是挺快的,替换证书之后,服务恢复正常,但是免费的证书只有3个月的有效期,之前是1年,到期之后需要再次申请并手动替换证书,比较麻烦,于是就在想有没有更好的自动化的方法,经过一番摸索,发现是有方法的。

最终解决

替换 let's Encrypt 的证书,并配置自动更新

  • 之前的文章 https证书自动续期 介绍了如何使用 let's Encrypt 申请并且配置自动更新证书,也可以访问其 官网 了解其他用法,不清楚的朋友可以看看;

  • 自动更新的原理大概是:证书默认3个月有效期,每天检查证书是否过期,在离过期时间前一个月,自动申请新的证书并替换;

  • example.com 为例 Let's Encrypt 签发下来的各个文件作用:

    文件名 作用
    ca.cer 中间证书
    fullchain.cer 证书链
    example.com.cer 证书文件
    example.com.conf acme.sh 工具自动安装证书配置文件
    example.com.csr 证书签名请求(Certificate signing request),包含证书持有人的信息,如:国家,邮件,域名等信息
    example.com.csr.conf 证书签名请求配置
    example.com.key 单独存放的 cer 格式的密钥,一般保存为 *.key配置nginx

配置nginx

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    ssl_certificate /etc/nginx/ssl/lets-encrypt/example.com_ecc/fullchain.cer; #这里的ssl是自定义文件夹 
    ssl_certificate_key /etc/nginx/ssl/lets-encrypt/example.com_ecc/example.com.key; #这里的ssl是自定义文件夹
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

	# root /var/www/html;
	root /home/hy/www/html/wechat-mini-program;

	# Add index.php to the list if you are using PHP
	index index.html index.htm index.nginx-debian.html;

	server_name _;

	location / {
		try_files $uri $uri/ =404;
	}
}
  • ssl_certificate 服务器证书的文件路径

    注意注意,这里很重要!很重要!很重要!重要的事情说三遍:

    ssl_certificate 这里配置的证书是 fullchain.cer ,而不是 example.com.cerexample.com.cer 浏览器是能正常的,但是微信小程序端不认这个证书,因为证书链不完整而不受信任,必须是使用 fullchain.cer

  • ssl_certificate_key 服务器证书对应的私钥文件

  • ssl_session_cache shared:SSL:1m; 配置SSL会话缓存的类型和大小

    这里使用的是共享内存区域(shared)来存储SSL会话参数,每个会话大约占用1MB的空间。会话缓存可以加速后续的SSL握手过程,因为复用之前的会话参数可以减少计算量。

  • ssl_session_timeout 10m 设置SSL会话的超时时间

    这里配置为10分钟。如果一个SSL会话在10分钟内没有任何活动,服务器将销毁这个会话,用户将需要重新进行SSL握手来建立新的会话。

  • ssl_ciphers HIGH:!aNULL:!MD5 指定服务器允许的加密算法(密码套件)

    1. 这里配置表示使用高强度的加密算法,排除不支持认证的算法(aNULL)和MD5哈希算法,因为它们被认为是不安全的。
  • ssl_prefer_server_ciphers on

    这个指令告诉Nginx服务器在SSL握手时优先使用服务器端支持的加密算法,而不是客户端优先。这可以确保使用更安全的加密算法,因为服务器通常配置为使用更强的加密设置。

结语

配置完 let's encryptnginx 后,重启 nginx 服务就能正常使用了,而且不用再关注证书是否过期了,只要 let's encrypt服务不出问题,可以永久使用,亲测有效,最重要的是:ssl_certificate 这里配置的证书是 fullchain.cer再次提醒,希望这篇文章能帮助遇到相同问题的朋友。

posted @ 2024-04-26 18:15  猫与鱼11  阅读(395)  评论(0编辑  收藏  举报