首页>>后端>>java->nginx转发多个端口?

nginx转发多个端口?

时间:2023-12-01 本站 点击:0

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只用一个公网端口转发多个内网服务

  一个常见的问题,生产环境的一台有公网ip的服务器,为了安全起见,运维只给开一个端口,于是考虑用nginx根据url的前缀路径来转发到不同服务。例如:

以springboot工程为例,我们自己的web服务一般都会通过设置

来给该服务的所有url设置一个统一的前缀路径 /xxxxxx 。这时候nginx就可以将所有带有前缀 /xxxxxx 的请求转发到该服务。这是一个很简单的事。

  问题是有很多第三方服务,例如kafka manager,他是没有这样的前缀的,假设kafka安装在 192.168.0.182 机器上,kafka manager的访问地址就是 ,我们当然可以在首次访问时通过地址 让nginx根据 /kafka 识别到这是kafka manager服务并转发到 ,但是我们打开kafka manager页面上的链接时是不会有我们自己添加的 /kafka 前缀的,上面的方法失效。

  我们都知道http服务是无状态的,就像上面所说即使访问了kafka manager的主页,点击主页上按钮发起的请求也无法被识别为kafka manager请求。但是web服务绝大多是都是需要有状态的,主要有session/cookie、token两种方式来解决这个问题。也可以用来解决上面的问题。

在nginx中配置:

  这时候又有一个问题,使用同样的ip:port来访问这些服务,在浏览器看来所有的服务都是一个域的,他们的cookie就会是同一个cookie,这时候nginx没办法根据cookie的不同转发到不同的服务。

  我们想到了给每个服务配置一个域名(没有那么多公网域名可用,就在本地hosts文件配置了),产生跨域的效果,让不同的服务有独立的cookie。

   从来都是解决跨域问题,从没想过有一天要主动跨域

  如果配置了域名,完全可以让nginx根据域名来做识别转发,为什么要用cookie呢?如果你都是配置了公网域名,那确实可以这么干,但是我们是改的hosts文件,保不齐谁的域名就写错了,或者因为只是本地hosts文件的修改根本就没必要统一域名,这时候根据域名做转发就不行了。

  kafka manager的访问是不需要认证的,暴露在公网上、面向所有人是一件可怕的事,我们是设置了VPN和访问白名单。

Nginx配置多个服务共用80端口

对于Web而已,80端口和443端口是十分重要的,原则上需要输入 才可以浏览网页的,但由于默认端口是80,所以‘:80’可以忽略。同理对于https的443端口也一样。

随着服务器性能的提升和业务的需求,一台服务器上往往会同时有多个服务,这些服务都希望监听80端口,比如有vue.msg.com和react.msg.com。这时候我们可以使用nginx的代理转发功能帮我们实现共用80端口的需求。

首先我们先在两个空闲的端口上分别部署项目(非80,假设是8080和8081), nginx.conf 配置如下:

上面就是常规的配置,紧接着如果已经做好域名解析,希望vue.msg.com打开vue项目,react.msg.com打开react项目。我们需要再做两个代理,如下:

nginx如果检测到vue.msg.com的请求,将原样转发请求到本机的8080端口,如果检测到的是react.msg.com请求,也会将请求转发到8081端口。

这样nginx对外就有四个服务,我们只需要公布80端口的就可以了,这样就实现了多个服务共用80端口。

nginx配置多个https端口

https配置对于Nginx来说是很常见的,不管是多个端口还是单个端口都可以,下面我们以配置多个https端口来说明:

1. 首先,需要准备一个可用的证书文件,可以是自签名证书,也可以是CA机构颁发的证书,包括证书文件和私钥文件。

2. 在Nginx的配置文件中添加SSL模块,如下所示:

ssl_certificate your_certificate.crt;

ssl_certificate_key your_certificate.key;

3. 在Nginx配置文件中添加新的https端口,如下所示:

listen 443 ssl;

4. 如果需要支持多个https端口,可以重复上面的步骤,添加多个监听端口,如下所示:

listen 443 ssl;

listen 444 ssl;

listen 445 ssl;

5. 最后,执行重启Nginx服务,使配置文件生效:

sudo service nginx restart

Nginx配置——单域名反向代理多个端口

安装Nginx相对来说是非常简单的,运行下面两条命令即可。

安装成功后,设置开机启动。

启动nginx,访问80端口,发现已经启动成功了。

接下来,我们进入nginx目录下,找到nginx.conf文件开始配置;这里我把nginx.conf文件中的server配置统统删除了,以后我们再配置新的server,只需要再conf.d文件夹中创建新的*.conf即可。

配置如下:

接下来,我们需要配置一个server用于端口服务的反向代理,进入 conf.d 文件夹新建一个main.conf。

配置main.conf如下:

接下来,我们通过 就可以访问到接口啦。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/java/5045.html