Nginx之https证书配置实现

2025-12-10 21:50
文章标签 nginx https 证书 配置 实现

本文主要是介绍Nginx之https证书配置实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Nginx之https证书配置实现》本文主要介绍了Nginx之https证书配置的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起...

背景介绍

首先我的架构是(公网 js→ NAT 转发 → Nginx 代理 → IIS 服务器),实现公网 HTTPS 访问,SSL 证书必须部署在 Nginx 服务器上,且是唯一需要部署证书的节点。

为什么不能部署在 IIS 或 NAT 设备上?

公网用户的 HTTPS 请求,首先通过 NAT 转发到你的 Nginx 服务器(NAT 仅做端口映射,不处理 SSL 加密)。Nginx 作为反向代理,需要先解密 HTTPS 请求(这就需要 SSL 证书),再以HTTP 协议将请求转发到内网的 IIS 服务器(IIS 无需处理加密,只负责业务逻辑)。→ 整个链路的加密 / 解密只在 “公网 ↔ Nginx” 之间进行,“Nginx ↔ IIS” 是内网 HTTP 通信,无需加密(若内网需安全,可单独配置,但公网 HTTPS 核心依赖 Nginx 的证书)。

  • Nginx 的角色:SSL 终端(解密 HTTPS)+ 反向代理(转发 HTTP 到 IIS);
  • IIS 的角色:纯 HTTP 业务服务器(接收 Nginx 的转发请求,返回 HTTP 响应);
  • NAT 的角色:仅做 “公网端口→内网 Nginx 端口” 的映射(无需配置 SSL 相关)。

具体实现

证书获取

首先去你购买ssl的服务商网站下载证书,将它保存到你的nginx服务器上。格式一般为pem和key的两个文件。域名解析可能需要添加相关ssl信息,这个可以根据不同服务商的文档操作。

Nginx之https证书配置实现

当然如果没有也可以生成本地认证。主要是记录一下 SSL 证书的生成以及证书配置,SSL的理论和细节不细说了。这组命令是自签名证书的 “标准流程”,核心产出「server.key + server.crt」。

openssl genrsa -out server.key China编程2048 #生成 2048 位 RSA 私钥
openssl req -new -key server.key -out server.csr #生成证书签名请求(CSR)
cp server.key server.key.org #备份原始私钥 
openssl rsa -in server.key.org -out server.key #解密私钥(移除密码保护,可选)
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #生成自签名证书(最终可用证书)

Nginx 配置 HTTPS 时,支持 PEM 格式的证书文件,server.key 和server.crt本质上已经是 PEM 格式,只是文件后缀不同(.crt/.key 是常见别名,.pem 是通用后缀)。已经是 PEM 格式,直接用即可,无需额外转换。如果需要 .pem 后缀,仅需重命名文件。执行以下命令,若能正常输出证书信息,说明是合法 PEM 格式:

# 验证证书(server.crt)
openssl x509 -in server.crt -text -noout

# 验证私钥(server.key)
openssl rsa -in server.key -text -noout

特殊情况:证书是 DER 格式需要转换为 PEM 格式,命令如下

# DER 格式证书(.der)转 PEM 格式(.pem)
openssl x509 -inform der -in server.der -out server.pem

# DER 格式私钥转 PEM 格式
openssl rsa -inform der -in server.key.der -out server.key.pem

将 SSL 证书(编程.crt/.pem)和私钥(.key)上传到 Nginx 的证书目录,建议路径:/etc/nginx/ssl/。

nginx配置

编辑 Nginx 的站点配置文件vi /etc/nginx/nginx.cong

# 1. HTTPS服务配置(监听443端口,部署SSL证书)
server {
    listen 443 ssl;
    listen [::]:443 ssl;  # 支持IPv6(可选)
    server_name www.yourdomain.com;  # 你的公网域名(必须与证书域名一致)

    # 核心:SSL证书配置(替换为你的证书路径)
    ssl_certificate /etc/nginx/ssl/yourdomain.crt;        # 证书文件路径
    ssl_certificate_key /etc/nginx/ssl/yourdomain.key;    # 私钥文件路径

    # SSL安全优化(必配,避免弱加密被攻击)
    ssl_protocols TLSv1.2 TLSv1.3;  # 禁用不安全的TLSv1.0/TLSv1.1
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;

    # 2. 反向代理到内网IIS服务器(HTTP转发)
    location / {
        proxy_pass http://192.168.1.200:80;  # 替换为你的IIS内网IP+端口
        proxy_set_header Host $host;                # 传递域名到IIS(IIS需绑定该域名)
        proxy_set_header X-Real-IP $remote_addr;    # 传递客户端真实IPjavascript到IIS
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme; # 告诉IIS:原始请求是HTTPS(关键!)

        # 超时配置(适配IIS的动态页面/文件上传)
        proxy_connect_timeout 60s;
        proxy_read_timeout 120s;
    }
}

# 3. 可选:HTTP 80端口重定向到HTTPS(强制公网用户用HTTPS访问)
server {
    listen 80;
    listen [::]:80;
    server_name www.yourdomain.com;

    return 301 https://$host$request_uri;  # 永久重定向到HTTPS
}

扩展

Nginx 的配置分为 主配置文件 和 站点配置文件。
主配置文件路径/etc/nginx/nginx.conf
站点配置文件存放目录

# Centos/RHEL 系列
/etc/nginx/conf.d/  # 站点配置文件目录(默认启用,后缀 .conf)

# Ubuntu/Debian 系列
/etc/nginx/sites-available/  # 存放所有站点配置(未启用)
/etc/nginxjs/sites-enabled/    # 启用的站点(通过软链接指向 available 目录)

主配置文件(nginx.conf)末尾会通过 include 指令加载所有站点配置,无需手动修改主配置:

# nginx.conf 末尾的默认配置(CentOS 示例)
include /etc/nginx/conf.d/*.conf;  # 加载 conf.d 目录下所有 .conf 文件

# Ubuntu 示例(通过软链接控制启用/禁用)
include /etc/nginx/sites-enabled/*;

结果验证

在浏览器上放访问,可以看到这个连接是安全的则证书配置成功。点开可以看到证书信息。

Nginx之https证书配置实现

Nginx之https证书配置实现

如果是本地认证仍旧会显示不安全,但仍旧可以看到证书的详细信息。

到此这篇关于Nginx之https证书配置实现的文章就介绍到这了,更多相关Nginx https证书配置内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Nginx之https证书配置实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156415

相关文章

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

Nginx更新SSL证书的实现步骤

《Nginx更新SSL证书的实现步骤》本文主要介绍了Nginx更新SSL证书的实现步骤,包括下载新证书、备份旧证书、配置新证书、验证配置及遇到问题时的解决方法,感兴趣的了解一下... 目录1 下载最新的SSL证书文件2 备份旧的SSL证书文件3 配置新证书4 验证配置5 遇到的http://www.cppc

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

Nginx 访问控制的多种方法

《Nginx访问控制的多种方法》本文系统介绍了Nginx实现Web访问控制的多种方法,包括IP黑白名单、路径/方法/参数控制、HTTP基本认证、防盗链机制、客户端证书校验、限速限流、地理位置控制等基... 目录一、IP 白名单与黑名单1. 允许/拒绝指定IP2. 全局黑名单二、基于路径、方法、参数的访问控制

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性

nginx跨域访问配置的几种方法实现

《nginx跨域访问配置的几种方法实现》本文详细介绍了Nginx跨域配置方法,包括基本配置、只允许指定域名、携带Cookie的跨域、动态设置允许的Origin、支持不同路径的跨域控制、静态资源跨域以及... 目录一、基本跨域配置二、只允许指定域名跨域三、完整示例四、配置后重载 nginx五、注意事项六、支持