为何网站要升级为https
原因有以下几点:
1. 避免浏览器的不安全的警告
- 浏览器对于http的网站会在地址栏明确标记【不安全】字样
- 这样直接降低用户对网站的信任度
- 造成用户流失
- 甚至可能被用户误认为是钓鱼网站
- 如下图,是笔者的网站没有升级https证书的时候的样子

升级后的
2. 加密传输数据,防止数据泄露
- 这样理解,如果我们使用的是http的话,连接了一家咖啡厅的WiFi
- 而后执行登录操作,比如输入用户名密码:admin/admin123
- 输入了以后,黑客就能通过工具抓包,看到我们的请求参数的用户名和密码
- 于是,黑客就拿到了我们的用户名和密码...
- 实际上,除了能看到以外,甚至还能够修改我们的提交数据之类的
- ssl证书通过非对称加密和对称加密,先验证身份,再用专属钥匙加密数据
- 这样,黑客就没办法了
SSL 证书通过加密用户与网站之间的通信(如用户输入的信息、浏览行为等)防止数据在传输过程中被黑客窃取或篡改。即使是个人网站,若涉及用户留言、登录(如后台管理)、简单表单提交等,HTTPS 能避免数据泄露风险。
3. https拥有摄像头、麦克风、地理位置权限
- 若是http网站调用摄像头/麦克风,浏览器会直接拒绝
- 类似的,调用定位地理位置api,浏览器也会会弹出警告,甚至拒绝
4. 有利于SEO搜索引擎优化
- 搜索引擎大厂,比如谷歌、百度优先https网站,排名更高
- 另外,也会降低http网站的权重,从而影响网站的流量
- 另外,HTTP/2、CDN 加速等,也严格要求使用https
如何获取ssl
免费的 Let's Encrypt
Let's Encrypt:letsencrypt.org/zh-cn/
- Let's Encrypt提供免费的SSL证书
- 主流浏览器都支持
- 缺点就是证书有效期只有90天
- 需要每三个月手动更新一次
付费的云服务器供应商提供
- 付费ssl证书也不贵,普通的也就几十块钱一年

nginx代码控制
下载nginx证书
比如,笔者在腾讯云后台下载对应的ssl证书
下载好以后,解压能得到四个文件
这四个文件分别是:
-
ashuai.work.csr
------部署时不需要- csr后缀全称:Certificate Signing Request(证书签名请求)
- 作用:这是我们在申请证书时生成的一个请求文件,包含了我们公钥和域名等信息,提交给 CA(腾讯云)用于签发证书。
-
ashuai.work.key
------部署时需需要
- 全称:Private Key(私钥)
- 作用:这是生成 CSR 时同时产生的私钥,非常关键,必须保密,不能泄露。
-
ashuai.work_bundle.crt
------部署时需需要
- 作用 :这是证书链文件,包含了我们的域名证书 + 中间 CA 证书(有时也包括根证书),用于建立信任链。
-
ashuai.work_bundle.pem
------部署时不需要- 作用 :和
.crt
文件内容基本相同,只是扩展名不同。.pem
是一种通用的证书编码格式(Base64 PEM 编码),很多系统都支持。 - 就是备用的.crt文件
- 作用 :和
在nginx.conf文件同级目录下,新建文件夹存放证书文件
比如,笔者在服务器上的对应目录,新建一个名为cert的文件夹,用于存放证书文件
在nginx.conf写入使用证书的语法
而后,在ngixn.conf文件内,把刚刚的证书文件,引入进来,并做如下配置
nginx
# SSL 配置
ssl_certificate cert/ashuai.work_bundle.crt; # 证书文件路径
ssl_certificate_key cert/ashuai.work.key; # 私钥文件路径
ssl_session_timeout 5m; # 会话超时时间为 5 分钟
ssl_protocols TLSv1.2 TLSv1.3; # 使用的协议
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # HIGH:!aNULL:!MD5; # 加密套件
ssl_prefer_server_ciphers on; # 让服务器优先选择自己支持的加密套件
注意,这里的cert/ashuai.work_bundle.crt; # 证书文件路径
的 cert/xxx.crt
表示同级目录,去找和nginx.conf同级目录的ashuai.work_bundle.crt这个文件
图示:
80端口重定向到443、监听443端口,并禁用ip访问
nginx
# 80端口的请求全部重定向到443端口
server {
listen 80;
server_name ashuai.work;
return 301 https://$host:$server_port$request_uri;
}
#"兜底"配置,用于捕获所有未明确匹配其他server块的HTTPS请求(包括通过IP访问或非法域名)
server {
listen 443 default_server ssl; # ← 核心配置
server_name _;
return 403;
}
server {
listen 443 ssl; # 监听443端口并启用SSL
server_name ashuai.work;
# add_header X-Frame-Options SANEORIGIN;#DENY
# add_header 'Referrer-Policy' 'no-referrer'
add_header 'Referrer-Policy' 'origin';
location / {
......
}
}
把原先的http的请求,转发到https
得通过497的方式,nginx才会把http的请求,转发到https
nginx
http {
include mime.types;
......
# SSL 配置
ssl_certificate cert/ashuai.work_bundle.crt; # 证书文件路径
ssl_certificate_key cert/ashuai.work.key; # 私钥文件路径
ssl_session_timeout 5m; # 会话超时时间为 5 分钟
ssl_protocols TLSv1.2 TLSv1.3; # 使用的协议
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # HIGH:!aNULL:!MD5; # 加密套件
ssl_prefer_server_ciphers on; # 让服务器优先选择自己支持的加密套件
# 引入同级目录下的conf.d文件夹的所有的以.conf结尾的server配置
include conf.d/*.conf;
# 如果访问的是 HTTP,自动返回 497 并重定向到 HTTPS
error_page 497 https://$host:$server_port$request_uri;
}
- 至此,nginx中http升级https知识点总结就讲述完毕
- 创作不易,欢迎各位看官老爷们一键三连,支持鼓励一下 ^_^
A good memory is better than a bad pen. Record it down...