使用nginx实现四层负载均衡(利用nginx实现请求转发)

  • Post author:
  • Post category:其他


提供两个服务

为了让nginx进行转发,我们简单实现两个服务。

1:实现一个DNS服务放在任何你想的端口,这里是8053


使用bind实现DNS服务_Chinatesila的博客-CSDN博客

2:实现一个网页服务放在任何你想的端口,这里是8000,网页服务在/go下


使用go实现一个hello world的http服务_Chinatesila的博客-CSDN博客

结构

请求->nginx->后端服务

配置nginx stream模块

配置nginx的配置文件,添加stream模块

sudo gedit /etc/nginx/nginx.conf

在配置文件中添加stream模块,server的ip和端口可以自己修改,提供了两个转发,53端口和80端口的请求将被转发到其他端口进行服务。这里我们也可以修改,因为默认的服务是在80和53端口,可以不加端口号直接访问,也可以指定端口,但是我们在访问的时候就要加上端口号,例如我把80端口的server改成8054端口,

#四层转发,tcp/udp协议转发
stream {
    log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
#写入日志文件,可以选择access.log
    access_log  /var/log/nginx/access.log  proxy;
    open_log_file_cache off;
#转发53端口的请求到这个端口,可以修改成自己提供DNS服务的端口
    upstream dns_proxy {
        server 127.0.0.1:8053;
    }
#转发80端口的请求到这个端口,一会我们会在这个端口提供一个服务
#可以修改成自己提供网页服务的端口
    upstream hello_proxy {
        server 127.0.0.1:8000;
    }
    server {
        listen 53 udp reuseport;
        proxy_pass dns_proxy;
    }
    server {
        listen 8054;
        proxy_connect_timeout 1s;
        proxy_timeout 300s;
        proxy_pass hello_proxy;
    }
}

重启nginx服务

sudo nginx -s reload

这里我重启时出错了,报了一个80端口已经被占用的错误,因为我们的stream服务时在这个端口上的,因此可能会和电脑本身的服务起冲突,有两种解决办法,可以修改配置文件,将server放到其他端口,也可以杀死电脑现在80端口提供的服务。

可以用netstat -nat查看现在电脑已经在使用的端口。

使用命令之后再重启即可

sudo fuser -k 80/tcp

流量转发测试

对两个服务进行测试,使用dig命令测试DNS服务

dig @127.0.0.1 www.example.com

查看日志文件可以用tail命令

如果重新命名了日志文件,可以修改命令

tail -f /var/log/nginx/access.log

使用curl测试网页服务,因为我把转发服务放在了8054下,所以我用8054端口

curl http://127.0.0.1:8054 -w "\n"

返回结果和访问8000端口结果相同

一样查看日志文件,可以看到是把请求转移到了8000端口

这里我的网页服务是放在8000端口的,上面说了可以自己设置。



版权声明:本文为weixin_44358770原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。