Nginx 反向代理还要手写配置?nginx-proxy-manager-zh 三个真实场景一次讲透
【免费下载链接】nginx-proxy-manager-zh基于nginx-proxy-manager翻译的中文版本项目地址: https://gitcode.com/gh_mirrors/ng/nginx-proxy-manager-zh
说句实话,第一次听说 nginx-proxy-manager-zh 时,我是不以为然的:这不就是把 Nginx 配置搬到网页上吗?直到我真的用它把个人博客、公司内网入口和一套多人协作环境都管起来之后,才意识到这个免费、可视化、全中文、内置自动 SSL的 Nginx 反向代理管理工具,解决的远不止"省去手写配置文件"这一件事。下面这篇文章不讲套话,就沿着我实际经历过的三个场景,把 SSL 自动续期、访问控制、多用户权限这些高频需求逐个拆开讲,文末还附上一份简化版的上线检查清单,你照着抄就行。
先花一分钟认识它:一个把所有状态摊在眼前的仪表板
第一次登录,你会看到类似下图的仪表板:左侧是导航,中间用四张统计卡片直接告诉你当前有多少个代理主机、重定向、流和 404 主机。单是这个"一眼看清全貌"的设计,就比我以前在服务器上敲nginx -T再对着输出 grep 半天舒服得多。
有一点值得放心:它最终生成的底层配置,本质还是标准 Nginx 语法,模板文件都维护在仓库的 backend/templates/ 目录里。换句话说,你不是在"绕过" Nginx,而是在"更高效地"使用它——遇到特殊需求时,每个代理主机还预留了自定义配置片段的口子。
场景一:个人博客的 HTTPS 化——SSL 证书自动申请与自动续期怎么配置
第一个场景是我的个人博客。以前给站点套 HTTPS 的流程是:申请证书 → 手动上传 → 写 certbot 定时任务 → 每三个月提心吊胆一次续期。用这个工具之后,整个流程被压缩成了三步。🔒
第一步,添加代理主机。在"代理主机"里新建一条记录,填写域名、转发协议、目标主机和端口即可,必填项都标了星号,几乎没有理解成本:
第二步,切到 SSL 标签页。选择 Let's Encrypt,填一个接收通知的邮箱,保存即可。证书的申请、部署、续期全部由后台接管,到期前系统自动续签,你基本可以当它不存在。证书管理面板长这样,所有证书的提供商、到期时间一目了然:
第三步,顺手打开强制跳转。在 SSL 配置里开启"强制 HTTPS",用户访问老链接时会被自动带到加密通道上。
这里有个坑必须提醒你:Let's Encrypt 做验证需要 80 端口能被公网访问,域名也要先解析到这台服务器,否则申请会反复失败。这个工具不会替你解决 DNS,但它会把失败原因写进日志,按提示排查即可。
场景二:公司内网十几个服务共用一个入口——反向代理、访问控制和流转发
第二个场景来自我帮忙搭过的一家公司。内网里跑着十几个服务:OA、文件系统、API,还有几个临时小工具,各自占着不同的 IP 和端口,员工只能靠一张 Excel 记"哪个端口对应哪个系统"。🌐
用这个工具之后,所有服务被收敛到一个域名体系下,比如oa.intra.company指向内网某台机器,api.intra.company指向另一台,代理主机列表一屏拉完:
这里最值得花心思的不是"多加几条代理",而是访问控制策略。我的建议是:凡是内网系统,一律别选"公开可访问",先按 IP 段做白名单,把办公网段加进去,再叠一层账号认证,形成双保险。访问控制列表的配置界面如下:
顺带提三个容易忽略的点:
- 非 HTTP 服务用"流"转发。数据库、SSH、RDP 这类 TCP/UDP 服务不走代理主机,用"流"功能按端口做映射即可,一个入口管理所有协议。
- 老域名迁移用重定向主机。公司换域名时,把旧域名配一条 301 跳转到新地址,邮件里、书签里的老链接就不会全部变成 404:
- 别一上来就调高级参数。代理主机的高级页里有自定义 Nginx 片段、缓存资产、拦截常见漏洞等开关,先用默认配置跑通,再按需微调。
场景三:多人协作上线前的权限与审计——多用户权限这样分配更安全
第三个场景是团队协作。多人共用一个管理台时,最怕两件事:有人误删配置,以及"到底是谁改的"永远说不清楚。🛡️
这个工具支持创建多个用户,每个用户的权限可以细到"某个模块能否管理"。我们当时的分配逻辑很朴素:运维同学给"管理"权限,开发同学只给"查看"权限,个别项目负责人放开对应模块的管理权,其余模块一律只读。权限设置界面如下,每一项都写得明明白白:
更关键的是审计日志。谁在什么时间创建、修改、删除了哪条配置,全部有记录,出问题回溯时不用再去翻 shell 历史:
这套"权限 + 审计"的组合,相当于给整个管理台装了一层安全网。配置管理一旦多人化,这层网就是必需品,而不是可选项。
横评:手写 Nginx 和可视化工具,到底差在哪
经常有人问我:反正最后生成的还是 Nginx 配置,那我直接手写不行吗?可以,但要分场景。我把自己的体感整理成一张表:
| 对比维度 | 手写 Nginx 配置 | nginx-proxy-manager-zh |
|---|---|---|
| 上手门槛 | 需要熟悉语法、变量、include 机制 | 表单化填写,中文界面,新手可独立完成 |
| 新增一条代理 | 改文件 + reload,出错逐行排查 | 填表单点保存,即时生效 |
| 证书管理 | 自己装 certbot、写定时任务 | 内置 Let's Encrypt,自动申请与续期 |
| 多人协作 | 靠文件权限和 git 约束,易失控 | 细粒度权限 + 审计日志 |
| 特殊需求 | 完全自由 | 每个主机可注入自定义配置片段兜底 |
| 适用边界 | 追求极致定制、大规模自动化集群 | 中小规模、追求效率与可维护性的团队 |
结论很直白:如果你只有一两台机器、需求又高度定制,手写没毛病;如果你的目标是"让不懂 Nginx 的人也能安全地管理服务",或者想让团队协作有章可循,可视化工具是明显更省心的选择。
上线前建议养成的三个习惯
最后分享三个我认为最重要的习惯,算是一份简化版的上线清单。✅
1. 数据要能随时还原。配置、证书、用户数据都存在挂载卷里,定期备份即可。下面的备份命令解决"服务器出问题后如何快速恢复"的问题:
cp -r ./data ./data_backup_$(date +%Y%m%d) cp -r ./letsencrypt ./letsencrypt_backup_$(date +%Y%m%d)2. 三分钟跑起来,再谈优化。这份最小化的 docker-compose 配置解决"在服务器上一键部署"的问题:
services: app: image: 'chishin/nginx-proxy-manager-zh:release' restart: always ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt启动后浏览器访问http://服务器IP:81就是管理台,默认账号admin@example.com、密码changeme,首次登录务必立即修改。想自己研究源码或二次开发,也可以直接拉取仓库:
git clone https://gitcode.com/gh_mirrors/ng/nginx-proxy-manager-zh3. 升级前先看迁移脚本。项目在 backend/migrations/ 里维护了完整的数据库迁移机制,按步骤升级基本不会丢数据;升级后第一时间看一眼仪表板状态和证书列表,确认一切正常再让团队继续使用。
写在最后
从个人博客到公司内网,再到多人协作,nginx-proxy-manager-zh 给我的最大感受是:它把"配置管理"这件事的复杂度,从每个开发者身上收走,装进了一个任何人都看得懂的界面里。免费、中文、可视化、自动续期证书——如果你正被手写 Nginx 配置折磨,或者想让团队里不懂 Linux 的同事也能安全地参与服务管理,不妨今天就按上面的 compose 配置把它跑起来,从给第一个域名配上 HTTPS 开始。你会很快发现,原来"管理 Nginx 反向代理"这件事,可以这么轻松。
【免费下载链接】nginx-proxy-manager-zh基于nginx-proxy-manager翻译的中文版本项目地址: https://gitcode.com/gh_mirrors/ng/nginx-proxy-manager-zh
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考