Nginx多域名HTTPS配置全攻略:从证书生成到客户端安装

一、业务背景

在现代Web开发中,HTTPS已成为保障数据传输安全的标准协议。特别是对于地图类API服务(如高德地图),往往需要同时支持多个子域名(如webapi.amap.comrestapi.amap.com等)的HTTPS访问。传统方式需要为每个域名单独配置证书,不仅管理成本高,而且容易出错。本文将详细介绍如何使用单张通配符证书+SAN证书技术,配合Nginx实现多域名HTTPS的统一管理。

二、解决思路

针对多域名HTTPS配置的挑战,我们采用以下技术方案:

  1. 证书生成阶段

    • 使用OpenSSL生成包含通配符域名特定子域名的SAN证书

    • 一次性覆盖*.amap.com及特定业务域名

  2. Nginx配置阶段

    • 单server块监听443端口

    • 动态代理到不同后端服务

    • 启用SNI支持多域名

  3. 客户端适配

    • 自签名证书需要手动安装到受信任根证书

    • 浏览器/移动端特殊处理

三、解决内容

3.1 证书生成步骤

1. 准备SAN配置文件(san.cnf)
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no[req_distinguished_name]
C = CN
ST = Beijing
L = Beijing
O = AMap
OU = Dev
CN = *.amap.com[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names[alt_names]
DNS.1 = *.amap.com
DNS.2 = webapi.amap.com
DNS.3 = restapi.amap.com
DNS.4 = vdata.amap.com
2. 执行生成命令
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 keyout "F:/amap.key" -out "F:/amap.crt" -config "F:/san.cnf" -extensions v3_req

3.2 客户端证书安装

Windows系统安装步骤:
  1. 双击amap.crt文件

  2. 选择"安装证书" → "本地计算机" → "受信任的根证书颁发机构"

  3. 完成向导后重启浏览器

3.3 Nginx核心配置

worker_processes auto;events {worker_connections 1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;# 全局DNS配置(关键)resolver 8.8.8.8 114.114.114.114 valid=300s;  # 公共DNS + 超时设置resolver_timeout 5s;# 请求体大小限制client_body_buffer_size 100m;client_max_body_size 100m;# SSL优化参数ssl_session_cache   shared:SSL:10m;ssl_session_timeout 10m;ssl_protocols       TLSv1.2 TLSv1.3;ssl_ciphers         HIGH:!aNULL:!MD5:!SHA1;ssl_prefer_server_ciphers on;# 通配符证书服务器server {listen 443 ssl;server_name webapi.amap.com restapi.amap.com vdata.amap.com www.amap.com*.amap.com;ssl_certificate      cert/amap.crt;ssl_certificate_key  cert/amap.key;# 动态代理核心配置location / {# 关键:使用$host变量动态代理到对应域名proxy_pass https://$host$request_uri;# HTTPS代理必须参数proxy_ssl_server_name on;  # 启用SNI支持proxy_ssl_name $host;      # 传递原始域名# 保持原始请求头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_http_version 1.1;proxy_set_header Connection "";proxy_read_timeout 300s;proxy_cache_valid 200 302 12h;proxy_cache_key "$host$request_uri";}}
}

3.4 常见错误及解决方案

错误信息原因分析解决方案
SSL_ERROR_BAD_CERT_DOMAIN证书域名不匹配请求域名检查SAN配置包含所有子域名
ERR_CERT_AUTHORITY_INVALID证书未受信任确保证书安装到"受信任的根证书"
upstream SSL certificate verify errorNginx证书验证失败检查proxy_ssl_trusted_certificate路径
certificate chain too long证书链不完整合并中间证书到crt文件
no valid SSL certificate found证书密钥不匹配重新生成证书对

四、总结

通过本文的实践,我们实现了:

  1. 一证多用:单张证书支持通配符域名和特定子域名

  2. 动态代理:Nginx根据请求域名自动路由

  3. 安全加固:启用TLS 1.2+协议和强密码套件

最佳实践建议

  • 生产环境建议使用Let's Encrypt等权威CA

  • 定期轮换证书(建议不超过1年)

  • 使用OCSP Stapling提升验证效率

注:本文示例适用于开发测试环境,生产环境请根据实际情况调整安全策略。

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

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

相关文章

06-SpringBoot3入门-常见注解(简介)

1、Controller ResponseBody Controller是Spring MVC 中的注解,负责处理 HTTP 请求。 ResponseBody是Spring MVC 中的注解,用于直接将方法的返回值作为 HTTP 响应体。 2、RestController RestController Controller ResponseBody 3、RequestMappin…

工作记录 2017-03-10

工作记录 2017-03-10 序号 工作 相关人员 1 修改邮件上的问题。 更新RD服务器。 郝 更新的问题 1、修改了payment detail和patient insurance的health plan的输入方式。 2、new payment detail时,增加了allowable的处理。 3、选择payer的窗体,增…

MySQL数据库和表的操作

#使用数据库 use 数据库名; # 查询当前数据库是哪个数据库 select database(); 查看数据库版本 SELECT VERSION(); 查看当前用户 SELECT USER(); 查看所有用户() SELECT User,Host,Password FROM mysql.user;数据库 MySQL自带数据库: Information_schema: 主要存储…

lxd-dashboard 图形管理LXD/LXC

前言 LXD-WEBGUI是一个完全用AngularJS编写的Web应用程序,无需应用服务器、数据库或其他后端服务支持。只需要简单地托管静态HTML和JavaScript文件,就能立即投入使用。这个项目目前处于测试阶段,提供了直观的用户界面,帮助用户便捷地管理和控制LXD实例。 安装lxd-dashboa…

[GESP202503 C++一级题解]:B4257:图书馆里的老鼠

[GESP202503 C++一级题解]:B4257:图书馆里的老鼠 题目描述 图书馆里有 n n n 本书,不幸的是,还混入了一只老鼠,老鼠每 x x x 小时能啃光一本书,假设老鼠在啃光一本书之前,不会啃另一本。请问 y y y 小时后图书馆里还剩下多少本完整的书。 输入格式 三行,第一行一…

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.2文本生成逻辑:Top-k采样与温度控制

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.2.2 文本生成逻辑:Top-k采样与温度控制1. 文本生成的核心挑战与数学框架1.1 自回归生成的基本流程2. `Top-k`采样原理与工程实现2.1 数学定义与算法流程2.2 PyTorch实现优化3. 温度控制的数学本质与参…

Unity中实现UI的质感和圆角

质感思路有两种: 一种是玻璃质感的做法,抓取UI后面的图像做模糊(build是GrabPass,urp抓图像我有写过在往期文章),这个方式网络上有很多就不写了; 另外一种是使用CubeMap的方式去模拟质感&…

[异步监听事件、异步绑定属性]通过vue的this.$refs.组件.$props和.$on实现异步绑定组件属性和事件监听

child.vue <template><div><el-button type"primary" click.stop"$emit(get, data)">点击传参</el-button></div> </template> <script> export default { name: "child", props: ["data"…

第六届 蓝桥杯 嵌入式 省赛

参考 第六届蓝桥杯嵌入式省赛程序设计题解析&#xff08;基于HAL库&#xff09;_蓝桥杯嵌入式第六届真题-CSDN博客 一、分析功能 RTC 定时 1&#xff09;时间初始化 2&#xff09;定时上报电压时间 ADC测量 采集电位器的输出电压信号。 串行功能 1&#xff09;传送要设置…

为什么要将项目部署到外部tomcat

一、是什么 指将你的Java Web应用程序&#xff08;如WAR包&#xff09;安装并运行在一个独立安装的、位于项目外部的Tomcat服务器上&#xff0c;而不是使用内嵌的或开发环境自带的服务器。 外部Tomcat 指独立安装的Tomcat服务器&#xff08;如从Apache官网下载的Tomcat&#…

企业级全栈开发终极指南:Spring Boot+Vue3+Kubernetes实战,从0到上线高并发系统

简介 本文以电商系统为例,完整呈现从需求分析到上线运维的企业级开发全流程。包含12个关键步骤、30+代码示例、5个架构设计图,以及完整的Docker/Kubernetes部署方案。所有代码均符合企业级规范,可直接用于生产环境。 企业级开发的终极挑战 行业痛点: 90%的开发者在企业级…

蓝桥杯嵌入式赛道复习笔记8(eeprom读写)

原理学习 自己看一下江科大的存储器的读取&#xff0c;原理是一样的。只是使用了IIC原理是不变的 代码 cubeMX的配置 代码 eeprom层代码的书写 #include "eeprom_display.h" uint8_t data; uint8_t eeprom_read(uint8_t addr){I2CStart();I2CSendByte(0xa0);I2…

IP数据报报文格式

一 概述 IP数据报由两部分组成&#xff1a;首部数据部分。首部的前一部分是固定长度&#xff0c;一共20字节大小&#xff0c;是所有IP数据报文必须具有的&#xff1b;固定部分后面是一些可选字段&#xff0c;其长度是可变的。 二 首部固定部分各字段意义 &#xff08;1&…

高光谱工业相机+LED光源系统助力材料分类和异物检测、实现高速在线检测

检测光源包括可见光&#xff0c;如红光、蓝光和绿光以及其他波长的光&#xff0c;如紫外和红外波长&#xff0c;可以选择与检测对象物相应的波长。但由于能够照射的波长较窄&#xff0c;例如受到同色异物混入或多个素材的材质分类等&#xff0c;可能需要使用可照射多种波长的光…

如何快速解决django存储session变量时出现的django.db.utils.DatabaseError错误

我们在学习django进行web编程的时候&#xff0c;有时需要将一些全局变量信息存储在session中&#xff0c;但使用过程中&#xff0c;却发现会引起数据库的报错。通过查看django源码信息&#xff0c;发现其对session信息进行了ORM映射&#xff0c;如果数据库中不存在对应的表信息…

kubeadm部署k8s-1.32版本集群(1个master,1个worker)

使用最新版的kubeadm部署一个最小版的k8s集群&#xff0c;只有一个master和1个worker&#xff0c;这种部署方式&#xff0c;不满足高可用&#xff0c;仅限于本地学习使用&#xff0c;不可以放到生产上用&#xff0c;先看一下文章的目录。 文章目录 1、基本信息1.1、服务器基本…

阀门流量控制系统MATLAB仿真PID

以下是一个基于MATLAB的PID控制仿真程序&#xff0c;用于模拟智能阀门流量控制系统。该程序包含系统模型、PID控制器以及饱和限制处理。 % 石油管道流量PID控制仿真 % 系统参数 valve_min 4; % 阀门最小电流 (mA) valve_max 25; % 阀门最大电流 (mA) max_flow 10…

UE4学习笔记 FPS游戏制作30 显示击杀信息 水平框 UI模板(预制体)

文章目录 一制作单条死亡信息框水平框的使用创建一个水平框添加子元素调整子元素顺序子元素的布局插槽尺寸填充对齐 制作UI 根据队伍&#xff0c;设置文本的名字和颜色声明变量 将变量设置为构造参数根据队伍&#xff0c;设置文本的名字和颜色在构造事件中&#xff0c;获取玩家…

机器学习——LightGBM

LightGBM(light gradient boosting machine&#xff0c;轻量梯度提升机)是对XGBoost进行改进的模型版本&#xff0c;其三者之间的演变关系为&#xff1a;GBDT-》XGBoost-》LightGBM&#xff0c;依次对性能进行优化&#xff0c;尽管XGBoost已经很高效了&#xff0c;但是仍然有缺…

什么是SQL作业

SQL作业是在数据库服务器上按特定时间或间隔自动执行的计划任务或流程&#xff0c;这些作业由Microsoft SQL Server中的SQL Server代理管理&#xff0c;对于自动执行日常任务&#xff08;如数据库系统中的备份、数据导入和报告生成&#xff09;以及确保及时准确地处理和更新数据…