当前位置: 首页 > article >正文

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 如何升级成 HTTPS

有一个自己的项目需要上线&#xff0c;域名解析完成后&#xff0c;发现只能使用 http 协议&#xff0c;这在浏览器上会限制&#xff0c;提示用户不安全&#xff0c;所以需要把 HTTP 升级成 HTTPS 协议&#xff0c;但又不想花钱。 前提条件&#xff1a; 已经配置好 Nginx 服务器…...

【笔记】Windows 下载并安装 ChromeDriver

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

Spark-Core Project

RDD转换算子总结 RDD转换算子分为Value类型、双Value类型和Key - Value类型。 1、Value类型 map&#xff1a;对数据逐条映射转换&#xff0c;可改变数据类型或值。如 dataRDD.map(num > num * 2 运行结果&#xff1a; 2&#xff09;mapPartitions&#xff1a;以分区为单位处…...

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&#xff1f; tshark 是 Wireshark 的命令行版本&#xff0c;支持几乎所有 Wireshark 的核心功能。它可以用来&#xff1a; 抓包并保存为 pcap 文件 实时显示数据包信息 提取指定字段进行分析 配合 shell 脚本完成自动化任务 二、安装与验证 Kali Linux…...

JWT安全:接收无签名令牌.【签名算法设置为none绕过验证】

JWT安全&#xff1a;假密钥【签名随便写实现越权绕过.】 JSON Web 令牌 (JWT)是一种在系统之间发送加密签名 JSON 数据的标准化格式。理论上&#xff0c;它们可以包含任何类型的数据&#xff0c;但最常用于在身份验证、会话处理和访问控制机制中发送有关用户的信息(“声明”)。…...

什么算得到?什么又算失去?

目录 **一、什么是“得到”&#xff1f;****二、什么是“失去”&#xff1f;****三、得到与失去的悖论****四、如何超越得失二元论&#xff1f;****五、一个更本质的答案** 关于“得到”与“失去”的界定&#xff0c;本质上是对存在状态和主观认知的辩证思考。这两者并非绝对&a…...

白银价格查询接口如何用Java进行调用?

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

FreeBSD 14.3 候选版本附带 Docker 镜像和关键修复

新的月份已经到来&#xff0c;FreeBSD 14.3 候选发布版 1 现已开放测试&#xff0c;它带来了一些您可能会觉得有用的更新&#xff0c;特别是如果您对Docker容器感兴趣的话。RC1 版本中一个非常受欢迎的改进是&#xff0c;FreeBSD 项目已开始将官方开放容器计划 (OCI) 镜像发布到…...

NodeJS全栈WEB3面试题——P6安全与最佳实践

&#x1f510; 6.1 如何防范重放攻击、私钥泄露、钓鱼签名&#xff1f; ✅ 重放攻击&#xff08;Replay Attack&#xff09;防范&#xff1a; 引入 nonce&#xff1a;每次登录或交易签名都携带唯一 nonce&#xff1b; 链 ID 检查&#xff1a;在签名中加入特定链 ID&#xff0…...

「Java教案」算术运算符与表达式

课程目标 1&#xff0e;知识目标 能够区分Java运算符的种类&#xff0c;例如&#xff0c;算术、赋值、关系、逻辑、位运算等。能够区分Java各类运算符的功能和使用场景。能够根据表达式的构成和计算规则&#xff0c;写出正确的表达式。能够根据运算符优先级与结合性&#xff…...

Ubuntu开机黑屏现象的常见解决方案详解

Ubuntu开机黑屏现象的常见解决方案详解 Ubuntu作为一款流行的Linux发行版&#xff0c;因其开源性和灵活性受到广泛欢迎。然而&#xff0c;用户在使用过程中可能会遇到开机黑屏的问题&#xff0c;即系统启动后屏幕完全无显示&#xff0c;仅留下光标闪烁或黑屏界面。这种问题可能…...

黑马程序员C++核心编程笔记--4 类和对象--多态

1.多态的基本概念 多态是C面向对象三大特性之一 多态分为两类 静态多态: 函数重载和运算符重载属于静态多态&#xff0c;复用函数名动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别&#xff1a; -静态多态的函数地址早绑定 - 编译阶段确定函数地址 -动态多…...

论文写作核心要点

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

[java]eclipse中windowbuilder插件在线安装

目录 一、打开eclipse 二、打开插件市场 三、输入windowbuilder&#xff0c;点击install 四、进入安装界面 五、勾选我同意... 重启即可 一、打开eclipse 二、打开插件市场 三、输入windowbuilder&#xff0c;点击install 四、进入安装界面 五、勾选我同意... 重启即可...

Ubuntu20.04服务器开启路由转发让局域网内其他电脑通过该服务器连接外网

要让你的 Ubuntu作为路由器&#xff0c;通过 Wi-Fi 上网&#xff0c;并给连接到 UsbNetwork 的设备提供网络&#xff0c;需要做以下配置&#xff1a; 1. 网络拓扑 [互联网] ← (Wi-Fi, wlo1) → [Ubuntu] ← (USB网络/USB以太网, UsbNetwork) → [设备]Ubuntu&#xff1a; Wi-…...

【Oracle】TCL语言

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

Windows | 总误按Num Lock?修改注册表永久禁用Numlk键使小键盘一直输入数字

先说需修改注册表的位置与键值 路径&#xff1a;HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\ 二进制键&#xff1a;Scancode Map 键值&#xff1a; 00 00 00 00 00 00 00 00 01 00 00 00 00 00 45 00 00 00 00 00 00 00 00 00如下图&#xff1a; …...

2.RV1126-OPENCV Mat理解和AT函数

一.Mat概念 Mat 是整个图像存储的核心也是所有图像处理的最基础的类&#xff0c;Mat 主要存储图像的矩阵类型&#xff0c;包括向量、矩阵、灰度或者彩色图像等等。Mat由两部分组成&#xff1a;矩阵头&#xff0c;矩阵数据。矩阵头是存储图像的长度、宽度、色彩信息等头部信息&a…...

Go 语言 + Word 文档模板:WordZero 引擎如何让企业文档处理效率提升 300%?

前言 在企业级应用开发中&#xff0c;自动化生成Word文档一直是个令人头疼的需求。传统的方案要么依赖于复杂的Office COM组件&#xff0c;要么使用功能有限的第三方库。今天为大家介绍一个纯Go语言实现的Word操作库——WordZero&#xff0c;特别是其强大的模板引擎功能&#…...

unidbg patch 初探 微博deviceId 案例

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

循序渐进 Android Binder(一):IPC 基本概念和 AIDL 跨进程通信的简单实例

Binder 给人的第一印象是”捆绑者“&#xff0c;即将两个需要建立关系的事物用某些工具束缚在一起。在 Android 中&#xff0c;Binder 是一种高效的跨进程通信&#xff08;IPC&#xff09;机制&#xff0c;它将可以将运行在不同进程中的组件进行绑定&#xff0c;以实现彼此通信…...

网络安全之Web渗透加解密

项目基本使用 准备环境&#xff1a;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&#xff0c;连…...

Leetcode 3567. Minimum Absolute Difference in Sliding Submatrix

Leetcode 3567. Minimum Absolute Difference in Sliding Submatrix 1. 解题思路2. 代码实现 题目链接&#xff1a;3567. Minimum Absolute Difference in Sliding Submatrix 1. 解题思路 这一题想了一下&#xff0c;没想到啥好的思路&#xff0c;就是暴力直接求解了一下&am…...

【LeetCode 题解】两数之和(C++/Python 双解法):从语法到算法的全面解析

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

【机器学习基础】机器学习入门核心算法:集成学习(Ensemble Learning)

机器学习入门核心算法&#xff1a;集成学习&#xff08;Ensemble Learning&#xff09; 1. 算法逻辑核心逻辑&#xff1a; 2. 算法原理与数学推导2.1 Bagging&#xff08;Bootstrap Aggregating&#xff09;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 &#x1f5c2;️1.1 将文档拆分为chunks1.2 词嵌入1.3 构建向量数据库Nearest Neighbor search algorithm &#xff08;最近邻搜索算法&#xff09;Distances &#xff08;距离&#xff09;点积&#xff08;Dot Product&…...

pyspark实践

1。pyspark是什么 PySpark 是 Apache Spark 的官方 Python 接口&#xff0c;它使得 Python 开发者能够访问 Spark 的核心功能&#xff0c;如&#xff1a; Spark SQL&#xff1a;用于执行 SQL 查询以及读取数据的库&#xff0c;支持多种数据格式和存储系统。py.qizhen.xyz Data…...

内网怎么映射外网ip? 内网的地址快速映射给外网访问用方法

本文章向大家介绍内网怎么映射外网ip&#xff0c;主要包括如何将内网 IP 端口的网络服务映射到外网使用实例、应用技巧、基本知识点总结和需要注意事项&#xff0c;具有一定的参考价值&#xff0c;需要的朋友可以参考一下。内容主要包括路由映射公网IP和无公网IP通过nat123映射…...