HTTP 如何升级成 HTTPS

有一个自己的项目需要上线,域名解析完成后,发现只能使用 http 协议,这在浏览器上会限制,提示用户不安全,所以需要把 HTTP 升级成 HTTPS 协议,但又不想花钱。

前提条件:

  • 已经配置好 Nginx 服务器

  • 域名已解析到您的服务器 IP

  • 已开放 80 和 443 端口(可在阿里云控制台的安全组设置中配置)

获取证书

我们先获取证书,我使用的是「Let's Encrypt」,这是一家为6亿多个网站提供免费 TLS 证书的非营利组织。

Let's Encrypt 提供免费的证书,有效期为 90 天,可以自动续期。

安装证书

我们需要先安装 Certbot 和 Nginx 插件:

# 安装 EPEL 仓库sudo yum install epel-release -y# 安装 Certbot 和 Nginx 插件sudo yum install certbot python3-certbot-nginx -y

获取,然后安装证书

sudo certbot --nginx -d your-domain.com
  • 在操作过程中,Certbot 会询问几个问题:

  • 输入您的邮箱地址(用于紧急续期通知和安全公告)

  • 同意服务条款

  • 是否愿意共享邮箱(可选)

  • 是否希望将所有 HTTP 流量重定向到 HTTPS(建议选择 2,完全重定向)

配置 Nginx

提供一个 AI 反馈的 Nginx 配置:​​​

server {    listen 443 ssl;    server_name example.com www.example.com;    ssl_certificate /path/to/your/certificate.crt;    ssl_certificate_key /path/to/your/private.key;    # 其他 SSL 配置    ssl_protocols TLSv1.2 TLSv1.3;    ssl_prefer_server_ciphers on;    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;    # 网站根目录等配置    root /var/www/html;    index index.html;    # 其他配置...}# HTTP 重定向到 HTTPSserver {    listen 80;    server_name example.com www.example.com;    return 301 https://$host$request_uri;}

另外提供一个 Apache 的配置​​​​​​​

<VirtualHost *:443>    ServerName example.com    ServerAlias www.example.com    SSLEngine on    SSLCertificateFile /path/to/your/certificate.crt    SSLCertificateKeyFile /path/to/your/private.key    # 其他配置    DocumentRoot /var/www/html    # 其他设置...</VirtualHost># HTTP 重定向到 HTTPS<VirtualHost *:80>    ServerName example.com    ServerAlias www.example.com    Redirect permanent / <https://example.com/></VirtualHost>

检查 Nginx 配置

配置好以后,您可以检查 Nginx 的配置,

sudo cat /etc/nginx/conf.d/your-config-file.conf

我服务器上 Nginx 的内容如下:​​​​​​​

server {    listen       80;    listen       [::]:80;    server_name  your-domain.com;    # 添加网站根目录    root /usr/share/nginx/your-domain;    # 为 Let's Encrypt 验证添加特殊处理    location /.well-known/acme-challenge/ {            allow all;    }    # 其他请求继续重定向到 HTTPS    location / {            return 301 https://$server_name$request_uri;    }}# HTTPS serverserver {    listen       443 ssl http2;    listen       [::]:443 ssl http2;    server_name  your-domain.com;    client_max_body_size 50M;    # 下载优化    proxy_buffer_size 128k;                   # 代理响应的缓冲区大小    proxy_buffers 4 256k;                     # 缓冲区数量和大小    proxy_busy_buffers_size 256k;             # 繁忙时缓冲区大小    proxy_temp_file_write_size 256k;          # 临时文件写入大小    # 开启 gzip 压缩    gzip on;    gzip_min_length 1k;    gzip_comp_level 6;    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;    # 修改证书路径为 Let's Encrypt 的证书路径    ssl_certificate     /etc/letsencrypt/live/your-domain.com/fullchain.pem;    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;    ssl_session_cache shared:SSL:1m;    ssl_session_timeout  10m;    ssl_ciphers PROFILE=SYSTEM;    ssl_prefer_server_ciphers on;    # 添加反向代理配置    location / {        proxy_pass <http://localhost:3100>;        proxy_http_version 1.1;        proxy_set_header Upgrade $http_upgrade;        proxy_set_header Connection 'upgrade';        proxy_set_header Host $host;        proxy_cache_bypass $http_upgrade;    }    # Load configuration files for the default server block.    include /etc/nginx/default.d/*.conf;    error_page 404 /404.html;        location = /40x.html {    }    error_page 500 502 503 504 /50x.html;        location = /50x.html {    }}

自动续期脚本

如果到期怎么办?

我们可以设置自动续期的脚本:

确认当前状态​​​​​​​

# 检查 Certbot 版本certbot --version# 查看当前证书信息sudo certbot certificates

测试续期功能

# 执行干运行测试,不实际更新证书sudo certbot renew --dry-run

创建脚本

sudo nano /usr/local/bin/renew-letsencrypt.sh

添加内容:​​​​​​​

#!/bin/bash# 日志文件LOG_FILE="/var/log/letsencrypt-renewal.log"DATE=$(date "+%Y-%m-%d %H:%M:%S")# 记录开始信息echo "[$DATE] 开始证书续期检查..." >> $LOG_FILE# 执行续期操作并记录输出RENEWAL_OUTPUT=$(certbot renew --quiet 2>&1)RENEWAL_STATUS=$?# 检查续期状态if [ $RENEWAL_STATUS -eq 0 ]; then    echo "[$DATE] 证书检查/续期成功" >> $LOG_FILE    # 检查是否有证书被实际更新    if echo "$RENEWAL_OUTPUT" | grep -q "renewal"; then        echo "[$DATE] 检测到证书已更新,重新加载 Nginx" >> $LOG_FILE        systemctl reload nginx        NGINX_STATUS=$?        if [ $NGINX_STATUS -eq 0 ]; then            echo "[$DATE] Nginx 重新加载成功" >> $LOG_FILE        else            echo "[$DATE] 错误:Nginx 重新加载失败,返回码: $NGINX_STATUS" >> $LOG_FILE        fi    else        echo "[$DATE] 没有证书需要更新" >> $LOG_FILE    fielse    echo "[$DATE] 错误:证书续期失败,返回码: $RENEWAL_STATUS" >> $LOG_FILE    echo "[$DATE] 错误详情: $RENEWAL_OUTPUT" >> $LOG_FILEfiecho "[$DATE] 证书续期流程完成" >> $LOG_FILEecho "----------------------------------------" >> $LOG_FILE

设置执行权限

sudo chmod +x /usr/local/bin/renew-letsencrypt.sh

创建任务

sudo crontab -e

添加以下内容:​​​​​​​

# 每天凌晨 2:15 和下午 2:15 运行证书续期15 2,14 * * * /usr/local/bin/renew-letsencrypt.sh

验证任务设置

sudo crontab -l

设置每周运行一次​​​​​​​

sudo chmod +x /usr/local/bin/renew-letsencrypt.shsudo crontab -e

每周检查一次​​​​​​​

# 每周一上午9点检查证书状态0 9 * * 1 /usr/local/bin/renew-letsencrypt.sh

手动续签脚本​​​​​​​

# 执行脚本sudo /usr/local/bin/renew-letsencrypt.sh# 检查文件输出sudo tail -f /var/log/letsencrypt-renewal.log

查看证书信息

sudo certbot certificates

会显示出「已安装证书的域名、存储位置、到期日期、续期设置」证书有效期

比如:从 2025-04-21 到 2025-07-20(共 90 天,符合 Let's Encrypt 标准)。

Certbot 会在到期前 30 天(即 2025-06-20 左右)自动尝试续期(你之前的 -dry-run 测试已确认续期配置正常)。

无需手动操作,除非续期失败。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试面试题总结一

目录 列表、元组、字典的区别 nvicat连接出现问题如何排查 mysql性能调优 python连接mysql数据库方法 参数化 pytest.mark.parametrize 装饰器 list1 [1,7,4,5,5,6] for i in range(len(list1): assert list1[i] < list1[i1] 这段程序有问题嘛&#xff1f; pytest.i…

[蓝桥杯]密文搜索

密文搜索 题目描述 福尔摩斯从 X 星收到一份资料&#xff0c;全部是小写字母组成。 他的助手提供了另一份资料&#xff1a;许多长度为 8 的密码列表。 福尔摩斯发现&#xff0c;这些密码是被打乱后隐藏在先前那份资料中的。 请你编写一个程序&#xff0c;从第一份资料中搜…

打卡第36天:模型可视化以及推理

知识点回顾&#xff1a; 1.三种不同的模型可视化方法&#xff1a;推荐torchinfo打印summary权重分布可视化 2.进度条功能&#xff1a;手动和自动写法&#xff0c;让打印结果更加美观 3.推理的写法&#xff1a;评估模式 作业&#xff1a;调整模型定义时的超参数&#xff0c;对…

8天Python从入门到精通【itheima】-68(元组)

目录 65节——元组的定义和操作 1.学习目标 2.为什么要学习元组 3.元组的定义 4.定义元组的注意事项 5.元组的嵌套 6.元组的相关操作 【1】index方法 【2】count方法 【3】len方法 7.元组的遍历 【1】while循环进行元组的遍历 【2】for循环进行元组的变量 Python …

链表题解——环形链表【LeetCode】

141. 环形链表 方法一 核心思想&#xff1a; 使用一个集合 seen 来记录已经访问过的节点。遍历链表&#xff0c;如果当前节点已经存在于集合中&#xff0c;说明链表存在环&#xff1b;否则&#xff0c;将当前节点添加到集合中&#xff0c;继续遍历。如果遍历结束&#xff08;h…

【免费数据】1980-2022年中国2384个站点的水质数据

水&#xff0c;是生命之源&#xff0c;关乎着地球上每一个生物的生存与发展。健康的水生生态系统维持着整个水生态的平衡与活力&#xff1b;更是确保人类能持续获得清洁水源的重要保障。水质数据在水质研究、海洋生物量测算以及生物多样性评估等诸多关键领域都扮演着举足轻重的…

分享推荐高精度磁阻式磁编码器芯片

磁编码器其通过感应旋转磁场来实现角度、转速的测量&#xff0c;因此&#xff0c;相较于传统的光编码器&#xff0c;磁编码器对粉尘、污垢和油脂等污染物有很强的耐受性&#xff0c;即使在较为恶劣的环境中仍能够保持高分辨率与检测精度&#xff0c;安装和维护简捷方便&#xf…

Spring AI 项目实战(四):Spring Boot + AI + DeepSeek 超参数优化——智能化机器学习平台(附完整源码)

系列文章 序号文章名称1Spring AI 项目实战&#xff08;一&#xff09;&#xff1a;Spring AI 核心模块入门2Spring AI 项目实战&#xff08;二&#xff09;&#xff1a;Spring Boot AI DeepSeek 深度实战&#xff08;附完整源码&#xff09;3Spring AI 项目实战&#xff08…

高效VLM:VisionZip

论文&#xff1a;[2412.04467] VisionZip: Longer is Better but Not Necessary in Vision Language Models github&#xff1a;https://github.com/dvlab-research/VisionZip LLaVA论文&#xff1a;https://arxiv.org/abs/2310.03744 LLaVA仓库&#xff1a;https://github.…

华为设备OSPF配置与实战指南

一、基础配置架构 sysname HUAWEI-ABR ospf 100 router-id 1.1.1.1area 0.0.0.0network 10.1.1.0 0.0.0.255 # 将接口加入区域0 interface GigabitEthernet0/0/1ospf enable 100 area 0.0.0.0 # 华为支持点分十进制区域号bandwidth-reference 10000 # 设置10Gbps参考带宽…

区块链架构深度解析:从 Genesis Block 到 Layer 2

# 区块链架构深度解析&#xff1a;从 Genesis Block 到 Layer 2 目录 一、Genesis Block&#xff1a;区块链的起点 二、Layer 0&#xff1a;区块链的底层网络架构 三、Layer 1&#xff1a;核心协议层 &#x1f680; 四、Layer 2&#xff1a;扩展性解决方案 五、未来展望&a…

【位运算】丢失的数字(easy)

34. 丢失的数字&#xff08;easy&#xff09; 题⽬描述&#xff1a;方法一&#xff1a;排序解法&#xff08;位运算&#xff09;&#xff1a;C 算法代码&#xff1a;Java 算法代码&#xff1a; 题⽬链接&#xff1a; 268. 丢失的数字 题⽬描述&#xff1a; 给定⼀个包含 [0, n…

如何通过RL真正提升大模型的推理能力?NVIDIA提出长期强化学习训练框架ProRL

原文&#xff1a;https://mp.weixin.qq.com/s/QLFKvb8Ol3CX9uWKBXSrow 论文&#xff1a;ProRL: Prolonged Reinforcement Learning Expands Reasoning Boundaries in Large Language Models Abs&#xff1a;https://arxiv.org/abs/2505.24864 权重下载&#xff1a;https://hugg…

ORM 框架的优缺点分析

ORM 框架的优缺点分析 一、ORM 框架概述 ORM(Object-Relational Mapping)是一种将关系型数据库与面向对象编程进行映射的技术框架。它通过将数据库表映射为编程语言中的类,将记录映射为对象,将字段映射为属性,实现了用面向对象的方式操作数据库。 核心价值:ORM 在数据库和…

1. 数据库基础

1.1 什么是数据库 ⭐ mysql 本质是一种网络服务, 是基于 C(mysql) S(mysqld)的 网络服务. 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库&#xff1f;文件保存数据存在以下缺点&#xff1a; 文件的安全性问题。文件不利于数据查询和管理。文件不利于存储海量数据。…

go语言学习 第5章:函数

第5章&#xff1a;函数 函数是编程中不可或缺的一部分&#xff0c;它封装了一段可重复使用的代码&#xff0c;用于执行特定的任务。在Go语言中&#xff0c;函数同样扮演着重要的角色。本章将详细介绍Go语言中函数的定义、调用、参数传递、返回值处理以及一些高级特性&#xff…

MapReduce 分布式计算模型

what&#xff1a;分解大数据集&#xff0c;并行处理&#xff0c;汇总结果&#xff08;分解组合思想&#xff09; 目的&#xff1a;SQL查询转换为MR&#xff0c;理解MR更好优化SQL 优点&#xff1a; 只需关注业务逻辑&#xff08;自定义函数map&#xff0c;reduce&#xff09…

RDMA简介3之四种子协议对比

RDMA协议共有四种子协议&#xff0c;分别为InfiniBand、iWARP、RoCE v1和RoCE v2协议。这四种协议使用统一的RDMA API&#xff0c;但在具体的网络层级实现上有所不同&#xff0c;如图1所示&#xff0c;接下来将分别介绍这四种子协议。 图1 RDMA四种子协议网络层级关系图 Infin…

LabelImg: 开源图像标注工具指南

LabelImg: 开源图像标注工具指南 1. 简介 LabelImg 是一个图形化的图像标注工具&#xff0c;使用 Python 和 Qt 开发。它是目标检测任务中最常用的标注工具之一&#xff0c;支持 PASCAL VOC 和 YOLO 格式的标注输出。该工具开源、免费&#xff0c;并且跨平台支持 Windows、Lin…

系统架构设计论文

disstertation 软考高级-系统架构设计师-论文&#xff1a;论文范围&#xff08;十大知识领域&#xff09;、历年论题、预测论题及论述过程、论文要点、论文模板等。 —— 2025 年 4 月 4 日 甲辰年三月初七 清明 目录 disstertation1、论文范围&#xff08;十大核心领域&#x…