## 为什么要用Nginx Proxy Manager
手写Nginx配置太烦了,特别是SSL证书续签、反向代理规则这些重复劳动。Nginx Proxy Manager(简称NPM)给了一个Web界面,点几下就能配好域名转发、自动申请Let’s Encrypt证书。适合自己搭服务、或者给客户做演示环境用。
## 环境准备
一台装了Docker和Docker Compose的Linux机器。我用的是雨云的云服务器,2核4G配置,跑NPM加几个小服务完全够用,性价比不错,而且网络稳定。系统是Ubuntu 22.04。
## 部署步骤
### 1. 创建目录和配置文件
mkdir -p /opt/npm && cd /opt/npm
touch docker-compose.yml
### 2. 编写docker-compose.yml
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
environment:
- DB_SQLITE_FILE=/data/database.sqlite
解释下:
– 80和443是Nginx的HTTP/HTTPS端口,必须暴露
– 81是NPM管理面板端口,可以改成别的,比如8081
– data目录存数据库和配置,letsencrypt存证书,这两个目录要持久化
– 用SQLite做数据库,省事,不用额外装MySQL
### 3. 启动服务
docker-compose up -d
等几秒,跑 `docker ps` 确认容器状态是Up。
### 4. 访问管理面板
浏览器打开 `http://你的服务器IP:81`
默认登录信息:
– 邮箱: admin@example.com
– 密码: changeme
第一次登录会让你改邮箱和密码,建议立刻改掉。
## 配置反向代理
### 添加一个简单的代理
比如你有个服务跑在 `localhost:3000`,想通过 `api.yourdomain.com` 访问。
1. 登录NPM面板,点 “Proxy Hosts” -> “Add Proxy Host”
2. Domain Names填 `api.yourdomain.com`
3. Scheme选 `http`,Forward Hostname/IP填 `127.0.0.1`(如果服务在宿主机)或者容器名,Forward Port填 `3000`
4. 勾上 “Block Common Exploits” 和 “Websocket Support”(如果服务需要WebSocket)
5. 切到SSL标签,选 “Request a new SSL Certificate”,勾上 “Force SSL”,填你的邮箱,点Save
等几十秒,证书自动申请成功,就可以用 `https://api.yourdomain.com` 访问了。
### 转发到Docker容器
如果服务也是Docker跑的,推荐用容器名或者自定义网络。比如:
# 在docker-compose.yml里
networks:
npm_network:
external: true
先创建网络:
docker network create npm_network
NPM和你的其他服务都加入这个网络,代理时Forward Hostname填服务名(比如 `myapp`)即可。这样比用IP稳定,重启容器也不怕IP变。
## 常用操作
### 修改默认端口
编辑docker-compose.yml,把81映射成别的端口:
ports:
- '8081:81'
`docker-compose up -d` 重启。
### 备份
NPM的所有配置都在 `/opt/npm/data` 和 `/opt/npm/letsencrypt` 里。直接打包这两个目录:
tar czf npm-backup-$(date +%Y%m%d).tar.gz data letsencrypt
恢复时解压到原位置重启容器即可。
### 查看日志
docker logs -f nginx-proxy-manager_app_1
容器名可能不一样,用 `docker ps` 确认。
## 常见问题
80/443端口被占用:检查是不是有Nginx或Apache在跑,停掉它们,或者改NPM的映射端口(但注意改端口后SSL证书验证会失败,因为Let’s Encrypt验证必须走80/443)。
证书申请失败:确保域名解析到了服务器IP,且80端口能访问。可以先用 `curl -I http://yourdomain.com/.well-known/acme-challenge/test` 测试。
面板打不开:检查防火墙,81端口是否开放。雨云的机器默认安全组要手动加规则,去控制台添加入站规则。
## 总结(不是废话)
NPM就是给懒人用的Nginx管理工具,适合不想记配置语法的场景。跑起来之后,加个代理点几下鼠标,证书自动续期,省心。如果服务量不多,一台雨云的低配机器跑NPM加几个容器完全扛得住。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容