返回顶部
分享到

Nginx之https证书配置实现介绍

linux 来源:互联网 作者:佚名 发布时间:2025-12-11 22:16:14 人浏览
摘要

首先我的架构是(公网 NAT 转发 Nginx 代理 IIS 服务器),实现公网 HTTPS 访问,SSL 证书必须部署在 Nginx 服务器上,且是唯一需要部署证书的节点。 为什么不能部署在 IIS 或 NAT 设备上? 公网用户

首先我的架构是(公网 → 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信息,这个可以根据不同服务商的文档操作。

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

1

2

3

4

5

openssl genrsa -out server.key 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 格式:

1

2

3

4

5

# 验证证书(server.crt)

openssl x509 -in server.crt -text -noout

 

# 验证私钥(server.key)

openssl rsa -in server.key -text -noout

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

1

2

3

4

5

# 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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

# 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;    # 传递客户端真实IP到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
站点配置文件存放目录

1

2

3

4

5

6

# CentOS/RHEL 系列

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

 

# Ubuntu/Debian 系列

/etc/nginx/sites-available/  # 存放所有站点配置(未启用)

/etc/nginx/sites-enabled/    # 启用的站点(通过软链接指向 available 目录)

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

1

2

3

4

5

# nginx.conf 末尾的默认配置(CentOS 示例)

include /etc/nginx/conf.d/*.conf;  # 加载 conf.d 目录下所有 .conf 文件

 

# Ubuntu 示例(通过软链接控制启用/禁用)

include /etc/nginx/sites-enabled/*;

结果验证

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

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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Nginx之https证书配置实现介绍

    Nginx之https证书配置实现介绍
    首先我的架构是(公网 NAT 转发 Nginx 代理 IIS 服务器),实现公网 HTTPS 访问,SSL 证书必须部署在 Nginx 服务器上,且是唯一需要部署证书的节
  • Linux借助信号机制回收进程的方法
    信号机制基础 Linux信号是一种进程间通信机制,用于通知进程发生了某种事件。信号可以被内核、其他进程或进程自身发送。当进程接收到
  • Nginx日志定期清理设置实现
    1. 日志轮转配置 ① 创建 logrotate 配置文件 a. 按天自动滚动清理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 sudo tee /etc/logrotate.d/docker-nginx EOF /path/to/your/m
  • Linux镜像文件制作方式

    Linux镜像文件制作方式
    嵌入式系统开发调试及量产需要涉及到Linux镜像文件的制作,本文结合一个实例简要介绍Linux镜像文件的制作。 1.确定磁盘空间布局 在制作镜
  • 常用的Linux测速脚本和命令
    1. 使用常用测速脚本 1.1 Speedtest CLI Speedtest.net 提供的官方命令行工具,适合测试服务器的上下行带宽和延迟。 安装 Speedtest CLI 下载并安装
  • Ubuntu安装jenkins完成自动化构建过程

    Ubuntu安装jenkins完成自动化构建过程
    Jenkins自动构建部署流程通过git拉取代码,然后用maven打包成jar包,然后通过docker完成项目部署。这里的服务器需要安装jdk(openjdk也行),
  • Linux join命令的使用及说明
    一. 基本语法 join 是 Linux 中用于按字段将两个文件进行连接的命令,功能类似 SQL 的 JOIN。 要求两个文件按 用于匹配的字段排序好,一定要
  • Centos 7配置国内yum源的教程

    Centos 7配置国内yum源的教程
    鉴于 CentOS 7 已结束官方支持(EOL),但许多生产环境仍在使用 CentOS 7 或更旧版本。为此,需切换至国内镜像源以确保正常使用。本文将详细
  • Linux中的HTTPS协议原理

    Linux中的HTTPS协议原理
    不是有了HTTP了吗??为什么还要有HTTPS呢?? HTTPS也是一个应用层协议,是在HTTP协议的基础上引入的一个加密层,他的产生是由于HTTP协议内
  • Apache Ignite缓存基本操作实例
    这段内容主要讲解了Apache Ignite中缓存(IgniteCache)的基本操作,包括获取缓存、创建缓存、销毁缓存、执行原子操作以及异步操作等。下面
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计