插件窝 干货文章 怎么使用nginx正向代理实现内网域名转发

怎么使用nginx正向代理实现内网域名转发

proxy Nginx 代理 配置 719    来源:    2025-04-24

使用Nginx正向代理实现内网域名转发

Nginx正向代理可以用于将内部网络中的域名请求转发到外部网络,同时保持内部网络的隔离性。以下是实现内网域名转发的详细步骤:

1. 基本配置

首先确保你已经安装了Nginx,然后编辑nginx.conf文件:

http {
    # 定义DNS解析器(使用Google的公共DNS)
    resolver 8.8.8.8;

    server {
        listen 80;

        # 配置正向代理
        location / {
            # 允许的客户端IP(根据需要修改)
            allow 192.168.1.0/24;
            deny all;

            # 设置代理
            proxy_pass http://$http_host$request_uri;

            # 设置必要的头部
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 其他代理设置
            proxy_connect_timeout 30;
            proxy_read_timeout 60;
            proxy_send_timeout 60;
        }
    }
}

2. 特定域名转发配置

如果你需要将特定的内网域名转发到特定的外部地址:

server {
    listen 80;
    server_name internal.example.com;

    location / {
        proxy_pass http://external.example.com;
        proxy_set_header Host external.example.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

3. HTTPS支持

如果需要支持HTTPS转发:

server {
    listen 443;
    server_name internal.example.com;

    ssl on;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass https://external.example.com;
        proxy_set_header Host external.example.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # HTTPS特定设置
        proxy_ssl_server_name on;
        proxy_ssl_session_reuse off;
    }
}

4. 客户端配置

客户端需要配置使用这个Nginx服务器作为代理:

  • 浏览器设置:在网络设置中配置HTTP/HTTPS代理为Nginx服务器的IP和端口
  • 系统全局设置:在系统网络设置中配置代理
  • 应用特定设置:某些应用可能需要单独配置代理

5. 高级功能

5.1 缓存加速

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;

server {
    # ...
    location / {
        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
        # ...其他代理设置
    }
}

5.2 访问控制

location / {
    # 基于IP的限制
    allow 192.168.1.0/24;
    deny all;

    # 基于时间的限制
    if ($time_local ~ "^(Mon|Tue|Wed|Thu|Fri)") {
        set $allow_time Y;
    }
    if ($allow_time != Y) {
        return 403;
    }

    # ...其他代理设置
}

6. 注意事项

  1. 安全性

    • 确保只允许可信网络访问代理
    • 考虑添加认证(如Basic Auth)
    • 定期更新Nginx以修复安全漏洞
  2. 性能

    • 调整worker_processesworker_connections以适应你的负载
    • 考虑启用keepalive连接
  3. 日志

    • 配置访问日志和错误日志以监控代理活动
    access_log /var/log/nginx/proxy_access.log;
    error_log /var/log/nginx/proxy_error.log;
    
  4. DNS缓存

    • Nginx默认会缓存DNS解析结果,可通过resolver_timeoutresolver_valid调整

完成配置后,使用nginx -t测试配置,然后systemctl reload nginx重新加载配置。