在复杂的多服务服务器环境中,通过子域名和 Nginx 反向代理将不同内网服务安全、高效地发布到公网,是一种常见且实用的架构方案。以下是一份详细的配置总结,涵盖了常用服务(如 Nextcloud、Rocket.Chat、WordPress、PVE、PBS、Webmin、Stirling PDF、phpMyAdmin、Portainer、Plex 等)在 Nginx 上的实践配置与要点。
✅ 核心思路
- 每个服务使用独立子域名,如
nextcloud.example.com、chat.example.com等 - 所有 HTTP 请求统一重定向到 HTTPS
- 前端由 Nginx 统一处理 SSL 证书、协议升级、路径转发,后端服务内部保持简单
- 通过内网 IP 与端口与后端服务通信,安全性更高
✅ 通用配置结构
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
client_max_body_size 200M;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://192.168.x.x:port/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_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;
proxy_set_header X-Nginx-Proxy true;
proxy_redirect off;
}
}
✅ 重要细节
🌟 子域名配置
- 每个服务使用独立子域,DNS 指向公网 IP
- SSL 证书中包含所有子域名,集中管理
🌟 Header 配置
Host头必须传递,保持后端正确解析域名Upgrade和Connection头用于支持 WebSocket(如 Rocket.Chat、Portainer、Plex 等)X-Forwarded-Proto让后端感知是否为 HTTPS,避免混合内容警告
🌟 内网安全
- 后端服务监听内网地址,不直接暴露公网
- 可以配合防火墙仅允许反向代理服务器访问内网端口
🌟 日志配置
建议对每个服务独立设置访问和错误日志,例如:
access_log /var/log/nginx/service.access.log;
error_log /var/log/nginx/service.error.log;
方便后期调试与问题排查。
✅ 特殊服务注意事项
🔹 Nextcloud
- 若后端配置在子路径,如
/nextcloud/,需要在proxy_pass写完整路径并末尾加/ - 修改
config.php中overwrite.cli.url,保持与子域对应
🔹 phpMyAdmin
- 建议配置额外的访问限制(IP 白名单或 HTTP Basic Auth),避免暴露数据库管理面板
🔹 Portainer、Webmin、Plex 等管理面板
- 面向公网时建议开启更严格的访问控制措施(如 VPN、IP 限制)
✅ 总结
通过 Nginx 结合子域名和反向代理架构,可以轻松、安全地管理多套服务,统一证书配置,简化后端负载。细致地配置 header、日志和路径转发,是保证服务稳定的重要基础。
💬 结语
这份配置总结,记录了典型多服务场景下的完整实践方案,可作为以后新配置或迁移时的参考模板。