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

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_certificatessl_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 系统中
  1. 导出自签名证书:使用以下命令导出 Gitea 服务器上的自签名证书。在 Windows 中使用 <nul 替代 < /dev/null

    openssl s_client -showcerts -connect gitea.example.com:443 <nul | openssl x509 -outform PEM > gitea.crt
    
  2. 在 Windows 中安装证书:双击 gitea.crt 文件,选择“安装证书”,并将其安装到 受信任的根证书颁发机构 中。

在 macOS/Linux 系统中
  1. .crt 文件复制到 /usr/local/share/ca-certificates/ 目录中:

    sudo cp gitea.crt /usr/local/share/ca-certificates/gitea.crt
    
  2. 更新系统的 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 证书&#xff0c;并配置 Nginx 使用 HTTPS 安全访问。我们将使用 Let’s Encrypt 免费的 SSL 证书&#xff0c;通过 Certbot 生成并管理证书&#xff0c;然后配置 Nginx 实现 HTTPS 加密访问。同时&#xff0c;我们将解决因 SSL 证…...

谷歌Gemini发布iOS版App,live语音聊天免费用!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…...

docker运行ActiveMQ-Artemis

前言 artemis跟以前的ActiveMQ不是一个产品&#xff0c;原ActiveMQ改为ActiveMQ Classic, 现在的artemis是新开发的&#xff0c;和原来不兼容&#xff0c;全称&#xff1a;ActiveMQ Artemis 本位仅介绍单机简单部署使用&#xff0c;仅用于学习和本地测试使用 官网&#xff1a;…...

90.选择排序(理论分析)

一.选择排序 冒泡排序每相邻的俩个元素之间都会比较交换一次&#xff0c;效率比较慢。这对这个问题所改进的算法叫做选择排序。 二&#xff0e;选择排序的实现思路 首先在一组未排序的数据中假定一个最大或者最小元素&#xff0c;一般是第0个元素。然后在从剩余未排序的元素中…...

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知&#xff0c;GitLab 的升级必须要严格遵循升级路径&#xff0c;否则就会出现问题&#xff0c;导致升级失败。因此&#xff0c;在 GitLab 升级之前需要做好两件事情&#xff1a; 当前版本的确认升级路径的确认 极狐GitLa…...

【Fermat】费马小定理

定理 若存在整数 a &#xff0c; p 且g c d ( a &#xff0c; p ) 1 gcd(a&#xff0c;p)1gcd(a&#xff0c;p)1&#xff0c;即二者互为质数&#xff0c;则有 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 是一个容器适配器&#xff0c;专门设计用于在先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的上下文中操作。它是一个容器适配器&#xff0c;这意味着它不是一个完整的容器类&#xff0c;而是封装了一个特定的容器类&#xff08;如list…...

达梦数据库迁移j脚本

国产环境使用达梦数据库的越来越多&#xff0c;除了使用管理工具&#xff0c;还是可以使用脚本。 下面简单记录下&#xff0c;我在迁移中遇到的问题&#xff1a; 备份脚本 使用此脚本可以一次备份一个数据 backup_one_db.sh #!/bin/bashexport DB$1 export PASS<your_p…...

【Linux】内核调用栈打印函数dump_stack使用效果

init/main.c的start_kernel示例&#xff0c;这个调用栈不太深&#xff1a; /var/log/dmesg日志&#xff1a; [ 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动态获取实例不可用

前言 大家好我是没钱的君子下流坯&#xff0c;用自己的话解释自己的知识。很久很更新了&#xff0c;这几个月一直在加班&#xff0c;今天记录一个uniapp关于input中focus()方法自动获取焦点的坑。 案例 为了实现一个手机验证码的页面&#xff0c;验证码是五个输入框&#xf…...

数据分析-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商品推荐&#xff1a;精准满足用户需求 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;电商平台正在逐步迎来一场前所未有的变革。尤其是生成式GPT&#xff08;Generative Pre-trained Transformer&#xff09;技术的应用&#xff0c;正在重新定…...

async 和 await的使用

一、需求 点击按钮处理重复提交&#xff0c;想要通过disabled的方式实现。 但是点击按钮调用的方法里有ajax、跳转、弹窗等一系列逻辑操作&#xff0c;需要等方法里流程都走完&#xff0c;再把disabled设为false&#xff0c;这样下次点击按钮时就可以继续走方法里的ajax等操作…...

Spring Cloud Vault快速入门Demo

1.什么是Spring Cloud Vault&#xff1f; Spring Cloud Vault 是 Spring Cloud 生态系统中的一个项目&#xff0c;旨在简化 Spring 应用程序与 HashiCorp Vault 的集成。它提供了一种方便的方式来管理和访问应用程序的敏感配置数据&#xff0c;如数据库凭证、API 密钥和其他机…...

道陟科技EMB产品开发进展与标准设计的建议|2024电动汽车智能底盘大会

11月12日&#xff0c;2024电动汽车智能底盘大会在重庆开幕。会议由中国汽车工程学会主办&#xff0c;电动汽车产业技术创新战略联盟、中国汽车工程学会智能底盘分会、智能绿色车辆与交通全国重点实验室承办。本届大会围绕电动汽车智能底盘相关技术发展与融合&#xff0c;满足高…...

GitHub Org

运营一个GitHub Org&#xff08;组织&#xff09;是一个复杂但充满价值的过程&#xff0c;它涉及多个方面&#xff0c;包括项目管理、团队协作、代码审查、文档维护、社区建设等。以下是一篇关于如何运营GitHub Org的详细指南&#xff0c;旨在帮助组织者更好地管理和维护其GitH…...

unity小:shaderGraph不规则涟漪、波纹效果

实现概述 在本项目中&#xff0c;我们通过结合 Sine、Polar Coordinates 和 Time 节点&#xff0c;实现了动态波纹效果。以下是实现细节&#xff1a; 核心实现 Sine 波形生成&#xff1a; 使用 Sine 节点生成基本的波形。该节点能够创建周期性变化&#xff0c;为波纹效果提供…...

【JavaScript】JavaScript开篇基础(6)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...