首页 热点资讯 义务教育 高等教育 出国留学 考研考公

nginx转发多个端口?

发布网友 发布时间:2024-10-01 09:06

我来回答

1个回答

热心网友 时间:2024-10-01 09:19

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的请求转发到该服务。这是一个很简单的事。

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

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

在nginx中配置:

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

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

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

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

??kafkamanager的访问是不需要认证的,暴露在公网上、面向所有人是一件可怕的事,我们是设置了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_certificateyour_certificate.crt;

ssl_certificate_keyyour_certificate.key;

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

listen443ssl;

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

listen443ssl;

listen444ssl;

listen445ssl;

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

sudoservicenginxrestart

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

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

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

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

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

配置如下:

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

配置main.conf如下:

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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com