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 重定向到 HTTPS
server {
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 server
server {
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
fi
else
echo "[$DATE] 错误:证书续期失败,返回码: $RENEWAL_STATUS" >> $LOG_FILE
echo "[$DATE] 错误详情: $RENEWAL_OUTPUT" >> $LOG_FILE
fi
echo "[$DATE] 证书续期流程完成" >> $LOG_FILE
echo "----------------------------------------" >> $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.sh
sudo 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 如何升级成 HTTPS
有一个自己的项目需要上线,域名解析完成后,发现只能使用 http 协议,这在浏览器上会限制,提示用户不安全,所以需要把 HTTP 升级成 HTTPS 协议,但又不想花钱。 前提条件: 已经配置好 Nginx 服务器…...

【笔记】Windows 下载并安装 ChromeDriver
以下是 在 Windows 上下载并安装 ChromeDriver 的笔记: ✅ Windows 下载并安装 ChromeDriver 1️⃣ 确认 Chrome 浏览器版本 打开 Chrome 浏览器 点击右上角 ︙ → 帮助 → 关于 Google Chrome 记下版本号,例如:114.0.5735.199 2️⃣ 下载…...

Spark-Core Project
RDD转换算子总结 RDD转换算子分为Value类型、双Value类型和Key - Value类型。 1、Value类型 map:对数据逐条映射转换,可改变数据类型或值。如 dataRDD.map(num > num * 2 运行结果: 2)mapPartitions:以分区为单位处…...
SQL 中的 `CASE WHEN` 如何使用?
✅ SQL 中的 CASE WHEN 如何使用? 一、CASE WHEN 是什么? CASE WHEN 是 SQL 中用于实现 条件判断 的表达式,功能类似于 if-else 或 switch-case,可用于 SELECT、WHERE、ORDER BY 等子句中。 go专栏:https://duoke360.com/tutorial/path/golang 二、语法格式 1. 简单 C…...

Wireshark 使用教程:让抓包不再神秘
一、什么是 tshark? tshark 是 Wireshark 的命令行版本,支持几乎所有 Wireshark 的核心功能。它可以用来: 抓包并保存为 pcap 文件 实时显示数据包信息 提取指定字段进行分析 配合 shell 脚本完成自动化任务 二、安装与验证 Kali Linux…...

JWT安全:接收无签名令牌.【签名算法设置为none绕过验证】
JWT安全:假密钥【签名随便写实现越权绕过.】 JSON Web 令牌 (JWT)是一种在系统之间发送加密签名 JSON 数据的标准化格式。理论上,它们可以包含任何类型的数据,但最常用于在身份验证、会话处理和访问控制机制中发送有关用户的信息(“声明”)。…...
什么算得到?什么又算失去?
目录 **一、什么是“得到”?****二、什么是“失去”?****三、得到与失去的悖论****四、如何超越得失二元论?****五、一个更本质的答案** 关于“得到”与“失去”的界定,本质上是对存在状态和主观认知的辩证思考。这两者并非绝对&a…...

白银价格查询接口如何用Java进行调用?
一、什么是白银价格查询接口? 它聚焦于上海黄金交易所、上海期货交易所等权威市场,精准提供白银价格行情数据,助力用户实时把握市场脉搏,做出明智的投资决策。 二、应用场景 分析软件:金融类平台可以集成本接口&…...

FreeBSD 14.3 候选版本附带 Docker 镜像和关键修复
新的月份已经到来,FreeBSD 14.3 候选发布版 1 现已开放测试,它带来了一些您可能会觉得有用的更新,特别是如果您对Docker容器感兴趣的话。RC1 版本中一个非常受欢迎的改进是,FreeBSD 项目已开始将官方开放容器计划 (OCI) 镜像发布到…...
NodeJS全栈WEB3面试题——P6安全与最佳实践
🔐 6.1 如何防范重放攻击、私钥泄露、钓鱼签名? ✅ 重放攻击(Replay Attack)防范: 引入 nonce:每次登录或交易签名都携带唯一 nonce; 链 ID 检查:在签名中加入特定链 ID࿰…...

「Java教案」算术运算符与表达式
课程目标 1.知识目标 能够区分Java运算符的种类,例如,算术、赋值、关系、逻辑、位运算等。能够区分Java各类运算符的功能和使用场景。能够根据表达式的构成和计算规则,写出正确的表达式。能够根据运算符优先级与结合性ÿ…...
Ubuntu开机黑屏现象的常见解决方案详解
Ubuntu开机黑屏现象的常见解决方案详解 Ubuntu作为一款流行的Linux发行版,因其开源性和灵活性受到广泛欢迎。然而,用户在使用过程中可能会遇到开机黑屏的问题,即系统启动后屏幕完全无显示,仅留下光标闪烁或黑屏界面。这种问题可能…...
黑马程序员C++核心编程笔记--4 类和对象--多态
1.多态的基本概念 多态是C面向对象三大特性之一 多态分为两类 静态多态: 函数重载和运算符重载属于静态多态,复用函数名动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别: -静态多态的函数地址早绑定 - 编译阶段确定函数地址 -动态多…...

论文写作核心要点
不要只读论文里的motivation和method 论文里的图表和统计特征 在论文里找到具有统计意义的东西,那么在语料里也肯定遵循这样的规律,我们就能用机器学习的方法, 我们再用不同方法解决,哪种方法好,就用哪种 实验分析 …...

[java]eclipse中windowbuilder插件在线安装
目录 一、打开eclipse 二、打开插件市场 三、输入windowbuilder,点击install 四、进入安装界面 五、勾选我同意... 重启即可 一、打开eclipse 二、打开插件市场 三、输入windowbuilder,点击install 四、进入安装界面 五、勾选我同意... 重启即可...

Ubuntu20.04服务器开启路由转发让局域网内其他电脑通过该服务器连接外网
要让你的 Ubuntu作为路由器,通过 Wi-Fi 上网,并给连接到 UsbNetwork 的设备提供网络,需要做以下配置: 1. 网络拓扑 [互联网] ← (Wi-Fi, wlo1) → [Ubuntu] ← (USB网络/USB以太网, UsbNetwork) → [设备]Ubuntu: Wi-…...

【Oracle】TCL语言
个人主页:Guiat 归属专栏:Oracle 文章目录 1. TCL概述1.1 什么是TCL?1.2 TCL的核心功能 2. 事务基础概念2.1 事务的ACID特性2.2 事务的生命周期 3. COMMIT语句详解3.1 COMMIT基础语法3.2 自动提交与手动提交3.3 提交性能优化 4. ROLLBACK语句…...

Windows | 总误按Num Lock?修改注册表永久禁用Numlk键使小键盘一直输入数字
先说需修改注册表的位置与键值 路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\ 二进制键:Scancode Map 键值: 00 00 00 00 00 00 00 00 01 00 00 00 00 00 45 00 00 00 00 00 00 00 00 00如下图: …...

2.RV1126-OPENCV Mat理解和AT函数
一.Mat概念 Mat 是整个图像存储的核心也是所有图像处理的最基础的类,Mat 主要存储图像的矩阵类型,包括向量、矩阵、灰度或者彩色图像等等。Mat由两部分组成:矩阵头,矩阵数据。矩阵头是存储图像的长度、宽度、色彩信息等头部信息&a…...
Go 语言 + Word 文档模板:WordZero 引擎如何让企业文档处理效率提升 300%?
前言 在企业级应用开发中,自动化生成Word文档一直是个令人头疼的需求。传统的方案要么依赖于复杂的Office COM组件,要么使用功能有限的第三方库。今天为大家介绍一个纯Go语言实现的Word操作库——WordZero,特别是其强大的模板引擎功能&#…...

unidbg patch 初探 微博deviceId 案例
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程 看了b站迷人瑞信那个由于是…...

循序渐进 Android Binder(一):IPC 基本概念和 AIDL 跨进程通信的简单实例
Binder 给人的第一印象是”捆绑者“,即将两个需要建立关系的事物用某些工具束缚在一起。在 Android 中,Binder 是一种高效的跨进程通信(IPC)机制,它将可以将运行在不同进程中的组件进行绑定,以实现彼此通信…...

网络安全之Web渗透加解密
项目基本使用 准备环境:node.js python chrome npm install chrome-remote-interface pip install playwright playwright install chromium pip install mitmproxy ............... 第一步启动cdp.js。 第二步使用python .\cdp_load.py vue_demo,连…...
Leetcode 3567. Minimum Absolute Difference in Sliding Submatrix
Leetcode 3567. Minimum Absolute Difference in Sliding Submatrix 1. 解题思路2. 代码实现 题目链接:3567. Minimum Absolute Difference in Sliding Submatrix 1. 解题思路 这一题想了一下,没想到啥好的思路,就是暴力直接求解了一下&am…...

【LeetCode 题解】两数之和(C++/Python 双解法):从语法到算法的全面解析
【LeetCode题解】两数之和(C/Python双解法):从语法到算法的全面解析 一、题目描述 题目链接:1. 两数之和 难度:简单 要求:给定一个整数数组 nums 和一个整数目标值 target,在数组中找出两个数…...

【机器学习基础】机器学习入门核心算法:集成学习(Ensemble Learning)
机器学习入门核心算法:集成学习(Ensemble Learning) 1. 算法逻辑核心逻辑: 2. 算法原理与数学推导2.1 Bagging(Bootstrap Aggregating)2.2 Boosting2.3 Stacking 3. 模型评估评估指标基学习器选择策略 4. 应…...

【TMS570LC4357】之相关驱动开发学习记录1
系列文章目录 【TMS570LC4357】之工程创建 【TMS570LC4357】之工程配置修改 【TMS570LC4357】之HALCOGEN使用 【TMS570LC4357】之相关问题及解决 ——————————————————— 前言 记录笔者在第一次使用TMS570过程中对外设驱动的一些学习碎片。 1. RTI 1.1 添…...

RAG入门 - Retriever(1)
文章目录 环境准备知识库加载1. Retriever - embeddings 🗂️1.1 将文档拆分为chunks1.2 词嵌入1.3 构建向量数据库Nearest Neighbor search algorithm (最近邻搜索算法)Distances (距离)点积(Dot Product&…...

pyspark实践
1。pyspark是什么 PySpark 是 Apache Spark 的官方 Python 接口,它使得 Python 开发者能够访问 Spark 的核心功能,如: Spark SQL:用于执行 SQL 查询以及读取数据的库,支持多种数据格式和存储系统。py.qizhen.xyz Data…...
内网怎么映射外网ip? 内网的地址快速映射给外网访问用方法
本文章向大家介绍内网怎么映射外网ip,主要包括如何将内网 IP 端口的网络服务映射到外网使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。内容主要包括路由映射公网IP和无公网IP通过nat123映射…...