在复杂的多服务服务器环境中,通过子域名和 Nginx 反向代理将不同内网服务安全、高效地发布到公网,是一种常见且实用的架构方案。以下是一份详细的配置总结,涵盖了常用服务(如 Nextcloud、Rocket.Chat、WordPress、PVE、PBS、Webmin、Stirling PDF、phpMyAdmin、Portainer、Plex 等)在 Nginx 上的实践配置与要点。


✅ 核心思路

  • 每个服务使用独立子域名,如 nextcloud.example.comchat.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 头必须传递,保持后端正确解析域名
  • UpgradeConnection 头用于支持 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.phpoverwrite.cli.url,保持与子域对应

🔹 phpMyAdmin

  • 建议配置额外的访问限制(IP 白名单或 HTTP Basic Auth),避免暴露数据库管理面板

🔹 Portainer、Webmin、Plex 等管理面板

  • 面向公网时建议开启更严格的访问控制措施(如 VPN、IP 限制)

✅ 总结

通过 Nginx 结合子域名和反向代理架构,可以轻松、安全地管理多套服务,统一证书配置,简化后端负载。细致地配置 header、日志和路径转发,是保证服务稳定的重要基础。


💬 结语

这份配置总结,记录了典型多服务场景下的完整实践方案,可作为以后新配置或迁移时的参考模板。

Leave a Reply

Your email address will not be published. Required fields are marked *