Nginx监听多端口并根据端口代理

一般使用nginx做代理的时候,基本都是使用的是域名的方式,但是在某些情况下,无法使用域名和路径进行负载代理,使用的是端口进行区分,也是有办法的。

多端口监听

监听多端口不是什么问题,但是很多人其实不知道怎么简化配置,特别是像上面的情况下,一个一个server节点配置难道要复制很多份吗,这样其实也太复杂了,nginx其实是支持多端口监听的,直接多写几个即可,比如类似下面的配置

server {
listen 8080;
listen 9090;
}

按照需要配置,特别简单省事,相同的配置只需要配置一份即可

多端口代理

如上,如果使用的是多个端口,代理在无法采用路径等方式进行区分的时候,只能根据本地端口进行区分。好在nginx有很多的内部变量使用,其中就包含了本地端口 $server_port,代理就可以这样配置了

http {
upstream ai{
server 192.168.1.200;
}

upstream xi{
server xilixili.net;
}

server {
listen 9090;
listen 9999;
location / {
if ($server_port = 9090) {
proxy_pass http://xi;
}

if ($server_port = 9999) {
proxy_pass http://ai;
}
}
}
}

上面在规则中根据本地端口进行代理转发,此处仅进行基本的功能演示,实现根据端口进行代理的功能,实际上的需求可能比较复杂,可能还需要配置很多其他的配置,请自行补齐。

特别需要注意的是,上面的 if 语句的语法,中间有空格(就是if关键字和括号之间),否则测试的时候报配置文件语法错误。

最近的文章

Python3安装Scrapy爬虫引擎

因最近在使用Scrapy框架,但是最终系统需要部署到Linux上,故记录下在Windows上和Linux上安装Scrapy爬虫引擎的。 安装Python3现在Python3逐渐开始流行,因此我们直接使用Python3.6版本,在Window上安装Python的方法比较简单,在官网下载对应的安装包安装 …

技术 继续阅读
更早的文章

Systemd服务无目录访问权限问题

记录一下,在系统安装 Systemd 服务无法访问某些目录的问题。 问题出现CentOS7已经采用Systemd机制了,比如使用 Caddy 服务器,使用YUM即可安装。 Caddy 是一个优秀的Web服务器,支持 HTTP2.0 以及 QUIC 协议,另外也支持代理功能。同时这个服务器还支持自动 …

技术 继续阅读