介绍
本介绍来源于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启动
还不快抢沙发