使用场景
1、内网有一台服务器的端口需要映射到外网(举例外网的服务器申请了一个域名,然后给该域名做了一个nignx的配置,然后配置中需要访问一个内网的http的服务)
2、内网服务器没有外网访问权限,全部内网中只有一台服务器有外网权限,可用于曲线救国版内网穿透
3、虚拟机只有NAT网,且虚拟机只配备了内网localhost转发到宿主机localhost,此时想外网或者其他内网(非宿主机)想访问虚拟机端口
4、将代理机作为堡垒机(跳板机),用于防止内部系统被人随意访问,此时堡垒机配置端口转发,通过堡垒机访问内部系统。
解决方案
nginx配置文件位置参考,或者nginx -V 查看 -conf-path=
Linux:在/etc/nginx/conf.d/中,修改default.conf文件
Windows:在 nginx安装目录\Nginx\conf中,修改nginx.conf
注意原本的nginx.conf中没有stream模块(据说v1.8.x以后的版本才有,我的是v1.5.11就没有),需要自行添加。且它的层级和http模块是同级的
# HTTP模块: HTTP模块主要用于处理HTTP和HTTPS流量。它可以接收HTTP请求、代理HTTP请求到后端服务器、负载均衡、缓存和处理HTTPS加密等。HTTP模块是Nginx最常用的模块之一,通常用于构建Web服务器或反向代#理服务器。
# Stream模块 : Stream模块用于处理通用TCP和UDP流量。它允许Nginx在传输层(TCP/UDP)上进行代理、负载均衡和流量控制。Stream模块通常用于构建TCP代理、数据库负载均衡、消息队列代理等应用。
# stream与http配置同级,功能类似,但请根据需要选择
# 这里是应用端口转发,所以我选择stream模块
# 编译nginx的时候要添加stream模块 ./configure –with-stream
# 这个模块实现了网络层和传输层的的转发、代理、负载均衡等
# stream与http配置同级
stream {
#每个server是一个虚拟主机
server {
listen 3306;
proxy_pass 192.168.8.168:3306;
# 有了这个server配置,你就可以通过代理机ip+3306端口访问内网的mysql库了
}
server {
listen 8080;
proxy_pass 192.168.8.168:8080;
# 有了这个配置,你就可以直接访问代理机ip+8080端口,访问你的内网web服务了
}
# 还可以设置指定的客户端IP访问(白名单设置)
# 自己百度更多功能吧
}
#直接复制可能有问题,几行代码就自己打吧