背景

我的博客运行在甲骨文云的 ARM 实例中,甲骨文云东京区域用的是 NTT 线路,这条线路对联通和移动用户应该还算比较友好,但是对于尊贵的电信用户来说简直是折磨。没错,我就是电信用户,1000M下行/100M上行的网络丢包率高达60%,加载完网站起码要15秒,这简直没法用。

手头上还有一台 DMIT 的服务器,洛杉矶 CN2 GIA 的线路,对三网都很友好,于是便计划使用这台服务器作为网站的中转机。

下面是 Debian 系统使用 Nginx 实现四层反代的教程,将 DMIT 服务器 80、443 端口的流量转发至 Oracle Cloud 的网站服务器。以下教程基于 Debian 12 系统,CentOS 系统部分命令或许不一样,可以根据实际替换。操作前需要确保你的中转机没有任何服务或网站使用80、443端口,如果你反代的服务并不需要使用这两个端口可以忽略,网站中转机默认使用80、443端口。

所谓四层负载均衡就是使用IP加端口的方式进行路由转发,属于网络层;七层负载均衡一般是基于请求URL地址的方式进行代理转发,属于应用层;四层的性能要优于七层,这是我的理解。

中转机 Nginx 配置四层转发

1.编辑 nginx 主配置文件

nano /etc/nginx/nginx.conf

2.在 events{} 和 http{} 两个代码块之间插入代码:

# stream 规则
stream {
    # stream TCP_80的分流规则
    upstream TCP_80 {
        # 后端服务器的IPv4地址
        server 222.222.222.222:80;
        # 后端服务器的IPv6地址
        server [2600:a101:a101:a101::aa]:80;
    }

    # stream TCP_443的分流规则
    upstream TCP_443 {
        # 后端服务器的IPv4地址
        server 222.222.222.222:443;
        # 后端服务器的IPv6地址
        server [2600:a101:a101:a101::bb]:443;
    }

    # 监听服务配置
    server {
        # 监听本机IPv4的80端口
        listen 80;
        # 监听本机IPv6的80端口
        listen [::]:80;
        # 代理连接超时设定
        proxy_connect_timeout 60s;
        # 反代流量到名称为 TCP_80 stream 模块
        proxy_pass TCP_80;
        # 开启 protocol 代理协议,传递客户端IP到后端服务器。
        proxy_protocol on;
    }

    # 监听服务配置
    server {
        # 监听本机IPv4的443端口
        listen 443;
        # 监听本机IPv6的443端口
        listen [::]:443;
        # 代理连接超时设定
        proxy_connect_timeout 60s;
        # 反代流量到名称为 TCP_443 stream 模块
        proxy_pass TCP_443;
        # 开启 protocol 代理协议,传递客户端IP到后端服务器。
        proxy_protocol on;
    }
}

3.测试 nginx 配置文件是否正确

nginx -t

4.重启 nginx

systemctl restart nginx

后端网站服务器开启 protocol 协议

前面的中转机配置中,我们开启了 protocol 协议用于传送客户端的IP地址,避免网站无法获取用户IP地址信息。如果你不需要获取客户端IP,可以不做这一步,但是上一步的两段 proxy_protocol on; 代码需要注释或删除。

1.编辑 nginx 主配置文件

nano /etc/nginx/nginx.conf

在 http {} 内添加以下代码:

# 从代理服务器(IPv4)获取客户端IP
set_real_ip_from 111.111.111.111;
# 从代理服务器(IPv6)获取客户端IP
set_real_ip_from 2600:a101:a101:a101::aa;
# 设定客户端IP地址从 proxy_protocol 标头获取
real_ip_header proxy_protocol;

2.重新加载 nginx 配置文件

systemctl reload nginx

3.修改各个站点的监听配置,在监听部分的配置添加 proxy_protocol 协议。

HTTP 示例:listen 80 proxy_protocol;

HTTPS 示例:listen 443 ssl http2 proxy_protocol;

修改网站的 DNS 解析

网站的中转服务设定好了以后,需要将域名的解析IP改为中转机的IP,这样就可以实现中转加速了。

最后修改:2023 年 10 月 28 日
如果觉得我的文章对你有用,请随意赞赏