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