Nginx 上安装 SSL 证书并启用 HTTPS 访问
本文将介绍如何在 Nginx 上为你的域名安装 SSL 证书,并配置 Nginx 使用 HTTPS 安全访问。我们将使用 Let’s Encrypt 免费的 SSL 证书,通过 Certbot 生成并管理证书,然后配置 Nginx 实现 HTTPS 加密访问。同时,我们将解决因 SSL 证书导致的代码拉取问题。
一、前置准备
- 服务器:一台运行 Nginx 的服务器(如阿里云、AWS、DigitalOcean 等云服务器)。
- 域名:一个已指向服务器公网 IP 的域名(例如
gitea.example.com)。 - 服务器访问权限:确保你有服务器的 root 权限或 sudo 用户权限。
二、安装 Certbot 和生成 SSL 证书
Certbot 是 Let’s Encrypt 提供的一个工具,用于自动生成和管理 SSL 证书。
1. 安装 Certbot
在基于 Debian/Ubuntu 的系统上,可以使用以下命令安装 Certbot 和 Nginx 插件:
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
2. 使用 Certbot 生成 SSL 证书
Certbot 可以自动为你的域名生成和安装 SSL 证书。运行以下命令:
sudo certbot --nginx -d gitea.example.com
--nginx:告诉 Certbot 自动配置 Nginx。-d:指定需要申请证书的域名。
Certbot 会提示输入邮箱地址并同意服务条款。之后,它将自动生成 SSL 证书并更新 Nginx 配置以启用 HTTPS。
3. 验证证书安装
Certbot 完成后,你可以运行以下命令检查证书:
sudo certbot certificates
这将显示已安装证书的信息。确保域名和证书路径正确无误。
三、配置 Nginx 以启用 HTTPS
Certbot 在生成证书时会自动修改 Nginx 配置,但你可以手动优化和调整配置以满足安全性和性能的需求。以下是一个标准的 HTTPS 配置示例。
1. Nginx 配置文件
假设你的网站配置文件在 /etc/nginx/sites-available/gitea 中。打开该文件进行编辑:
# HTTPS 部分 - 配置反向代理到服务
server {listen 443 ssl http2; # 启用 HTTP/2 支持server_name gitea.example.com;# SSL 配置 - Certbot 自动生成的配置ssl_certificate /etc/letsencrypt/live/gitea.example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/gitea.example.com/privkey.pem;include /etc/letsencrypt/options-ssl-nginx.conf; # Certbot 的自动配置文件ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;# HSTS(HTTP Strict Transport Security)配置add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;# 反向代理设置(代理到本地服务或其他端口)location / {proxy_pass http://127.0.0.1:3000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# 超时设置proxy_connect_timeout 60s;proxy_read_timeout 60s;proxy_send_timeout 60s;}
}# HTTP 重定向到 HTTPS
server {listen 80;server_name gitea.example.com;location / {return 301 https://$host$request_uri;}
}
2. 配置说明
- HTTP 重定向:80 端口的 HTTP 请求将被自动重定向到 HTTPS。
- SSL 证书路径:
ssl_certificate和ssl_certificate_key路径指向 Certbot 生成的证书。 - HSTS 配置:
add_header Strict-Transport-Security可以强制客户端在未来仅通过 HTTPS 访问,防止降级攻击。
3. 检查和重启 Nginx
创建软链接以启用该配置:
sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
检查 Nginx 配置是否正确:
sudo nginx -t
如果一切正常,重新加载 Nginx 配置:
sudo systemctl reload nginx
四、拉取代码时的 SSL 证书问题及解决方案
在启用了 HTTPS 后,Git 客户端可能会因 SSL 证书问题而无法克隆或拉取代码。以下是几种解决方案:
1. 使用 Let’s Encrypt 或其他受信任的证书
如果你还没有使用受信任的 SSL 证书,可以通过 Let’s Encrypt 获取免费证书,这样 Git 客户端将自动信任该证书。
2. 手动信任自签名证书(不推荐生产环境使用)
在 Windows 系统中
-
导出自签名证书:使用以下命令导出 Gitea 服务器上的自签名证书。在 Windows 中使用
<nul替代< /dev/null。openssl s_client -showcerts -connect gitea.example.com:443 <nul | openssl x509 -outform PEM > gitea.crt -
在 Windows 中安装证书:双击
gitea.crt文件,选择“安装证书”,并将其安装到 受信任的根证书颁发机构 中。
在 macOS/Linux 系统中
-
将
.crt文件复制到/usr/local/share/ca-certificates/目录中:sudo cp gitea.crt /usr/local/share/ca-certificates/gitea.crt -
更新系统的 CA 证书:
sudo update-ca-certificates
3. 在 Git 配置中关闭 SSL 验证(仅限测试环境)
在特定项目中关闭 SSL 验证:
git config http.https://gitea.example.com.sslVerify "false"
4. 使用 SSH 连接
如果 Gitea 支持 SSH,可以使用 SSH 协议克隆仓库,避免 SSL 证书问题。
git clone git@gitea.example.com:username/repository.git
五、测试 HTTPS 访问
在浏览器中访问 https://gitea.example.com,确保网站可以通过 HTTPS 正常加载。如果一切配置正确,浏览器地址栏应显示一个锁标志,表示连接已加密。
六、自动续订证书
Let’s Encrypt 证书有效期为 90 天。Certbot 已自动设置续订任务,可以通过以下命令手动测试续订:
sudo certbot renew --dry-run
七、总结
通过 Certbot 和 Nginx 配置 HTTPS 可以显著提高网站的安全性,并且 Let’s Encrypt 提供的免费证书使配置过程简单高效。按以上步骤设置后,你的站点将支持 HTTPS 安全访问,提升用户数据传输的安全性。同时,通过信任自签名证书或使用 SSH 协议,Git 客户端可以顺利地克隆和拉取代码。
相关文章:
Nginx 上安装 SSL 证书并启用 HTTPS 访问
本文将介绍如何在 Nginx 上为你的域名安装 SSL 证书,并配置 Nginx 使用 HTTPS 安全访问。我们将使用 Let’s Encrypt 免费的 SSL 证书,通过 Certbot 生成并管理证书,然后配置 Nginx 实现 HTTPS 加密访问。同时,我们将解决因 SSL 证…...
谷歌Gemini发布iOS版App,live语音聊天免费用!
大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工…...
docker运行ActiveMQ-Artemis
前言 artemis跟以前的ActiveMQ不是一个产品,原ActiveMQ改为ActiveMQ Classic, 现在的artemis是新开发的,和原来不兼容,全称:ActiveMQ Artemis 本位仅介绍单机简单部署使用,仅用于学习和本地测试使用 官网:…...
90.选择排序(理论分析)
一.选择排序 冒泡排序每相邻的俩个元素之间都会比较交换一次,效率比较慢。这对这个问题所改进的算法叫做选择排序。 二.选择排序的实现思路 首先在一组未排序的数据中假定一个最大或者最小元素,一般是第0个元素。然后在从剩余未排序的元素中…...
GitLab 如何跨版本升级?
本分分享 GitLab 跨版本升级的一些注意事项。 众所周知,GitLab 的升级必须要严格遵循升级路径,否则就会出现问题,导致升级失败。因此,在 GitLab 升级之前需要做好两件事情: 当前版本的确认升级路径的确认 极狐GitLa…...
【Fermat】费马小定理
定理 若存在整数 a , p 且g c d ( a , p ) 1 gcd(a,p)1gcd(a,p)1,即二者互为质数,则有 a ( p − 1 ) ≡ 1 ( m o d p ) a^{(p-1)}≡ 1(mod p) a (p−1) ≡1(modp) 目录 定理 引理 引理一 引理二 证…...
NVMe(Non-Volatile Memory Express)非易失性存储器访问和传输协议
目录 NVMe(Non-Volatile Memory Express)非易失性存储器访问和传输协议 一、NVMe的定义 二、NVMe的特点 三、NVMe的应用场景 四、举例说明 NVMe(Non-Volatile Memory Express)非易失性存储器访问和传输协议 是一种非易失性存储器访问和传输协议,专为固态硬盘(SSD)…...
C++初阶——queue
一、什么是queue 是一个容器适配器,专门设计用于在先进先出(FIFO,First In First Out)的上下文中操作。它是一个容器适配器,这意味着它不是一个完整的容器类,而是封装了一个特定的容器类(如list…...
达梦数据库迁移j脚本
国产环境使用达梦数据库的越来越多,除了使用管理工具,还是可以使用脚本。 下面简单记录下,我在迁移中遇到的问题: 备份脚本 使用此脚本可以一次备份一个数据 backup_one_db.sh #!/bin/bashexport DB$1 export PASS<your_p…...
【Linux】内核调用栈打印函数dump_stack使用效果
init/main.c的start_kernel示例,这个调用栈不太深: /var/log/dmesg日志: [ 0.000000] kernel: [init/main.c start_kernel 911] start_kernel(void) [ 0.000000] kernel: [kernel/panic.c print_tainted 519 LOG_TIMES: 1 ] [ 0.…...
Uniapp踩坑input自动获取焦点ref动态获取实例不可用
前言 大家好我是没钱的君子下流坯,用自己的话解释自己的知识。很久很更新了,这几个月一直在加班,今天记录一个uniapp关于input中focus()方法自动获取焦点的坑。 案例 为了实现一个手机验证码的页面,验证码是五个输入框…...
数据分析-47-时间序列变点检测之离线历史数据的CPD
文章目录 1 时间序列结构1.1 变化点的定义1.2 结构变化的类型1.2.1 水平变化1.2.2 方差变化1.3 变点检测1.3.1 离线数据检测方法1.3.2 实时数据检测方法2 模拟数据2.1 模拟恒定方差数据2.2 模拟变化方差数据3 离线数据变点检测3.1 Ruptures模块3.2 恒定方差CPD3.3 变化方差CPD4…...
加入GitHub Spark需要申请
目录 加入GitHub Spark需要申请 GitHub Spark 一、产品定位与特点 二、核心组件与功能 三、支持的AI模型 四、应用场景与示例 五、未来展望 六、申请体验 加入GitHub Spark需要申请 GitHub Spark 是微软旗下GitHub在2024年10月30日的GitHub Universe大会上推出的一款革…...
生成式GPT商品推荐:精准满足用户需求
生成式GPT商品推荐:精准满足用户需求 随着人工智能(AI)技术的飞速发展,电商平台正在逐步迎来一场前所未有的变革。尤其是生成式GPT(Generative Pre-trained Transformer)技术的应用,正在重新定…...
async 和 await的使用
一、需求 点击按钮处理重复提交,想要通过disabled的方式实现。 但是点击按钮调用的方法里有ajax、跳转、弹窗等一系列逻辑操作,需要等方法里流程都走完,再把disabled设为false,这样下次点击按钮时就可以继续走方法里的ajax等操作…...
Spring Cloud Vault快速入门Demo
1.什么是Spring Cloud Vault? Spring Cloud Vault 是 Spring Cloud 生态系统中的一个项目,旨在简化 Spring 应用程序与 HashiCorp Vault 的集成。它提供了一种方便的方式来管理和访问应用程序的敏感配置数据,如数据库凭证、API 密钥和其他机…...
道陟科技EMB产品开发进展与标准设计的建议|2024电动汽车智能底盘大会
11月12日,2024电动汽车智能底盘大会在重庆开幕。会议由中国汽车工程学会主办,电动汽车产业技术创新战略联盟、中国汽车工程学会智能底盘分会、智能绿色车辆与交通全国重点实验室承办。本届大会围绕电动汽车智能底盘相关技术发展与融合,满足高…...
GitHub Org
运营一个GitHub Org(组织)是一个复杂但充满价值的过程,它涉及多个方面,包括项目管理、团队协作、代码审查、文档维护、社区建设等。以下是一篇关于如何运营GitHub Org的详细指南,旨在帮助组织者更好地管理和维护其GitH…...
unity小:shaderGraph不规则涟漪、波纹效果
实现概述 在本项目中,我们通过结合 Sine、Polar Coordinates 和 Time 节点,实现了动态波纹效果。以下是实现细节: 核心实现 Sine 波形生成: 使用 Sine 节点生成基本的波形。该节点能够创建周期性变化,为波纹效果提供…...
【JavaScript】JavaScript开篇基础(6)
1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
