告别命令行配置地狱!这个可视化反向代理神器让运维工作轻松10倍
最近在公司搭建测试环境的时候,又遇到了老问题——需要给十几个不同的服务配置反向代理。按照以前的做法,就是在nginx配置文件里一个个写server块,改完还得测试语法,重载服务...光是想想就头疼。
正好前段时间在GitHub上看到了Nginx Proxy Manager这个项目,说是可以通过Web界面管理nginx反向代理配置。我想着反正也要重新搭环境,不如试试这个工具到底好不好用。
用了一段时间后,我只能说——真香!今天就来跟大家分享一下这个让我彻底告别nginx配置文件的神器。
什么是Nginx Proxy Manager
官网地址:https://nginxproxymanager.com/
简单来说,Nginx Proxy Manager就是给nginx套了个漂亮的Web管理界面。你不用再去编辑那些复杂的配置文件,所有的反向代理、SSL证书、访问控制都可以在浏览器里点点鼠标就搞定。
这个项目是基于nginx的,但是把所有复杂的配置都封装起来了。你只需要在Web界面里填写源地址、目标地址,它就会自动生成对应的nginx配置。而且还支持自动申请Let's Encrypt证书,这个功能真的太实用了。
我记得以前每次配置SSL证书都要折腾半天,现在点几下鼠标就能搞定,效率提升不是一点半点。
在Debian 13上安装部署
我这次用的是Debian 13系统,整个安装过程还算顺利。不过中间也踩了几个坑,一会儿会详细说。
准备工作
首先确保系统是最新的:
sudo apt update && sudo apt upgrade -y然后安装Docker和Docker Compose,因为Nginx Proxy Manager官方推荐用Docker部署:
# 安装必要的包
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
安装完成后记得把当前用户加到docker组里,这样就不用每次都sudo了:
sudo usermod -aG docker $USER这里需要重新登录一下才能生效。

创建Docker Compose配置
我在/opt目录下创建了一个专门的文件夹来存放配置:
sudo mkdir -p /opt/nginx-proxy-manager
cd /opt/nginx-proxy-manager然后创建docker-compose.yml文件:
cat <<eof>docker-compose.yml
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
eof这个配置文件里有几个要注意的地方。端口81是管理界面的端口,80和443是实际提供服务的端口。数据库我用的是MariaDB,密码什么的在生产环境记得改成复杂一点的。
启动服务
配置文件准备好后就可以启动了:
sudo docker-compose up -d
第一次启动会下载镜像,可能需要等一会儿。启动完成后可以检查一下容器状态:
sudo docker-compose ps
如果看到容器都是Up状态就说明启动成功了。
初始配置和基本使用
服务启动后,打开浏览器访问 http://你的服务器IP:81 就能看到登录界面了。
默认的管理员账号是:
- 邮箱:admin@example.com
- 密码:changeme
第一次登录会强制要求修改邮箱和密码,这个安全措施还是很贴心的。

界面介绍
登录后的界面还是很清爽的,主要分为几个部分:
- Dashboard:总览页面,能看到所有代理主机的状态
- Proxy Hosts:反向代理配置
- Redirection Hosts:重定向配置
- Streams:TCP/UDP流代理
- 404 Hosts:404页面配置
- Access Lists:访问控制列表
- SSL Certificates:SSL证书管理
最常用的就是Proxy Hosts这个功能了。

创建第一个反向代理
我先拿公司的一个内部系统来测试。这个系统跑在8080端口,我想通过域名访问,并且自动配置HTTPS。
点击"Proxy Hosts",然后点"Add Proxy Host",会弹出配置窗口:
Details标签页:
- Domain Names:填写你的域名,比如 app.example.com
- Scheme:选择http或https,这里是指后端服务的协议
- Forward Hostname/IP:后端服务的地址,可以是IP或域名
- Forward Port:后端服务端口
- Cache Assets:是否缓存静态资源
- Block Common Exploits:是否阻止常见攻击
- Websockets Support:是否支持WebSocket


SSL标签页:
- SSL Certificate:可以选择已有证书或者申请新的Let's Encrypt证书
- Force SSL:强制HTTPS
- HTTP/2 Support:启用HTTP/2
- HSTS Enabled:启用HSTS安全头
我这里选择了"Request a new SSL Certificate",填写邮箱地址,勾选同意条款,点击保存。
等了大概30秒,证书就自动申请好了!这个速度比我手动用certbot快多了。

实际使用场景和技巧
多环境管理
我们公司有开发、测试、预发布几个环境,每个环境都有十几个微服务。以前都是在nginx配置文件里写一大堆server块,维护起来特别麻烦。
现在用Nginx Proxy Manager,每个服务就是一个Proxy Host,需要修改的时候直接在界面上改就行了。而且还能很直观地看到每个服务的状态,哪个服务挂了一眼就能看出来。
SSL证书管理
这个功能真的是解决了我的一个大痛点。以前管理SSL证书要记住每个证书的过期时间,定期手动续期。现在Let's Encrypt证书会自动续期,再也不用担心证书过期导致服务不可用了。
而且支持通配符证书,一个*.example.com的证书就能覆盖所有子域名。
访问控制
Access Lists功能可以设置IP白名单或黑名单,对于一些内部系统的访问控制很有用。
我给测试环境设置了IP白名单,只允许公司内网访问。配置也很简单,创建一个Access List,添加允许的IP段,然后在Proxy Host里关联就行了。
流量代理
除了HTTP代理,还支持TCP和UDP的流量代理。我用这个功能代理了MySQL和Redis的连接,效果还不错。
不过这个功能相对简单一些,没有HTTP代理那么多高级选项。
踩过的坑和解决方案
使用过程中也遇到了一些问题,记录一下避免大家重复踩坑。
端口冲突问题
刚开始部署的时候,发现80端口启动失败。检查后发现系统里已经有apache在跑了。
解决方法就是先停掉apache:
sudo systemctl stop apache2
sudo systemctl disable apache2或者修改docker-compose.yml里的端口映射,比如改成8080:80。
证书申请失败
有几次Let's Encrypt证书申请失败,错误信息显示域名验证不通过。
这个问题通常是DNS解析的问题。Let's Encrypt需要通过HTTP-01或DNS-01方式验证域名所有权,如果域名还没有解析到服务器IP,验证就会失败。
解决方法是先确保域名正确解析,然后再申请证书。
与传统nginx配置的对比
用了这么长时间,我觉得Nginx Proxy Manager相比传统的nginx配置有明显的优势。
优势:
- 可视化管理,不需要记忆复杂的nginx语法
- 自动SSL证书申请和续期,省心省力
- 配置修改实时生效,不需要手动reload
- 内置访问控制和安全防护
- 支持配置备份和恢复
劣势:
- 灵活性相对较低,一些复杂的nginx配置可能无法实现
- 多了一层抽象,出问题时排查可能更复杂
- 资源占用相对较高(因为包含了数据库和Web界面)
总的来说,对于大部分常见的反向代理需求,Nginx Proxy Manager都能很好地满足。只有在一些特别复杂的场景下,可能还是需要直接配置nginx。
安全注意事项
虽然Nginx Proxy Manager简化了配置,但安全方面还是不能马虎。
管理界面安全
管理界面默认在81端口,建议:
- 修改默认端口,避免被扫描到
- 设置复杂的管理员密码
- 如果可能,只允许内网访问管理界面
- 定期备份配置数据
SSL配置
虽然可以自动申请证书,但还是要注意:
- 启用HSTS,防止降级攻击
禁用不安全的SSL协议版本
- 定期检查证书状态,虽然会自动续期但偶尔也会失败
- 对于敏感应用,考虑使用EV证书而不是DV证书
访问控制
合理使用Access Lists功能:
# 可以在Advanced配置中添加更细粒度的控制 allow 192.168.1.0/24; allow 10.0.0.0/8; deny all;我在生产环境中给管理后台都加了IP白名单,只允许办公网络访问。
日志监控
Nginx Proxy Manager的日志可以通过docker logs查看:
sudo docker-compose logs -f app建议配置日志轮转,避免日志文件过大:
# 在docker-compose.yml中添加日志配置 logging: driver: "json-file" options: max-size: "10m" max-file: "3"扩展和集成
Nginx Proxy Manager还可以和其他工具集成,实现更强大的功能。
与Docker Swarm集成
如果你用Docker Swarm管理容器集群,可以配置Nginx Proxy Manager自动发现新的服务:
version: '3.8' services: nginx-proxy-manager: image: jc21/nginx-proxy-manager:latest ports: - "80:80" - "443:443" - "81:81" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro deploy: placement: constraints: [node.role == manager]API自动化
Nginx Proxy Manager提供了REST API,可以通过脚本自动化管理:
# 获取访问token TOKEN=$(curl -s -X POST http://localhost:81/api/tokens \ -H "Content-Type: application/json" \ -d '{"identity": "admin@example.com", "password": "your_password"}' | jq -r '.token') # 创建新的代理主机 curl -X POST http://localhost:81/api/nginx/proxy-hosts \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "domain_names": ["api.example.com"], "forward_host": "192.168.1.100", "forward_port": 8080, "forward_scheme": "http", "certificate_id": 1, "ssl_forced": true }'这个功能在CI/CD流程中特别有用,可以在部署新服务时自动配置反向代理。
与Kubernetes集成
虽然Kubernetes有自己的Ingress Controller,但在一些混合环境中,Nginx Proxy Manager也能发挥作用。
我在一个项目中就是用Nginx Proxy Manager作为外部负载均衡器,将流量分发到不同的Kubernetes集群。
未来发展和替代方案
Nginx Proxy Manager虽然好用,但也不是万能的。在一些场景下可能需要考虑其他方案。
替代方案
Traefik: 更适合容器化环境,支持自动服务发现
HAProxy: 性能更好,但配置相对复杂
Cloudflare Tunnel: 适合需要穿透NAT的场景
Kong: 功能更强大的API网关选择建议
- 如果主要是简单的HTTP反向代理,Nginx Proxy Manager是很好的选择
- 如果需要复杂的负载均衡算法,考虑HAProxy
- 如果是微服务架构,Traefik可能更合适
- 如果需要API管理功能,Kong是不错的选择
我觉得工具没有绝对的好坏,关键是要适合自己的使用场景。
写在最后
Nginx Proxy Manager整体感受还是很不错的。特别是对于中小型团队来说,能够显著提升运维效率。
最大的优点就是简单易用,基本上不需要学习成本,会用浏览器就能配置反向代理。自动SSL证书申请这个功能真的是太实用了,再也不用担心证书过期的问题。
当然也有一些不足,比如在一些复杂场景下灵活性不够,但对于大部分常见需求都能很好地满足。
如果你也在为nginx配置文件头疼,不妨试试这个工具。相信我,用过之后你就回不去了。
最后提醒一下,虽然工具简化了操作,但安全意识不能放松。该做的备份、监控、访问控制一样都不能少。
好了,今天的分享就到这里。如果你在使用过程中遇到什么问题,欢迎在评论区交流讨论。觉得这篇文章对你有帮助的话,别忘了点赞转发支持一下!
如果这篇文章对你有帮助,别忘了点赞转发支持一下!想了解更多运维实战经验和技术干货,记得关注微信公众号@运维躬行录,领取学习大礼包!!!我会持续分享更多接地气的运维知识和踩坑经验。让我们一起在运维这条路上互相学习,共同进步!
公众号:运维躬行录
个人博客:躬行笔记