七万号·数据平台实战手记

Back

明朗北街七万号·数研工坊|扎根雄安新区中关村科技园,专注受限环境下软件搭建与数据平台落地


适用场景#

如果你属于以下任一种情况,这篇对你有用:

  • 内网平台多个服务想统一从 80 端口访问,而不是一堆随机端口
  • 需要反向代理、负载均衡、静态资源服务
  • 内网想启用 HTTPS(自签证书),避免明文传输
  • 想搞清楚 Nginx 的配置体系(server/location/upstream)

应用范围: 平台架构的统一入口。第 7 篇解决了「数据怎么存住」,本篇解决「请求怎么进来」。在整体架构里,Nginx 是所有 HTTP 请求的第一站,下面挂着应用服务、监控面板、数据平台各组件。


架构定位#

                    ┌─────────────┐
   用户请求  ──────► │   Nginx     │  ← 本篇主角:唯一入口
                    └──────┬──────┘
                    ┌──────┴──────┐
                    ▼             ▼
           ┌──────────────┐ ┌──────────────┐
           │ 应用服务:8080 │ │ 监控面板:3000│  ← 下游各服务
           └──────────────┘ └──────────────┘


            ┌──────────────┐
            │  存储底座      │  ← 第 7 篇:MySQL/PG/Redis
            └──────────────┘
plaintext
Nginx 角色说明典型配置
反向代理统一入口,转发到下游服务proxy_pass
负载均衡多个后端实例分担请求upstream
静态服务前端页面、静态资源root + index
SSL 终结HTTPS 证书卸载ssl_certificate

一、问题#

平台跑起来了:应用服务 8080、监控面板 3000、接口服务 9090……用户要记一堆端口,还不安全。

而且内网环境没有现成的负载均衡器(没有云 SLB),所有请求需要一个统一入口。

二、约束#

  • 无公网,Nginx 需编译安装或离线安装
  • 需要自签证书做 HTTPS(没有正规 CA 证书)
  • 下游服务数量多、端口各异
  • ARM 机器也需要对应版本

三、安装 Nginx#

3.1 方案 A:离线编译(推荐,可定制)#

依赖第 4 篇编译好的 GCC,以及几个基础依赖包:

# 外网下载
wget http://nginx.org/download/nginx-1.24.0.tar.gz

# 内网编译
tar xzf nginx-1.24.0.tar.gz
cd nginx-1.24.0

./configure \
    --prefix=/usr/local/nginx \
    --with-http_ssl_module \
    --with-http_stub_status_module \
    --with-http_gzip_static_module

make -j$(nproc) && make install
plaintext

如果 configure 报缺依赖(pcre/zlib),用第 3 篇的 yum 源装:yum install -y pcre-devel zlib-devel openssl-devel

3.2 方案 B:yum 安装(省事,版本旧)#

yum install -y nginx   # 前提:第 3 篇的本地源已配置
plaintext

3.3 启动#

# 编译安装的
/usr/local/nginx/sbin/nginx

# yum 安装的
systemctl start nginx
plaintext

验证:curl -I http://127.0.0.1 返回 200 即成功。

四、核心配置体系#

Nginx 配置的核心是三个块,层层嵌套:

理解优先级:http > server > location

五、反向代理配置#

5.1 最简反向代理#

把所有请求转发到一个后端:

server {
    listen 80;
    server_name _;

    location / {
        proxy_pass http://192.168.1.11: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;
    }
}
plaintext

5.2 按路径分发到不同服务(平台场景)#

一套平台多个服务,用路径区分:

这样用户只需要记一个地址 http://平台IP/,后面跟路径就能访问不同服务。

5.3 负载均衡#

upstream app_backend {
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
    server 192.168.1.13:8080;
}

server {
    listen 80;
    location / {
        proxy_pass http://app_backend;
    }
}
plaintext

默认轮询。其他策略:

策略配置场景
轮询默认无状态服务
权重server x weight=3;机器性能不均
IP 哈希ip_hash;需要会话保持

六、HTTPS 与自签证书#

6.1 生成自签证书#

内网没有 CA,用 openssl 生成自签证书:

# 生成私钥
openssl genrsa -out server.key 2048

# 生成自签证书(有效期 10 年)
openssl req -new -x509 -key server.key -out server.crt -days 3650 \
    -subj "/C=CN/ST=Hebei/L=Xiong'an/O=Internal/CN=192.168.1.100"
plaintext

CN 可以填 IP 或域名。填 IP 的话,浏览器访问时用 IP 就不会报「域名不匹配」(还是会报「不受信任」,因为自签)。

6.2 配置 HTTPS#

server {
    listen 443 ssl;
    server_name _;

    ssl_certificate     /usr/local/nginx/conf/server.crt;
    ssl_certificate_key /usr/local/nginx/conf/server.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://192.168.1.11:8080;
    }
}
plaintext

6.3 HTTP 跳转 HTTPS(可选)#

server {
    listen 80;
    return 301 https://$host$request_uri;
}
plaintext

七、常见坑#

症状解决
端口被占bind() to 0.0.0.0:80 failedss -tlnp 找占用进程
配置不生效改了没反应nginx -s reload(不是 restart)
静态资源 404location 路径不对确认 root + URI 拼接后的真实路径
后端 502后端没起来curl 直接测后端端口
日志没输出排障无头绪error_log logs/error.log debug;
上传大文件超时413 / 504client_max_body_size 100m; + proxy_read_timeout 300s;

八、总结#

Nginx 在内网平台里的角色一句话:一个入口,转发一切。

环节核心配置一句话
安装编译加 --with-http_ssl_module记得带 SSL 模块
反向代理proxy_pass记住加 X-Forwarded 头
多服务location 路径分发一个端口访问整个平台
负载均衡upstream + ip_hash无状态轮询,有状态哈希
HTTPS自签证书 + 443 server内网也建议上 TLS

到这里,「请求入口 + 存储底座」 两层已经就位。下一批文章开始往上走——监控体系(Categraf → VictoriaMetrics → Grafana),然后是数据引擎(Flink → Spark → SeaTunnel → Calcite → DuckDB)。


本文首发于掘金 · 作者:七万号 扎根雄安新区中关村科技园,专注受限环境下软件搭建与数据平台落地

Nginx 内网部署与配置实战——平台唯一的请求入口
https://realcpf.tech/blog/airgapped-nginx
Author 刘佳成
Published at 2026年8月1日