ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

nginx-proxy-manager-zh 反向代理实战指南

nginx-proxy-manager-zh 反向代理实战指南 nginx-proxy-manager-zh 反向代理实战指南【免费下载链接】nginx-proxy-manager-zh基于nginx-proxy-manager翻译的中文版本项目地址: https://gitcode.com/gh_mirrors/ng/nginx-proxy-manager-zh还在手改 Nginx 配置文件、对着证书续期脚本发愁nginx-proxy-manager-zh 是一个带中文界面的 Nginx 反向代理管理器把加域名、签发证书、控制访问这些事全部变成表单操作你填表它生成配置、重载 Nginx、管理证书配置数据存在容器数据库里日常运维基本不用碰 conf 文件。 一条命令跑起来前置条件只有一项一台装好 Docker 的 Linux 机器。创建一个docker-compose.ymlservices: app: image: chishin/nginx-proxy-manager-zh:release # 中文镜像 restart: always ports: - 80:80 # 代理 HTTP 流量 - 81:81 # 管理界面 - 443:443 # 代理 HTTPS 流量 volumes: - ./data:/data # 数据库、日志 - ./letsencrypt:/etc/letsencrypt # 证书存储然后启动docker-compose up -d稍等几十秒浏览器访问http://服务器IP:81用默认账号adminexample.com/changeme登录首次登录会强制你改密码和邮箱记得改成真邮箱证书快过期时靠它提醒。跑通了吗能打开 81 端口的仪表盘并登录成功就说明部署没问题打不开就先执行docker-compose logs app看容器日志。 三个核心能力逐个拆开看管理界面左侧菜单不长真正干活的是三块代理主机、SSL 证书、访问列表。添加第一个代理主机代理主机是整个项目的核心把一个公网域名转发到内网某个服务的某个端口。操作路径是代理主机 → 添加代理主机填域名、转发主机名、转发端口即可。表单底部的高级配置可以粘贴自定义 Nginx 指令比如给需要 WebSocket 的服务Jellyfin、frp 之类加proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $http_connection; proxy_http_version 1.1;坑转发主机名别填127.0.0.1。上游服务如果跑在 Docker 里填的应该是容器网络中的服务名——容器里的 127.0.0.1 指向的是 NPM 自己一填就是 502。Lets Encrypt 证书自动申请与续期给主机勾上 Lets Encrypt后台就用 certbot 自动完成签发和续期90 天到期前自己处理你不用写任何定时任务。操作编辑主机 → SSL 标签 → 勾选 Lets Encrypt填注册邮箱再按需勾强制 SSLHTTP 自动 301 到 HTTPS和 HTTP/2。坑申请前域名必须已解析到这台服务器的公网 IP且 80 端口对外可达Lets Encrypt 走 HTTP 验证。解析没生效就提交报错只会说验证失败别在界面上反复点先去确认 DNS。访问列表控制谁能进来访问列表ACL按 IP 段做白名单/黑名单也可以叠加 HTTP 基本认证。操作左侧访问列表 → 添加类型选允许地址填192.168.1.0/24再回到代理主机表单把它挂上去。最终生成的规则大致等价于allow 192.168.1.0/24; deny all;坑规则按顺序匹配、第一条命中生效。想只放行内网就建一个允许列表如果同时建了允许和拒绝两个列表顺序写反容易把自己锁在外面先小规模验证再收紧。 一个真实场景家庭 NAS 的三台服务统一入口假设你是家庭网络管理员要把 Jellyfin、Nextcloud、Portainer 三个自托管服务统一挂到home.example.com下全部上 HTTPS且 Portainer 只允许内网访问。第一步域名规划。三个子域名各建一个代理主机jellyfin.home.example.com→ 转发到 Jellyfin 的 8096cloud.home.example.com→ 转发到 Nextcloud 的 3000portainer.home.example.com→ 转发到 Portainer 的 9000第二步网络打通。把 NPM 和三个服务加入同一个自定义 Docker 网络转发主机名直接填服务名上游服务连端口都不用对外发布networks: default: external: true name: home-lab这段同样加进三个服务的 compose 文件里。第三步安全策略。建一个仅内网访问列表允许192.168.1.0/24挂到 Portainer 主机上三个主机的 SSL 标签都勾 Lets Encrypt 强制 SSL。完成后家里任何设备访问这三个子域名都走 HTTPS外部 IP 碰 Portainer 会被直接拒绝而整个流程你一次都没打开过 Nginx 配置文件。⚠️ 高频卡点与接下来可以看什么现象证书申请失败提示域名验证不过原因域名没解析到服务器公网 IP或 80 端口被防火墙挡住修复dig 你的域名核对解析结果放行 80/443 后回界面重试现象管理页正常但访问代理域名返回 502原因转发主机名/端口填错上游在 Docker 里却填了127.0.0.1修复改成容器网络里的服务名和端口如jellyfin:8096保存后 Nginx 自动重载现象用 DNSPod 的 DNS 验证方式创建证书报错原因ARM 架构下zope依赖装不进去DNS 插件起不来修复docker exec -it 容器名 bash进入后执行pip install certbot-dns-dnspod zope然后刷新页面重试接下来可以往这几个方向走想看某个界面开关最终生成了什么 Nginx 指令翻backend/templates/每个.conf模板对应表单里的一个选项Docker 网络隔离、PUID/PGID 降权、健康检查等进阶玩法仓库内docs/src/advanced-config/index.md有现成配置例子想脚本化批量创建主机backend/routes/nginx/下的路由文件就是 REST API 的实现照着它写自动化配置填完剩下的重载、续签、规则生效都由它在后台替你盯。把服务接进网络、把域名解析到位这套代理就正式开工了。【免费下载链接】nginx-proxy-manager-zh基于nginx-proxy-manager翻译的中文版本项目地址: https://gitcode.com/gh_mirrors/ng/nginx-proxy-manager-zh创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进