HTTPS 域名访问与 Nginx 全链路说明

一、整体认知

大致方向是对的,但表述需要精确一点:

环节 常见说法 更准确的说法
用户输入 https://znty.xinhu.cn/... 浏览器先通过 DNS 把域名解析成 公网 IP(或 CNAME 再解析)
公网 → 内网 「外网 IP → 内网 IP」 多在 路由器 / 防火墙 / 云负载均衡 / NAT 上做 端口转发DNAT ,把公网 443(或自定义端口如 5001)转到内网某台机器的 443
内网机器 「内网 IP」 该机器上的 Nginx 监听 443,先把 HTTPS 解密 ,再 反向代理 到上游(本机其它端口、FastDFS、应用容器等)

因此,「HTTPS 域名 → 外网 IP → 内网 IP → Nginx(SSL + 证书)」 可以作为一种典型链路来写文章;若省略 DNS端口映射 细节,读者容易误以为「域名直接等于某台内网机器」。


二、Nginx 安装过程、环境与 SSL 说明(CentOS 7)

2.1 环境准备

  • 操作系统:CentOS 7(x86_64)。
  • 依赖(源码编译常用)gccmakepcre-develzlib-developenssl-devel
  • 包管理安装(常用) :通过 EPELnginx 官方 yum 源 安装,多数预编译包已包含 ngx_http_ssl_module
bash 复制代码
# 示例:安装编译依赖(源码编译时需要)
sudo yum install -y gcc make pcre-devel zlib-devel openssl-devel

2.2 安装 Nginx

以官方仓库为例(具体 repo 配置以 nginx.org 当前文档为准):

bash 复制代码
sudo yum install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

2.3 是否已带 SSL 模块(必查)

SSL 不是事后单独安装的「插件」 ,而是编译进 nginx 可执行文件里的模块。用下面命令确认:

bash 复制代码
nginx -V 2>&1 | grep http_ssl_module

若输出中包含 --with-http_ssl_module,即可在配置里使用 listen 443 ssl;ssl_certificate 等指令。

没有 该模块,需要 更换带 SSL 的二进制重新编译 并加上 --with-http_ssl_module(需系统已安装 OpenSSL 开发库)。

2.4 防火墙与端口(HTTPS 必做)

bash 复制代码
# firewalld 放行 HTTPS
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

若使用非标准端口(如 5001),需放行对应端口,并在安全组/边界设备上同步放行。


三、Nginx 证书的作用

3.1 证书解决什么问题?

  1. 身份:向浏览器证明「你访问的域名确实由持有该证书的一方提供服务」(由受信任的 CA 或私有 CA 签发)。
  2. 机密性 :HTTPS 在 TLS 握手后,客户端与服务端之间的 HTTP 内容被 加密,中间人难以直接窃听明文。
  3. 完整性:配合 TLS,可降低传输过程中被篡改的风险(与具体密码套件配置有关)。

3.2 常见文件

  • ssl_certificate :通常为 证书链 (如 .pem / .crt,可含中间证书)。
  • ssl_certificate_key :私钥(.key),必须保密,权限建议仅 root/nginx 可读。

3.3 和「域名 → IP」的关系

  • DNS 决定浏览器连哪个 IP
  • 证书 + server_name 决定 Nginx 对哪个 域名 呈现哪套站点;证书中的 CN/SAN 应包含用户访问的域名,否则浏览器会报证书域名不匹配。

四、全链路流程图

4.1 逻辑流程(含 DNS 与 TLS)

HTTPS 请求 Host: 域名
返回 公网 IP
端口转发 / NAT / SLB
监听 443 或自定义端口
TLS 握手 校验证书
反向代理 HTTP
用户浏览器
DNS 解析
公网入口
内网服务器
Nginx
上游应用 / 静态 / FastDFS 等

4.2 分层视角(适合博客「从外到内」叙述)

内网
公网
1 输入 https://域名
2 解析得到公网 IP
3 TCP+TLS 到公网:443
4 转发到内网 IP:443
5 解密后 proxy_pass
用户
DNS 服务器
公网 IP / 边界设备
Nginx 解密 HTTPS
业务 upstream

4.3 配置顺序建议

  1. DNS :域名 A 记录指向 公网 IP(或指向负载均衡)。
  2. 网络 :公网 443(或业务端口)映射到内网 Nginx 所在机器。
  3. Nginxlisten + server_name + ssl_certificate + ssl_certificate_key
  4. nginx -t 通过后 reload ,再用浏览器或 curl -Ik 验证。
  5. 上游proxy_pass、容器端口、防火墙与 Host 头按需调整。

五、小结

  • 流程本质 :DNS 解析 → 公网接入 →(可选 NAT/转发)→ 内网 Nginx 解密 HTTPS → 反代到真实业务。
  • 证书本质:在 TLS 层建立信任与加密通道;与 DNS 是不同层面,需同时正确配置。
  • 运维习惯 :安装后第一件事执行 nginx -V 确认 SSL 模块 ;上线前确认 监听端口、防火墙、证书路径与 server_name 一致

六、Nginx 配置 SSL 参考模板

下面是一份常见生产模板,包含:

  • 80 端口跳转到 HTTPS
  • 443 启用证书与 TLS 参数
  • 反向代理透传常用请求头
nginx 复制代码
# 80 端口统一跳转到 HTTPS
server {
    listen 80;
    server_name znty.xinhu.cn;
    return 301 https://$host$request_uri;
}

# HTTPS 站点
server {
    listen 443 ssl http2;
    server_name znty.xinhu.cn;

    # 证书与私钥
    ssl_certificate     /etc/nginx/ssl/znty.xinhu.cn.pem;
    ssl_certificate_key /etc/nginx/ssl/znty.xinhu.cn.key;

    # TLS 基础配置(推荐)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # 会话复用
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_tickets off;

    # OCSP stapling(可选,需要证书链完整)
    # resolver 223.5.5.5 8.8.8.8 valid=300s;
    # resolver_timeout 5s;
    # ssl_stapling on;
    # ssl_stapling_verify on;

    # 安全响应头(可选)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    # 反向代理示例
    location / {
        proxy_pass http://127.0.0.1:8080;
        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 https;
    }
}

应用配置后,推荐按以下顺序验证:

bash 复制代码
nginx -t
systemctl reload nginx
ss -lntp | grep :443
curl -Ik https://znty.xinhu.cn

附录:文中命令速查

目的 命令
查看编译参数 nginx -V 2>&1
检查配置 nginx -t
查看监听端口 `ss -lntp
本机测 HTTPS curl -Ik https://域名
相关推荐
白毛大侠2 小时前
WebSocket 核心:借 HTTP 建联,做自己的通信
websocket·网络协议·http
TON_G-T2 小时前
WebSocket实现长链接
网络·websocket·网络协议
2501_921649492 小时前
WebSocket 金融实时行情推送 API 实战解析:低延迟、高可用架构设计与落地
websocket·网络协议·金融·node.js
he___H3 小时前
Nginx+lua+openresty
nginx·lua·openresty
王家视频教程图书馆3 小时前
你在 HTTPS 页面 里加载 HTTP 资源 → ,不支持 HTTPS → 握手失败。浏览器自动升级为 HTTPS。你的 8080 端口只支持 HTTP
网络协议·http·https
Mountain and sea3 小时前
从一次通讯中断事故说起:Modbus TCP 调试实战与避坑指南
网络·网络协议·tcp/ip·工业机器人
刘~浪地球3 小时前
Nginx + Tomcat 整合实战(三):负载均衡与集群部署
nginx·tomcat·负载均衡
00后程序员张9 小时前
从审核被拒到稳定过审,iOS 上架技术优化
android·ios·小程序·https·uni-app·iphone·webview
灰阳阳14 小时前
Dockerfile实践-构建Nginx镜像
运维·nginx·docker·dockerfile