Nginx 配置 HTTPS 及添加服务器证书详解

Nginx 配置 HTTPS 及添加服务器证书详解

一、原理概述

HTTPS(HyperText Transfer Protocol Secure)是 HTTP 的安全版本,通过 SSL/TLS 协议对数据进行加密传输,同时验证服务器身份。配置 HTTPS 需要服务器证书(包含公钥)和私钥,Nginx 通过加载这些文件,启用 SSL 模块,实现加密通信。

二、具体操作步骤

1. 准备服务器证书

获取服务器证书文件(通常为.pem或.crt)和私钥文件(.key)。将这两个文件复制到 Nginx 安装目录下的conf目录(如/usr/local/nginx/conf)。

2. 编辑 Nginx 配置文件

以下是Linux系统配置,windows系统同理
打开 Nginx 配置文件nginx.conf(路径可能因安装方式而异):

bash

vi /usr/local/nginx/conf/nginx.conf

找到或添加HTTPS server块。假设原配置有 HTTP 的 80 端口,新增或修改为:

nginx
server {
    listen 443 ssl;
    server_name www.yourdomain.com; # 替换为你的域名
    ssl on;
    ssl_certificate server.pem; # 证书文件路径
    ssl_certificate_key server.key; # 私钥文件路径
    ssl_session_timeout 5m;
    # 配置SSL协议版本(根据OpenSSL版本选择)
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 若OpenSSL版本低,使用TLSv1
    # 配置加密套件
    ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
    ssl_prefer_server_ciphers on;
    location / {
        root html;
        index index.html index.htm;
    }
}
  • listen 443 ssl:监听 443 端口并启用 SSL。
  • server_name:替换为你的域名。
  • ssl_certificate和ssl_certificate_key:确保路径正确,放入conf同级目录下

3. 检查配置并重启 Nginx

检查配置语法:

bash

/usr/local/nginx/sbin/nginx -t

若提示configuration is correct,重启 Nginx:

bash

/usr/local/nginx/sbin/nginx -s reload

4. 测试访问

通过https://你的域名访问,检查是否成功加载 HTTPS 页面,浏览器应显示安全连接(锁图标)。

三、注意事项

定期备份证书和配置文件。
确保 Nginx 编译时包含--with-http_ssl_module模块(一般默认包含)。
根据服务器环境调整ssl_protocols和ssl_ciphers,确保安全性和兼容性。

四、具体项目

4.1 项目环境

生产环境ip 192.16.1.116:1005 app 192.16.1.116:1055
测试环境 192.16.1.118:1005 app 192.16.1.118:1055
前置机 外网ip
host文件映射域名

127.0.0.1	xxx.xxx.com

前置机nginx.conf

   #PC
	server {
           listen  1005  ssl http2;  #监听 1005 端口,同时启用 SSL 加密和 HTTP/2 协议
           server_name localhost;	#设置服务器名称为 localhost		
		ssl_certificate //.pem;    #添加证书路径	conf目录下文件名称	
		ssl_certificate_key //.key;		#添加密钥路径 conf目录下文件名称
		ssl_session_cache shared:SSL:30m;  #设置 SSL 会话缓存,共享缓存区名为 SSL,大小为 30m,用于提高 SSL 会话恢复效率。
        ssl_session_timeout 60m;   #设置 SSL 会话超时时间为 60 分钟
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!3DES:!DES;   #配置允许使用的加密套件,确保数据传输的加密强度和兼容性。
        ssl_protocols TLSv1.2 TLSv1.3;  #启用 TLSv1.2 和 TLSv1.3 协议版本,提升安全性
		ssl_prefer_server_ciphers on;		#优先使用服务器端配置的加密套件
		location / {
			proxy_pass http://192.16.1.116:1005/;  #将根路径的请求代理到 http://192.16.1.116:1005/ 后端服务器
        }
	}
    #app server
    server {
      listen  1055 ssl http2;
        server_name localhost;			
		ssl_certificate //.pem;      #添加证书路径				
		ssl_certificate_key //.key;  #添加密钥路径			
		ssl_session_cache shared:SSL:30m;
        ssl_session_timeout 60m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!3DES:!DES;
        ssl_protocols TLSv1.2 TLSv1.3;
		ssl_prefer_server_ciphers on;


        location /bjyqtest/ {
			proxy_pass http://192.16.1.118:1055/;     将 /bjyqtest/ 路径的请求代理到 http://192.16.1.118:1055/ 后端服务器。
        }
		
        
		location /bjyq/ {
			proxy_pass http://192.16.1.116:1055/;    将 /bjyq/ 路径的请求代理到 http://192.16.1.116:1055/ 后端服务器。
        }
		
		location / {
			proxy_pass http://192.16.1.116:1055/;     将根路径的请求代理到 http://192.16.1.118:1055/ 后端服务器
        }
	}

4.2 具体流程

4.2.1网址与 Nginx 配置的对应关系

1. 域名与端口匹配

域名:xxx.xxx.com
对应 Nginx 配置中的 server_name,server_name这个属性一般跟证书配套,也可以不配置,(多个域名用一个端口的时候才需要配置)
端口:1055
对应 server 块中的 listen 1055 ssl http2;,表示通过 HTTPS(SSL/TLS 加密)和 HTTP/2 协议监听 1055 端口。

2. 路径匹配与代理逻辑

请求路径:/bjyqtest/html/common/login.html
前缀 /bjyqtest/ 会触发 Nginx 配置中的 location /bjyqtest/ { ... } 块。
根据配置 proxy_pass http://192.16.1.118:1055/ ; nginx 会将请求转发到后端服务器 192.16.1.118:1055,并保留原始路径 html/common/login.html,最终请求为http://192.16.1.118:1055/html/common/login.html。

4.2.2访问流程原理

1.客户端发起请求:

浏览器输入https://xxx.xxx.com:1055/bjyq/html/common/login.html 请求通过https协议发送到前置机的 1055 端口。
Nginx 域名与端口匹配:
Nginx 找到 server_name xxx.xxx.com 且 listen 1055 ssl 的 server 块,确认使用 HTTPS 处理请求,并验证客户端证书(若配置了双向认证)或服务器证书(单向认证,即当前场景)。

2.路径匹配与代理转发:

路径 /bjyq/... 匹配 location /bjyq/ 块,Nginx 去除前缀 /bjyq/,将剩余路径 html/common/login.html 拼接至 proxy_pass 地址后,转发到 192.16.1.116:1055/html/common/login.html。
后端服务器响应:
生产环境服务器(192.16.1.116:1055)返回登录页面 login.html,经 Nginx 转发回客户端,浏览器渲染页面。

4.2.3 配置注意事项

1.证书必须与域名匹配:

证书文件(cert.pem)必须包含 xxx.xxx.com 域名(可为通配符证书或多域名证书),否则浏览器会提示证书错误(如 “不安全”)。

2.端口与防火墙设置:

确保前置机的 7055 端口已开放(通过 firewall-cmd 或 ufw 等工具配置),且后端服务器(192.16.1.116:1055)可正常访问。

4.2.4验证配置正确性

检查 Nginx 语法:
bash
nginx -t # 确保配置无语法错误

重启 Nginx:
bash
nginx -s reload # 使配置生效 热加载

浏览器访问测试:
输入网址后,浏览器应显示安全锁图标(HTTPS 生效)。
开发者工具(F12)的 Network 面板中,请求协议应为 https,状态码 200(成功响应)。

通过以上配置,Nginx 作为前置代理服务器,将外部 HTTPS 请求安全地转发到内部生产环境服务器,实现了通过域名访问特定路径下的登录页面。

4.2.5 流程

大致流程 - 主要描述小程序(外网)

1.访问域名
2.DNS 解析

(指向 WAF 公网 IP)

3.建立 HTTPS 连接

(验证 WAF 的 SSL 证书)

4.WAF 接收请求
  • 检查域名: xxx.xxx.com
  • 验证 SSL 证书
  • 应用安全策略 (如防 SQL 注入、XSS)
5. 转发请求到前置机
  • 目标: xxx.xxx.xxx.xxx:1055 前置机公网ip
  • 保留或添加头部信息
    (如 X-Forwarded-For: 客户端真实 IP)
6. 前置机接收 WAF 转发的请求
  • 提取真实 IP (通过 X-Forwarded-For)
  • 路径匹配 (如 /bjyq/)
7. 转发请求到后端服务器
  • 目标: 192.16.1.116:1055
  • 传递原始请求头 + 自定义头
    (如 X-Real-IP, X-Forwarded-For)
8. 后端服务器处理请求
  • 通过 X-Real-IP 获取客户端真实 IP
  • 生成响应内容 (如 login.html)
9. 响应返回给前置机
10. WAF 接收前置机响应
  • 检查响应安全性
11. 前置机响应转发到 WAF
12. 客户端接收响应
  • 验证 SSL 证书
  • 渲染页面内容
13. WAF 转发响应到客户端
posted @ 2025-05-09 20:22  啦啦啦啦666  阅读(1712)  评论(0)    收藏  举报