图文并茂讲解nginx中http升级https(部署SSL证书)知识点总结

为何网站要升级为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证书

下载好以后,解压能得到四个文件

这四个文件分别是:

  1. ashuai.work.csr ------部署时不需要

    • csr后缀全称:Certificate Signing Request(证书签名请求)
    • 作用:这是我们在申请证书时生成的一个请求文件,包含了我们公钥和域名等信息,提交给 CA(腾讯云)用于签发证书。
  2. ashuai.work.key ------部署时需需要

    • 全称:Private Key(私钥)
    • 作用:这是生成 CSR 时同时产生的私钥,非常关键,必须保密,不能泄露。
  3. ashuai.work_bundle.crt ------部署时需需要

    • 作用 :这是证书链文件,包含了我们的域名证书 + 中间 CA 证书(有时也包括根证书),用于建立信任链。
  4. 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...

相关推荐
平行绳2 小时前
免费证书有效期越来越短了!本文教你设置自动更新证书,超详细!
后端·https
athink_cn16 小时前
HTTP/2新型漏洞“MadeYouReset“曝光:可发动大规模DoS攻击
网络·网络协议·安全·http·网络安全
HYI18 小时前
小公司前端多分支测试太痛苦?我自己写了个轻量 CLI
nginx·vite
芥子沫20 小时前
Jenkins常见问题及解决方法
windows·https·jenkins
timeweaver1 天前
深度解析 Nginx 前端 location 配置与优先级:你真的用对了吗?
前端·nginx·前端工程化
Moment1 天前
nginx 如何配置防止慢速攻击 🤔🤔🤔
前端·后端·nginx
网络研究院1 天前
新的“MadeYouReset”方法利用 HTTP/2 进行隐秘的 DoS 攻击
网络·网络协议·安全·http·攻击·漏洞
玩转以太网2 天前
基于W55MH32Q-EVB 实现 HTTP 服务器配置 OLED 滚动显示信息
服务器·网络协议·http
清源妙木真菌2 天前
应用层协议——HTTP
网络·网络协议·http