多个内网服务怎么统一管理?用Nginx Proxy Manager搭建HTTPS入口

📅 2026/7/7 4:48:24
多个内网服务怎么统一管理?用Nginx Proxy Manager搭建HTTPS入口
前言当NAS、博客、监控面板、智能家居和其他自建服务越来越多以后真正麻烦的往往已经不是把软件运行起来而是怎样管理这些分散的访问入口。每个服务都有自己的IP和端口局域网内使用时还能勉强记住一旦需要绑定域名、启用HTTPS或者让外部设备访问就要开始修改Nginx配置、申请证书、设置转发规则。服务数量一多配置文件会越来越复杂任何一个端口、域名或语法写错都可能导致页面无法打开。Nginx Proxy Manager把这些原本需要手动编写的反向代理配置放进了一个可视化管理界面。添加服务时只需要填写访问域名、目标IP和端口就可以建立代理规则需要HTTPS时也可以直接在页面中申请和管理SSL证书不必反复修改配置文件。本文将通过Docker部署Nginx Proxy Manager完成管理后台初始化、代理主机创建、SSL证书申请和子路径转发设置。随后再结合cpolar建立固定公网入口让部署在局域网中的多个Web服务也能通过统一域名和HTTPS地址对外访问。这套方案适合家庭实验室、NAS用户、个人开发者和需要管理多个内部系统的小型团队。Nginx Proxy Manager负责统一代理和证书管理cpolar负责打通内外网络两者配合后可以把原本零散的端口入口整理成更清晰、更容易维护的访问体系。1.什么是Nginx Proxy ManagerNginx Proxy Manager简称 NPM 是一个基于 Nginx 的开源反向代理管理工具它提供了一个简单易用的 Web 图形界面让你无需手动编写复杂的 Nginx 配置文件就能轻松实现域名反向代理将 yourdomain.com 指向内网服务如 192.168.1.100:3000自动申请和续期 Let’s Encrypt 免费 SSL 证书一键启用 HTTPS强制 HTTPS、HTTP/2、HSTS 等安全设置访问控制IP 白名单、基础认证多用户支持与权限管理它解决了什么问题传统使用 Nginx 做反向代理时你需要server{listen80;server_name app.example.com;location /{proxy_pass http://192.168.1.50:8080;proxy_set_header Host$host;}}还要手动配置 HTTPS、申请证书、处理自动续期……对新手极不友好。而 Nginx Proxy Manager 把这些操作全部图形化填域名 → 填内网地址 → 勾选“申请 SSL 证书” → 点保存几秒钟就完成一套带 HTTPS 的反向代理核心功能功能说明可视化代理主机管理添加/编辑/删除代理规则支持 WebSocket、自定义头部等自动 SSL 证书集成 Let’s Encrypt支持 HTTP 和 DNS 两种验证方式强制 HTTPS自动将 HTTP 请求重定向到 HTTPS访问控制可为每个代理设置 Basic Auth用户名/密码或 IP 限制Docker 原生支持官方提供 Docker 镜像一键部署典型应用场景给家里的 NAS、Home Assistant、Pi-hole 添加域名和 HTTPS在一台云服务器上托管多个 Web 服务如博客、Wiki、监控系统通过不同域名区分快速为测试环境暴露公网地址配合内网穿透注意事项服务器需有 公网 IP 才能自动申请 Let’s Encrypt 证书除非使用 DNS Challenge端口 80 和 443 必须开放用于证书验证和 HTTPS 服务初始密码务必修改它让反向代理和 HTTPS 配置变得像填表一样简单特别适合个人开发者、家庭实验室用户或小型团队是现代轻量级网关的理想选择。2.安装Nginx Proxy Manager创建一个目录来存放Docker Compose文件和相关配置文件mkdirnginx-proxy-managercdnginx-proxy-manager方法一在项目目录中创建一个名为docker-compose.yml的文件并添加以下内容services: app: image:jc21/nginx-proxy-manager:latestrestart: unless-stopped ports: -80:80-81:81-443:443volumes: - ./data:/data - ./letsencrypt:/etc/letsencryptNginx Proxy Manager还可以使用MySQL来进行数据存储。方法二Nginx Proxy Manager使用MySQL进行数据存储的示例创建一个名为docker-compose.yml的文件并添加以下内容我采用的这个办法version:3.8services: app: image:jc21/nginx-proxy-manager:latestrestart: unless-stopped ports:# These ports are in format host-port:container-port-80:80# Public HTTP Port-443:443# Public HTTPS Port-81:81# Admin Web Port# Add any other Stream port you want to expose# - 21:21 # FTPenvironment:# Mysql/Maria connection parameters:DB_MYSQL_HOST:dbDB_MYSQL_PORT:3306DB_MYSQL_USER:npmDB_MYSQL_PASSWORD:npmDB_MYSQL_NAME:npm# Uncomment this if IPv6 is not enabled on your host# DISABLE_IPV6: truevolumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt depends_on: - db db: image:jc21/mariadb-aria:latestrestart: unless-stopped environment: MYSQL_ROOT_PASSWORD:npmMYSQL_DATABASE:npmMYSQL_USER:npmMYSQL_PASSWORD:npmMARIADB_AUTO_UPGRADE:1volumes: - ./mysql:/var/lib/mysql在项目目录中运行以下命令启动Nginx Proxy Manager这将下载所需的Docker镜像并启动容器docker-composeup-ddockercompose up-d部署完成后在浏览器中输入http://IP:81就能看到Nginx Proxy Manager的Web界面登录时记得记住登录账号及密码登录成功负载均衡工具3.配置Domain Names“Domain Names”域名是互联网上用于标识网站、服务或资源的人类可读的地址用来替代难以记忆的数字IP地址。举个例子你访问 https://www.google.com其中 google.com 就是一个域名。实际上你的电脑会通过 DNS域名系统把 google.com 转换成一个 IP 地址比如 142.250.185.206然后连接到 Google 的服务器。域名的核心作用方便记忆比如 baidu.com 比 220.181.38.148 容易记多了。标识品牌或服务公司、个人、组织通过域名建立在线身份如 apple.com、github.com。支持网站和邮件服务网站https://yourname.com邮箱youyourname.com跟我一起操作吧我们用cpolar来打造。3.1 什么是cpolarcpolar是一款安全高效的内网穿透工具无需公网IP或复杂配置只需一条命令即可将本地服务器、Web服务或任意端口映射到公网让你随时随地远程访问内网应用特别适合开发调试、远程运维和应急部署等场景。3.2 部署cpolarcpolar 可以将你本地电脑中的服务如 SSH、Web、数据库映射到公网。即使你在家里或外出时也可以通过公网地址连接回本地运行的开发环境。❤️以下是安装cpolar步骤使用一键脚本安装命令sudocurlhttps://get.cpolar.sh|sh安装完成后执行下方命令查看cpolar服务状态如图所示即为正常启动sudosystemctl status cpolarCpolar安装和成功启动服务后在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可打开浏览器访问本地9200端口使用cpolar账户密码登录即可,登录后即可对隧道进行管理。3.3 配置Domain Names使用cpolar为其配置二级子域名该地址为固定地址不会随机变化。点击左侧的预留选择保留二级子域名地区选择china Top然后设置一个二级子域名名称我使用的是npm1大家可以自定义。填写备注信息点击保留。登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道隧道名称可自定义本例使用了:nginx注意不要与已有的隧道名称重复协议http本地地址80域名类型固定二级子域名Sub Domain填写保留成功的二级子域名地区选择China Top打开在线隧道列表此时可以看到公网地址名称变成了保留和固定的二级子域名名称这样一个永久不会变化的二级子域名公网网址即设置好了即Domain Names 。4.配置反向代理4.1 添加Proxy Host在Web界面中可以添加新的代理主机来管理反向代理配置点击Proxy Hosts依次点击Hosts→Proxy Hosts → Add Proxy Host配置Details配置说明Domain Names 填写网站域名需要上面做好DNS解析把域名绑定到服务器IP Scheme 选择HTTP或HTTPS。默认http即可除非有自签名证书 Forward Hostname/IP 填写要代理到的目标主机名或IP地址或者Docker容器内部IPNPM和程序服务在同一台服务器上 Forward Port填写目标主机的端口号这里是NPM管理界面81端口 Cache Assets 缓存根据需求选择打开 Block Common Exploits 阻止常见的漏洞根据需求选择打开 Websockets Support WS支持根据需求选择打开 Access List NPM自带的一个限制访问功能将一个域名如 npm1.cpolar.top通过反向代理转发到你内网的一台服务器IP: 192.168.42.140端口 81上从而实现从公网访问你的本地服务。点击“save”后保留成功点击如图所示即可访问到Nginx Proxy Manager的管理界面将一个域名如 npm1.cpolar.top通过反向代理转发到你内网的一台服务器IP: 192.168.52.213端口 3080上从而实现从公网访问你的本地服务。即可访问到192.168.52.213:3080的界面4.2 一键申请SSL证书现在网页显示的是不安全选择创建一个新的证书勾选强制SSL填写邮件、同意条款点击Save即可申请SSL证书刷新后恢复正常4.3 设置/app的请求将外部访问https://npm1.cpolar.top/app/的请求反向代理到内网服务器192.168.50.213:9090上让外界可以通过公网域名访问你本地部署的应用。点击如图所示位置添加下列数据使用正则重写规则处理路径rewrite ^/app/?(.*)$ /$1break;点击如图所示添加下列数据location/app{return301https://$host/app/;}访问https://npm1.cpolar.top/app/即可跳转到目标页面。总结完成部署后Nginx Proxy Manager就成为了多个内网服务之间的统一入口。以后新增应用时不必再手动编写完整的Nginx配置只需要在管理页面中填写域名、目标地址和端口就可以建立新的代理规则。SSL证书管理也会变得更直观。符合证书申请条件的域名可以直接在代理主机中申请并启用HTTPS再根据需要开启强制SSL、HTTP/2、HSTS和访问控制。这样证书、域名和转发规则都能够集中管理不需要分散在不同配置文件中逐一维护。结合cpolar后即使部署环境没有公网IP也可以先为Nginx Proxy Manager的入口建立固定公网地址再由NPM把不同请求转发到局域网中的具体服务。NAS、管理面板、博客和其他Web应用依然运行在原来的设备中但访问入口可以逐渐变得统一。需要注意的是反向代理只是负责转发流量并不会自动保证后端服务安全。正式使用时应及时修改NPM默认管理员密码限制管理后台的访问范围并为重要服务增加独立登录、访问名单或其他认证措施。当服务数量越来越多时真正提升效率的不是记住更多端口而是建立一套清晰的入口管理方式。Nginx Proxy Manager负责整理域名、代理和证书cpolar负责把入口带到公网这样内网中的多个应用才能从“分别能访问”逐渐变成“统一、稳定、方便维护”。