三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Nginx 反向代理还要手写配置?nginx-proxy-manager-zh 三个真实场景一次讲透

Nginx 反向代理还要手写配置?nginx-proxy-manager-zh 三个真实场景一次讲透

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-zh

3. 升级前先看迁移脚本。项目在 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),仅供参考

← 返回列表