首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Nginx 反向代理配置实战:一台服务器运行 10+ 网站

Nginx 反向代理配置实战:一台服务器运行 10+ 网站

作者头像
佛系豪豪吖
发布2026-06-22 20:57:14
发布2026-06-22 20:57:14
1080
举报

Nginx 反向代理配置实战:一台服务器运行 10+ 网站

> 在有限的服务器资源下,如何通过 Nginx 反向代理同时托管博客、音乐站、API 服务、监控面板等十多个站点?本文分享实际生产环境中的配置经验。

为什么需要反向代理?

当你只有一台 2C2G 的轻量云服务器,却要运行 Node.js、Java、PHP、Python 多种技术栈的应用时,问题来了:

  • Node.js 跑在 3000 端口,Java 跑在 8080,PHP 跑在 9000
  • 每个服务都要配 SSL 证书?
  • 用户访问还得记住端口号?

答案是 Nginx 反向代理 — 所有流量走 443 端口,按域名分发到后端服务。

基础架构

代码语言:javascript
复制
互联网 → Nginx(443) → ├─ blog.rmzdb.cloud   → 127.0.0.1:8080 (PHP)
                        ├─ music.rmzdb.cloud  → 127.0.0.1:3001 (Node.js)
                        ├─ api.rmzdb.cloud    → 127.0.0.1:9020 (Spring Boot)
                        └─ admin.rmzdb.cloud  → /var/www/admin (静态)

多站点 Nginx 配置

以通配符 SSL 证书为例:

代码语言:javascript
复制
# SSL 基础配置
ssl_certificate /root/.acme.sh/*.rmzdb.cloud_ecc/fullchain.cer;
ssl_certificate_key /root/.acme.sh/.rmzdb.cloud_ecc/.rmzdb.cloud.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;

安全头
add_header Strict-Transport-Security "max-age=63072000" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;

配完好就可以按域名分发:

代码语言:javascript
复制
server {
    listen 443 ssl http2;
    server_name blog.rmzdb.cloud;
    root /var/www/blog;
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

server {
    listen 443 ssl http2;
    server_name music.rmzdb.cloud;
    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    location /api {
        proxy_pass http://127.0.0.1:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

关键配置技巧

1. 代理头必须设
代码语言:javascript
复制
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 $scheme;

不设这些头,后端拿到的永远是 127.0.0.1,日志分析和 IP 限流全部失效。

2. WebSocket 支持

如果后端用 WebSocket(如实时通知),要加:

代码语言:javascript
复制
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
3. 大文件上传
代码语言:javascript
复制
client_max_body_size 100m;
proxy_read_timeout 300s;
4. 速率限制

防 DDoS,保护后端:

代码语言:javascript
复制
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
location /api {
    limit_req zone=api_limit burst=20 nodelay;
    proxy_pass http://127.0.0.1:3001;
}

自动化 SSL 证书

用 acme.sh 申请通配符证书,一次配置覆盖所有子域名:

代码语言:javascript
复制
acme.sh --issue --dns dns_ali -d rmzdb.cloud -d '*.rmzdb.cloud'

自动续期:

代码语言:javascript
复制
acme.sh --install-cert -d rmzdb.cloud \
  --key-file /etc/nginx/ssl/rmzdb.cloud.key \
  --fullchain-file /etc/nginx/ssl/fullchain.cer \
  --reloadcmd "systemctl reload nginx"

日志与监控

分离每个站点的访问日志,方便排查:

代码语言:javascript
复制
access_log /var/log/nginx/blog-access.log;
error_log /var/log/nginx/blog-error.log;

实时监控工具推荐:

  • tail -f 看实时请求
  • goaccess 生成访问报告
  • ngxtop 实时请求分析

总结

一台服务器跑十个网站,核心就三点:

  1. 按域名分发 — 所有流量走 443,Nginx 按 server_name 转发
  2. 代理头传全 — Host、IP、协议一个不能少
  3. 安全加固 — HTTPS 强制、速率限制、安全头一步到位

这套配置已经稳定运行数月,内存占用不到 50MB,CPU 几乎无感。

---

如果你也在用一台服务器跑多个服务,欢迎在评论区交流你的配置经验。

本文为作者原创,未经授权禁止转载、洗稿、搬运。如需引用请保留原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nginx 反向代理配置实战:一台服务器运行 10+ 网站
    • 为什么需要反向代理?
    • 基础架构
    • 多站点 Nginx 配置
    • 关键配置技巧
      • 1. 代理头必须设
      • 2. WebSocket 支持
      • 3. 大文件上传
      • 4. 速率限制
    • 自动化 SSL 证书
    • 日志与监控
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档