nginx实现端口转发(nginx只用一个公网端口转发多个内网服务)

本文目录
- nginx只用一个公网端口转发多个内网服务
- nginx转发两个ws的同一端口有问题
- nginx 一直都在做7层转发,4层也需要看看
- 一台机器多服务部署nginx配置
- nginx根据域名转发
- Nginx转发TCP请求
- Nginx Tcp端口转发(参考)
- nginx实现TCP转发
- 反向代理需要开启端口转发吗
nginx只用一个公网端口转发多个内网服务
一个常见的问题,生产环境的一台有公网ip的服务器,为了安全起见,运维只给开一个端口,于是考虑用nginx根据url的前缀路径来转发到不同服务。例如:
以springboot工程为例,我们自己的web服务一般都会通过设置
来给该服务的所有url设置一个统一的前缀路径 /xxxxxx 。这时候nginx就可以将所有带有前缀 /xxxxxx 的请求转发到该服务。这是一个很简单的事。
***隐藏网址***
***隐藏网址***
在nginx中配置:
这时候又有一个问题,使用同样的ip:port来访问这些服务,在浏览器看来所有的服务都是一个域的,他们的cookie就会是同一个cookie,这时候nginx没办法根据cookie的不同转发到不同的服务。
我们想到了给每个服务配置一个域名(没有那么多公网域名可用,就在本地hosts文件配置了),产生跨域的效果,让不同的服务有独立的cookie。
从来都是解决跨域问题,从没想过有一天要主动跨域
如果配置了域名,完全可以让nginx根据域名来做识别转发,为什么要用cookie呢?如果你都是配置了公网域名,那确实可以这么干,但是我们是改的hosts文件,保不齐谁的域名就写错了,或者因为只是本地hosts文件的修改根本就没必要统一域名,这时候根据域名做转发就不行了。
kafka manager的访问是不需要认证的,暴露在公网上、面向所有人是一件可怕的事,我们是设置了VPN和访问白名单。
nginx转发两个ws的同一端口有问题
您要问的是nginx转发两个ws的同一端口有问题怎么办?使用不同的端口或使用不同的nginx实例。在一个nginx实例中,使用不同的服务器块来配置不同的websocket应用程序,并将它们分配到不同的端口上。使用不同的upstream块来配置负载均衡算法以将请求发送到正确的端口。websocket需要使用长连接,nginx的负载均衡算法会将请求分配给不同的websocket应用程序,导致连接中断或错误。
nginx 一直都在做7层转发,4层也需要看看
一.简单介绍
nginx 的功能非常强大,其中作为代理服务器是非常常用的功能,但是之前的nginx代理只能做七层代理,也就说是基于应用层面的代理,TCP层面的代理一般会配合haproxy 来使用。
自从nginx 1.9 以后通过stream模块实现了tcp 代理功能,无需其他软件配合即可实现四层代理和七层代理,即:访问该服务器的指定端口,nginx就可以充当端口转发的作用将流量导向另一个服务器,同时获取目标服务器的返回数据并返回给请求者。
nginx的TCP代理功能跟nginx的反向代理不同的是:请求该端口的所有流量都会转发到目标服务器,而在反向代理中可以细化哪些请求分发给哪些服务器;另一个不同的是,nginx做TCP代理并不仅仅局限于WEB的URL请求,还可以转发如memcached、MySQL、oracle等点到点的请求
二.配置4层转发关于nginx的硬性要求(只涉及1.9以上的版本)
1.nginx的版本必须在1.9以上(如果要使用stream模块的话)
2.nginx必须有stream模块的编译
三.查看是否支持stream模块
/usr/local/nginx/sbin/nginx -V | grep stream
如果有返回说明已经编译了,如果没有需要重新编译
***隐藏网址***
将模块替换成 --with-stream
四.配置要求
通过本地的3389跳转到192.168.9.121的8088端口
五.编写配置文件:
***隐藏网址***
2.mkdir /usr/local/nginx/conf/tcp.d
3.添加配置信息:
vim openldap.conf
4.检查配置文件并重新启动nginx
5.查看telenet查看端口是否可以访问
telnet nginx的IP地址 3389
一台机器多服务部署nginx配置
若一台机器上面部署多个web服务,那访问不同服务携带不同端口是很不方便的,可以通过proxy_pass来实现转发。
譬如:localhost/buffer执行buffer服务(监听8089端口),localhost/configure执行configure服务(监听8088端口)。
main.conf文件如下:
configure.conf文件配置如下:(vue+php搭建的web服务)
***隐藏网址***
***隐藏网址***
***隐藏网址***
nginx根据域名转发
如今docker使得本地部署服务越来越容易了,例如本人就使用了docker部署了gitlab-ce服务。但是对局域网的其他用户希望是通过gitlab.nathan.com进行访问,这就意味着gitlab服务需要部署在80端口上。但是其他服务也需要这样,即也需要80端口。多个服务不可能同时暂用同一个端口,但是可以通过nginx转发。比如A服务是7080端口,对应的域名是a.center.com;B服务对应的端口是6080端口,域名是b.center.com。nginx更具域名进行转发到不同端口上。
ngxin配置:
备注: 现在很多路由器都支持修改hosts,比如小米路由器、华硕《梅林》路由器等。
Nginx转发TCP请求
实现过程:
1.安装nginx,stream模块默认不安装的,需要手动添加参数:–with-stream
2.nginx.conf 配置,参考说明:ngx_stream_core_module
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
***隐藏网址***
.................
}
# tcp层转发的配置文件夹
include /etc/nginx/tcp.d/*.conf;
***隐藏网址***
***隐藏网址***
nginx: "server" directive is not allowed here
3.在tcp.d下新建个oracle.conf文件,内容如下:
stream {
upstream oracle{
server 192.168.2.3:1521;
}
server {
listen 1234;#将192.168.2.3的1521端口转发到本机的1234端口
proxy_pass oracle;
}
}
4.重启nginx,plsql访问本机的1234端口就相当于连接192.168.2.3的1521端口。
Nginx Tcp端口转发(参考)
stream {
upstream mqtt{
#hash
#$remote_addr consistent;
#转发的目的地地址和端口
server 192.168.11.195:1883;
}
server {
listen 9001;
proxy_pass mqtt; }
}
nginx实现TCP转发
需要在服务器上实现个TCP服务器, 由于已安装了nginx, 所以在nginx中给TCP开个口子。
网上文章的说法都是, 1.9.0版之后nginx开始具有TCP/UDP的代理转发功能, 但需要手动安装stream模块.
我用 nginx -V 命令(注意V是大写, 可查询nginx已安装模块)查了一下, 我的nginx是1.16.0版本, 并且已经安装了stream模块(命令输出包含 --with-stream ), 所以我就不用手动安装了.
首先要明确的一点, 关于TCP转发的配置, 是TCP层面的, 它和HTTP是同一层级, 并不是HTTP的下层.
***隐藏网址***
在顶级配置文件( /etc/nginx/nginx.conf )中添加如下配置块:
实现, 监听8998端口, 转发8999端口(服务器上的程序实现TCP server在8999端口).
nginx -t 检查一下配置文件,
nginx -s reload 重新加载配置, 即可!
UDP的转发类似, 我这次的应用不需要, 也就没有测试试验, 不过先记录在此.
配置块如下:
反向代理需要开启端口转发吗
需要。
访问的时候需要额外加上客户界面的端口号,显得比较low,所以想用nginx实现端口代理,访问80端口之后,自动转发到指定端口,这样间接的隐藏了访问的端口。
部署Prometheus由于云主机只开放了80端口就用反向代理来做转发。使用Nginx的proxy_pass配置项。Nginx监听80端口,接收到请求之后就会转发到要转发的URL。

更多文章:
androidapp源码免费下载(如何实现APK的反编译得到APK的源码)
2026年9月22日 18:00
service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)
2026年9月22日 10:20
html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)
2026年9月22日 10:10
结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)
2026年9月22日 09:40
cocos creator中文(cocoscreator和cocoscreator3d的区别)
2026年9月22日 02:30






