提供两个服务
   
为了让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端口的,上面说了可以自己设置。
 
