NPM(npm proxy manager)
一开始搭建自己网站的时候,自己的服务器上并没有配置nginx服务,然后更别说配置文件的编辑了,然后经过和AI的深度交流之后才发现这个小的图形化界面这么好用
Nginx Proxy Manager(简称 NPM)是一个将 Nginx 反向代理和证书管理图形化(Web GUI)的开源工具。它本质上是用 Node.js + Python + 数据库(SQLite/MySQL) 给底层的 OpenResty/Nginx 包了一层可视化外壳,通常以 Docker 容器形式一键交付。
对于个人开发者、家庭实验室(HomeLab)和自建轻量服务的场景,它极其方便;但在中大型企业运维与生产级 SRE 体系中,它几乎不会被选为主流方案。
一、 核心功能与亮点
零代码配置反向代理(Proxy Hosts)
在 Web 界面填入域名、目标 IP 和端口即可,彻底告别手动编写
server块、proxy_pass和请求头。支持一键勾选常用参数:
Websockets Support、Block Common Exploits(基础防注入规则)、静态资源缓存(Cache Assets)。
自动化 SSL/TLS 证书生命周期管理
内置集成 Let's Encrypt(Certbot),支持一键免费申请证书、强制跳转 HTTPS、启用 HSTS/HTTP2。
支持 DNS-01 验证(配合阿里云、Cloudflare 等 DNS API 申请通配符泛域名证书
*.domain.com),后台常驻定时任务自动更新证书,防止证书过期。
访问控制列表(Access Lists)
可通过界面快速配置 HTTP Basic Auth(账密认证)或客户端 IP 白名单/黑名单。
四层流代理(Streams)与重定向
支持 TCP/UDP 端口转发(基于 Nginx
stream模块)。提供 Redirection Hosts(域名 301/302 重定向)和 404 Hosts。
二、 典型部署形态(Docker Compose)
NPM 本身高度依赖容器化,最标准的落地方式就是极简的 Compose 文件:
YAML
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80' # 公网 HTTP
- '81:81' # Web 管理后台端口(生产建议不对公网开放)
- '443:443' # 公网 HTTPS
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt三、 配置文件进行反向代理和SSL证书申请
抛弃 NPM 图形界面,纯手写 Nginx 配置文件并结合 Certbot 跑通整个底层流程,是 SRE 和运维工程师必备的硬核基本功。你描述的原理正是 Certbot 的 webroot 模式。
以下是在你的服务器上,基于后端 Halo(运行在 127.0.0.1:8090)的纯手工配置实战全流程:
1. 准备验证专用目录并安装工具 在宿主机上安装 Nginx 和 Certbot,并为 Let's Encrypt 创建专门存放临时文件的目录:
Bash
yum install epel-release -y
yum install nginx certbot -y
mkdir -p /usr/share/nginx/html/certbot
2. 配置 Nginx 开放 80 端口与验证路由 创建或修改 /etc/nginx/conf.d/originspace.conf,将 .well-known 的请求指向临时目录,将其他访问反向代理给 Halo:
Nginx
server {
listen 80;
server_name originspace.work;
# 1. 专门拦截 Let's Encrypt 的 HTTP 验证请求,去临时目录读取文件
location /.well-known/acme-challenge/ {
root /usr/share/nginx/html/certbot;
}
# 2. 正常用户的请求,全部反向代理给后端的 Halo 博客容器
location / {
proxy_pass http://127.0.0.1:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
启动并重载 Nginx 生效:systemctl enable --now nginx 和 nginx -s reload。
3. 执行 Certbot 申请证书 在终端执行以下命令,Certbot 会自动在刚才的目录生成临时文件,并通知 Let's Encrypt 来抓取:
Bash
certbot certonly --webroot -w /usr/share/nginx/html/certbot -d originspace.work
成功后,终端会提示证书已保存在 /etc/letsencrypt/live/originspace.work/fullchain.pem 和 privkey.pem。
4. 升级为 443 加密并强制重定向 拿到证书后,再次修改 /etc/nginx/conf.d/originspace.conf,挂载证书并将 80 端口的 HTTP 流量强制跳转到 HTTPS:
Nginx
# HTTP 强制跳转 HTTPS
server {
listen 80;
server_name originspace.work;
# 依然保留验证路由,以便后续自动续期
location /.well-known/acme-challenge/ {
root /usr/share/nginx/html/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
# HTTPS 核心业务反向代理
server {
listen 443 ssl http2;
server_name originspace.work;
ssl_certificate /etc/letsencrypt/live/originspace.work/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/originspace.work/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
再次执行 nginx -s reload,业务彻底完成手动 HTTPS 改造。
5. 编写 Crontab 配置证书自动续期 手动将续期任务写入系统的计划任务:
Bash
crontab -e
添加一行:0 2 1 * * /usr/bin/certbot renew --quiet && systemctl reload nginx (每月 1 号凌晨 2 点自动检查续期,并重载 Nginx 刷新证书内存)。
NPM(npm proxy manager)
https://originspace.work/archives/npm-npm-proxy-manager
评论