本文主要是介绍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信息,这个可以根据不同服务商的文档操作。

当然如果没有也可以生成本地认证。主要是记录一下 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证书配置内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于Nginx之https证书配置实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!