nginx实现4层代理

分享 2024-09-06

介绍

本介绍来源于chatGPT,如有表述不正确地方,欢迎指正
四层代理是指工作在OSI模型第四层(传输层)的网络代理方式,主要用于处理TCP和UDP等传输层协议的数据流。四层代理不关心数据的具体内容,只关注传输层的会话管理和连接转发。它可以根据传输层的特征,如IP地址、端口号等,对网络流量进行转发和负载均衡。

  • 四层代理的主要特点:

    • 基于传输层: 四层代理处理的是TCP和UDP等传输层协议,不会解析应用层的数据。它只根据IP地址、端口号等信息进行数据转发。

    速度和性能: 由于四层代理只关注数据包的传输和转发,不涉及数据的解析和修改,因此性能较高,延迟较低,非常适合高并发和低延迟的场景。
    典型应用:

    • 负载均衡: 将请求分发到多个后端服务器,提高应用的可用性和扩展性。
      NAT(网络地址转换): 将客户端的请求转发到内部网络中的服务器,同时隐藏内部服务器的真实IP地址。
    • 高可用性: 通过检测后端服务器的健康状态,自动剔除不可用的服务器,从而提供高可用的服务。
    • 不处理应用层数据: 四层代理不会解析HTTP、HTTPS、FTP等应用层协议的数据,因此无法做基于内容的路由决策,如基于URL的路径选择。这也是与七层代理(应用层代理)的主要区别。

1、依赖检查

nginx实现四层代理

核心依赖:nginx的stream模块

你可以先行检查当前已经安装的nginx是否具有这个模块:
找到nginx的二进制执行文件
./nginx -V
查看是否有--with-stream和 --with-stream_ssl_module(如果需要 TLS 支持)。的编译参数

如果有你可以直接跳转到配置步骤,如果还没有安装nginx,或没有上述模块,你可以根据第2步中的两种方式添加模块

2、stream模块添加

方式1:编译安装nginx

官方网站下载源码包,这里不赘述
编译安装:
注意,我是安装到/opt/nginx 目录的,你可以修改prefix

# 编译参数
./configure --prefix=/opt/nginx \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-http_xslt_module=dynamic \
--with-pcre \
--with-pcre-jit \
--with-stream \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-threads
# 安装
 make 
 make install 

方式2:通过包管理器(yum/apt)安装的nginx

可以通过包管理加上这个模块
依赖:
yum -y install nginx
yum install -y nginx-mod-stream

3、配置

如果是安装我的编译安装,那么修改/opt/nginx/conf/nginx.conf文件
如果是包管理器安装,这个文件一般在/etc/nginx/conf/nginx/conf
注意!下面的配置需要放在配置文件中的http模块外
nginx 配置:

stream {
    log_format proxy '$time_local|$remote_addr|$upstream_addr|$protocol|$status|'
                     '$session_time|$upstream_connect_time|$bytes_sent|$bytes_received|'
                     '$upstream_bytes_sent|$upstream_bytes_received' ;

    upstream kube-apiserver {
        server 10.4.7.21:6443     max_fails=3 fail_timeout=30s;
        server 10.4.7.22:6443     max_fails=3 fail_timeout=30s;
    }
    server {
        listen 7443;
        proxy_connect_timeout 2s;
        proxy_timeout 900s;
        proxy_pass kube-apiserver;
        access_log /var/log/nginx/proxy.log proxy;
    }
}

upstream中 定义你需要代理的后端服务器的ip和端口
server中定义nginx通过那个端口代理服务

4、启动

配置文件修改好以后

/opt/nginx/sbin/nginx -t //检查配置
/opt/nginx/sbin/nginx  //执行启动。你也可以自己定义service启动

本文由 nobinobita 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论