首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >告别命令行配置地狱!这个可视化反向代理神器让运维工作轻松10倍

告别命令行配置地狱!这个可视化反向代理神器让运维工作轻松10倍

作者头像
悠悠12138
发布2025-11-20 16:08:07
发布2025-11-20 16:08:07
210
举报

最近在公司搭建测试环境的时候,又遇到了老问题——需要给十几个不同的服务配置反向代理。按照以前的做法,就是在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系统,整个安装过程还算顺利。不过中间也踩了几个坑,一会儿会详细说。

准备工作

首先确保系统是最新的:

代码语言:javascript
复制
sudo apt update && sudo apt upgrade -y

然后安装Docker和Docker Compose,因为Nginx Proxy Manager官方推荐用Docker部署:

代码语言:javascript
复制
# 安装必要的包
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

image-20251030225537816

安装完成后记得把当前用户加到docker组里,这样就不用每次都sudo了:

代码语言:javascript
复制
sudo usermod -aG docker $USER

这里需要重新登录一下才能生效。

image-20251030225717605

创建Docker Compose配置

我在/opt目录下创建了一个专门的文件夹来存放配置:

代码语言:javascript
复制
sudo mkdir -p /opt/nginx-proxy-manager
cd /opt/nginx-proxy-manager

然后创建docker-compose.yml文件:

代码语言:javascript
复制
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,密码什么的在生产环境记得改成复杂一点的。

启动服务

配置文件准备好后就可以启动了:

代码语言:javascript
复制
sudo docker-compose up -d
image-20251030225826668
image-20251030225826668

image-20251030225826668

第一次启动会下载镜像,可能需要等一会儿。启动完成后可以检查一下容器状态:

代码语言:javascript
复制
sudo docker-compose ps

image-20251030230959564

如果看到容器都是Up状态就说明启动成功了。

初始配置和基本使用

服务启动后,打开浏览器访问 http://你的服务器IP:81 就能看到登录界面了。

默认的管理员账号是:

  • • 邮箱:admin@example.com
  • • 密码:changeme

第一次登录会强制要求修改邮箱和密码,这个安全措施还是很贴心的。

image-20251030231112812

界面介绍

登录后的界面还是很清爽的,主要分为几个部分:

  • • Dashboard:总览页面,能看到所有代理主机的状态
  • • Proxy Hosts:反向代理配置
  • • Redirection Hosts:重定向配置
  • • Streams:TCP/UDP流代理
  • • 404 Hosts:404页面配置
  • • Access Lists:访问控制列表
  • • SSL Certificates:SSL证书管理

最常用的就是Proxy Hosts这个功能了。

image-20251030231135811

创建第一个反向代理

我先拿公司的一个内部系统来测试。这个系统跑在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

image-20251030231229419image-20251030231344388

SSL标签页:

  • • SSL Certificate:可以选择已有证书或者申请新的Let's Encrypt证书
  • • Force SSL:强制HTTPS
  • • HTTP/2 Support:启用HTTP/2
  • • HSTS Enabled:启用HSTS安全头

我这里选择了"Request a new SSL Certificate",填写邮箱地址,勾选同意条款,点击保存。

等了大概30秒,证书就自动申请好了!这个速度比我手动用certbot快多了。

image-20251030231412383
image-20251030231412383

image-20251030231412383

实际使用场景和技巧

多环境管理

我们公司有开发、测试、预发布几个环境,每个环境都有十几个微服务。以前都是在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:

代码语言:javascript
复制
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配置有明显的优势。

优势:

  1. 1. 可视化管理,不需要记忆复杂的nginx语法
  2. 2. 自动SSL证书申请和续期,省心省力
  3. 3. 配置修改实时生效,不需要手动reload
  4. 4. 内置访问控制和安全防护
  5. 5. 支持配置备份和恢复

劣势:

  1. 1. 灵活性相对较低,一些复杂的nginx配置可能无法实现
  2. 2. 多了一层抽象,出问题时排查可能更复杂
  3. 3. 资源占用相对较高(因为包含了数据库和Web界面)

总的来说,对于大部分常见的反向代理需求,Nginx Proxy Manager都能很好地满足。只有在一些特别复杂的场景下,可能还是需要直接配置nginx。

安全注意事项

虽然Nginx Proxy Manager简化了配置,但安全方面还是不能马虎。

管理界面安全

管理界面默认在81端口,建议:

  1. 1. 修改默认端口,避免被扫描到
  2. 2. 设置复杂的管理员密码
  3. 3. 如果可能,只允许内网访问管理界面
  4. 4. 定期备份配置数据

SSL配置

虽然可以自动申请证书,但还是要注意:

1. 启用HSTS,防止降级攻击

2. 禁用不安全的SSL协议版本

访问控制

合理使用Access Lists功能:

代码语言:javascript
复制
# 可以在Advanced配置中添加更细粒度的控制
allow 192.168.1.0/24;
allow 10.0.0.0/8;
deny all;

我在生产环境中给管理后台都加了IP白名单,只允许办公网络访问。

日志监控

Nginx Proxy Manager的日志可以通过docker logs查看:

代码语言:javascript
复制
sudo docker-compose logs -f app

建议配置日志轮转,避免日志文件过大:

代码语言:javascript
复制
# 在docker-compose.yml中添加日志配置
logging:
  driver: "json-file"
  options:
    max-size: "10m"
    max-file: "3"

扩展和集成

Nginx Proxy Manager还可以和其他工具集成,实现更强大的功能。

与Docker Swarm集成

如果你用Docker Swarm管理容器集群,可以配置Nginx Proxy Manager自动发现新的服务:

代码语言:javascript
复制
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,可以通过脚本自动化管理:

代码语言:javascript
复制
# 获取访问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网关

选择建议

我觉得工具没有绝对的好坏,关键是要适合自己的使用场景。

写在最后

Nginx Proxy Manager整体感受还是很不错的。特别是对于中小型团队来说,能够显著提升运维效率。

最大的优点就是简单易用,基本上不需要学习成本,会用浏览器就能配置反向代理。自动SSL证书申请这个功能真的是太实用了,再也不用担心证书过期的问题。

当然也有一些不足,比如在一些复杂场景下灵活性不够,但对于大部分常见需求都能很好地满足。

如果你也在为nginx配置文件头疼,不妨试试这个工具。相信我,用过之后你就回不去了。

最后提醒一下,虽然工具简化了操作,但安全意识不能放松。该做的备份、监控、访问控制一样都不能少

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维躬行录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Nginx Proxy Manager
  • 在Debian 13上安装部署
    • 准备工作
    • 创建Docker Compose配置
    • 启动服务
  • 初始配置和基本使用
    • 界面介绍
    • 创建第一个反向代理
  • 实际使用场景和技巧
    • 多环境管理
    • SSL证书管理
    • 访问控制
    • 流量代理
  • 踩过的坑和解决方案
    • 端口冲突问题
    • 证书申请失败
  • 与传统nginx配置的对比
  • 安全注意事项
    • 管理界面安全
    • SSL配置
    • 访问控制
    • 日志监控
  • 扩展和集成
    • 与Docker Swarm集成
    • API自动化
    • 与Kubernetes集成
  • 未来发展和替代方案
    • 替代方案
    • 选择建议
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档