Nginx正向代理

Nginx正向代理

Nginx可以通过配置stream模块来实现对HTTPS的TCP四层正向代理。核心是使用proxy_pass指令将流量转发到目标服务器,同时配合ssl_preread指令处理TLS握手,实现HTTPS的透明代理。

一个简单的配置示例:

stream {
    resolver 223.5.5.5 114.114.114.114; # 配置DNS解析器
    resolver_timeout 10s;

    server {
        listen 443; # 监听的端口
        ssl_preread on; # 启用ssl_preread模块,用于处理TLS握手

        proxy_connect_timeout 10s;
        proxy_timeout 30s;
        proxy_pass $ssl_preread_server_name:$server_port; # 转发到目标服务器
        proxy_protocol on; #启用PROXY protocol
        # 可以根据需要添加其他proxy_*指令
    }
}
配置说明:
  • stream模块: Nginx的stream模块用于处理TCP和UDP的四层代理,与HTTP模块同级。

  • resolver配置DNS解析器,用于解析目标服务器的域名。

  • listen指定Nginx监听的端口,这里是20017。

  • ssl_preread on启用ssl_preread模块,这个模块允许Nginx在TLS握手阶段读取SNI (Server Name Indication) 扩展,从而获取目标服务器的域名,这对于HTTPS的透明代理至关重要。

  • proxy_pass将流量转发到目标服务器。$ssl_preread_server_namessl_preread模块提取到的SNI信息,表示目标服务器的域名,$server_port是客户端请求的目标端口。

  • proxy_connect_timeoutproxy_timeout设置连接超时和读写超时时间。

  • proxy_protocol on启用PROXY protocol,如果后端服务器支持,可以传递客户端的真实IP和端口信息。

注意事项:
  • 需要确保Nginx编译时已启用ngx_stream_ssl_preread_modulengx_stream_proxy_module模块。

  • 目标服务器需要正确配置SSL证书,以便Nginx能够正常进行TLS握手。

  • 根据实际需求,可以配置其他proxy_*指令,例如proxy_buffer_sizeproxy_next_upstream等。

  • 如果后端服务器是HTTPS的,则需要在proxy_pass中指定HTTPS协议,例如 proxy_pass https://$ssl_preread_server_name:$server_port;

配置HTTPS正向代理的流程:
  1. 客户端发起HTTPS请求,连接到Nginx的监听端口。

  2. Nginx的stream模块接收到连接,并使用ssl_preread模块读取SNI信息,获取目标服务器的域名。

  3. Nginx根据SNI信息,将请求转发到目标服务器。

  4. Nginx与目标服务器建立TLS连接,进行HTTPS握手。

  5. Nginx将目标服务器的响应返回给客户端。

通过stream模块和ssl_preread模块,Nginx可以实现对HTTPS的TCP四层正向代理,将客户端的请求透明地转发到目标服务器,并处理TLS握手。这种方式可以用于实现负载均衡、流量转发等功能,同时保持HTTPS的安全性。

相关参考:


anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/6483.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注