记录网站由http改为https的历程

网站现状

网站前端为vue的架构,实现了一个价格测算的平台,用户需要登录后访问,网站的发布为nginx,采用前后端分离架构,后台为django,Django只负责解决路由和视图等基本功能,不涉及任何django逻辑的界面,后端的服务由uwsgi启动。

我采用的是阿里云服务器,ubuntu 2404,1c2g,跑一个普通的后台完全没有压力,今天看了下续费,5年只要980,简直不要太爽,对于流量小的网站来说非常的合适,有图为证

在这里插入图片描述

安装申请证书的包

之前对申请证书这个事尝试过,但是由于过程比较复杂,往往在某个环节就卡壳了,这次是借着大数据的能力,一次行跑完了整个流程,特此记录。

申请证书的过程在ubuntu上并不复杂,

sudo apt update && sudo apt upgrade -y // 更新系统包
sudo apt install certbot python3-certbot-nginx -y //安装 Certbot 和 Nginx 插件
certbot --version //查看是否安装成功

获取证书

这时需要注意一些系统的准备工作,

  • 使用nginx部署且已经上线的应用;
  • 域名需已经解析到当前服务器的IP地址;
    如果还在开发阶段,或者是未上线,用这个方法是行不通的,因为certbot的工作逻辑是到拿你申请的信息到网站上作比对,如果比对错误,比如这个域名指定的IP地址不是当前的地址,则会报错,申请失败。
  • 检查nginx配置

nginx -v //检查nginx的配置
server {
listen 80;
server_name abc.example.com; # 替换为你的域名
root /path/to/your/web/root; # 替换为你的网站根目录
index index.html;
}配置里需要明确写需要申请的域名,如果申请的是主网站,则为 www.example.com,如果是子网站则为abc.example.com,大模型给我的示例写了两个,申请自然没成功,我就在这饶了半天。

  • 申请证书

sudo certbot --nginx -d abc.example.com
如果nginx安装的位置是在 /etc/nginx/ 则应该就成功了,我的位置是在/usr/local/nginx则需要
sudo ln -sf /usr/local/nginx/sbin/nginx /usr/sbin/nginx
我是做了这个软连接,就成功了,如果不成功各位再尝试
另外如果不是默认的安装位置,申请的时候还需要带上–nginx-server-root参数
sudo certbot --nginx abc.example.com --nginx-server-root /usr/local/nginx/conf
我是用这个命令就搞定了

  • 查看 nginx.conf 就可以看到已经被改为支持 https了

server {
listen 80;
server_name example.com www.example.com;
return 301 https:// h o s t host hostrequest_uri; # 重定向 HTTP 到 HTTPS
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
root /path/to/your/web/root;
index index.html;
}

证书自动续期

前面证书安装成功了,这个命令就是一行代码的事,及其轻松

sudo systemctl list-timers certbot.timer

在这里插入图片描述
显示这个信息应该就可以了

  • 测试自动续期

sudo certbot renew --dry-run --nginx-server-root /usr/local/nginx/conf
在这里插入图片描述
这样应该是自动需求就通过了

跳坑

  • nginx安装位置不对

certbot 支持的默认nginx安装位置为

  • 阿里云开端口

阿里云服务器有安全组设置,需要在里面开通443端口才可以访问。

  • 前端程序改地址

我的前端VUE程序是按照IP地址定位的,当改为https后,相当于https调用不安全的IP地址了,所以这个地方要改为新的 https的地址,后面要加上/ ,如我的配置
接口请求地址,会设置到 axios 的 baseURL 参数上
VITE_APP_API_BASEURL = https://abc.example.com/

  • 后端增加跨域许可,我的后端为django,默认有cros的安全要求,增加进去

设置允许跨域请求的来源
CORS_ORIGIN_WHITELIST = [
‘http://localhost:9000’, # 允许来自 localhost:9000 的请求
‘http://127.0.0.1:9000’, # 可以同时指定 http 和 https 协议
‘https://abc.example.com’,
]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值