插件窝 干货文章 如何使用Nginx Proxy Manager实现反向代理的请求拦截与转发

如何使用Nginx Proxy Manager实现反向代理的请求拦截与转发

Proxy 拦截 Nginx 配置 917    来源:    2025-04-11

使用Nginx Proxy Manager实现反向代理的请求拦截与转发

Nginx Proxy Manager (NPM) 是一个基于Web的图形界面工具,用于管理Nginx反向代理服务器。下面我将详细介绍如何使用它来实现请求拦截与转发。

基本概念

反向代理:接收客户端请求,然后转发到后端服务器,并将响应返回给客户端,隐藏了后端服务器的真实信息。

安装Nginx Proxy Manager

  1. 使用Docker安装(推荐)

    docker run -d \
     --name=nginx-proxy-manager \
     -p 80:80 \
     -p 81:81 \
     -p 443:443 \
     -v npm_data:/data \
     -v npm_letsencrypt:/etc/letsencrypt \
     jc21/nginx-proxy-manager:latest
    
  2. 访问管理界面:http://服务器IP:81

    • 默认用户名:admin@example.com
    • 默认密码:changeme

配置反向代理

基本反向代理配置

  1. 登录NPM管理界面
  2. 点击"Proxy Hosts" > "Add Proxy Host"
  3. 配置:
    • Domain Names: 输入你的域名 (如 example.com)
    • Scheme: httphttps
    • Forward Hostname/IP: 后端服务器地址
    • Forward Port: 后端服务器端口
    • 勾选"Block Common Exploits"和"Websockets Support"(如需要)

高级转发配置

在"Advanced"选项卡中可以添加自定义Nginx配置:

# 自定义location规则
location /api/ {
    proxy_pass http://backend-server:8080/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

# 拦截特定路径
location /admin/ {
    deny all;
    return 403;
}

请求拦截技术

1. 基于路径的拦截

在"Custom Locations"选项卡中添加拦截规则:

  • 拦截特定路径

    location /private/ {
      deny all;
      return 403;
    }
    
  • 密码保护路径

    1. 在"Access Lists"中创建认证规则
    2. 在Proxy Host配置中应用该访问列表

2. 基于IP的拦截

在"Advanced"选项卡中添加:

# 允许特定IP
allow 192.168.1.100;
deny all;

# 或拒绝特定IP
deny 10.0.0.1;
allow all;

3. 基于用户代理的拦截

if ($http_user_agent ~* (bot|crawler|spider)) {
    return 403;
}

4. 速率限制

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

server {
    location / {
        limit_req zone=one burst=20;
    }
}

高级转发技巧

1. URL重写

location /oldpath/ {
    rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;
}

2. 负载均衡

  1. 在"Upstreams"中创建服务器组
  2. 在Proxy Host配置中选择该上游组

3. WebSocket支持

在"Advanced"中添加:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

4. 缓存控制

proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m inactive=60m;

location / {
    proxy_cache my_cache;
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 1m;
}

SSL/TLS配置

  1. 在"SSL"选项卡中选择"Request a new SSL Certificate"
  2. 输入邮箱和域名
  3. 使用Let's Encrypt自动获取证书

监控与日志

  • 在NPM界面查看访问日志
  • 配置日志转发到外部系统(ELK等)
  • 设置健康检查监控后端服务状态

注意事项

  1. 修改配置后需要点击"Save"应用更改
  2. 复杂的拦截规则可能需要直接编辑Nginx配置文件
  3. 定期备份NPM的数据库和配置
  4. 对于生产环境,考虑设置适当的监控和告警

通过以上配置,你可以灵活地实现各种请求拦截和转发场景,满足不同业务需求。