NGINX配置路由转发
Nginx
Nginx是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。该软件由伊戈尔·赛索耶夫创建并于2004年首次公开发布。2011年成立同名公司以提供支持。2019年3月11日,Nginx公司被F5 Networks以6.7亿美元收购。
Nginx有以下的特点
- 由C编写,占用的资源和内存低,性能高。
- 单进程多线程,当启动nginx服务器,会生成一个master进程,master进程会fork出多个worker进程,由worker线程处理客户端的请求。
- 支持反向代理,支持7层负载均衡(拓展负载均衡的好处)。
- 高并发,nginx是异步非阻塞型处理请求,采用的epollandqueue模式
- 处理静态文件速度快
- 高度模块化,配置简单。社区活跃,各种高性能模块出品迅速。
如上图所示,Nginx主要由Master,Worker和Proxy Cache三个部分组成。
- Master 主控:
NGINX遵循主从架构。它将根据客户的要求为Worker分配工作。将工作分配给Worker后,Master将寻找客户的下一个请求,因为它不会等待Worker的响应。一旦响应来自Worker,Master就会将响应发送给客户端 - Worker 工作单元:
Worker是NGINX架构中的Slave。每个工作单元可以单线程方式一次处理1000个以上的请求。一旦处理完成,响应将被发送到主服务器。单线程将通过在相同的内存空间而不是不同的内存空间上工作来节省RAM和ROM的大小。多线程将在不同的内存空间上工作。 - Cache 缓存:
Nginx缓存用于通过从缓存而不是从服务器获取来非常快速地呈现页面。在第一个页面请求时,页面将被存储在高速缓存中。
为了实现API的路由转发,需要只需要对Nginx作出如下的配置:
server {
listen 80 default_server;
location /goapi {
rewrite ^/goapi(.*) $1 break;
proxy_pass http://goapi:8080;
}
location /nodeapi {
rewrite ^/nodeapi(.*) $1 break;
proxy_pass http://nodeapi:8080;
}
location /flaskapi {
rewrite ^/flaskapi(.*) $1 break;
proxy_pass http://flaskapi:8080;
}
location /springapi {
rewrite ^/springapi(.*) $1 break;
proxy_pass http://springapi:8080;
}
}
我们基于不同的服务goapi,nodeapi,flaskapi和springapi,分别配置一条路由,在转发之前,需要利用rewrite来去掉服务名,并发送给对应的服务。
使用容器把ngnix和后端的四个服务部署在同一个网络下,通过网关连接路由转发的。Nginx的部署如下:
version: "3.7"
services:
web:
container_name: nginx
image: nginx
volumes:
- ./templates:/etc/nginx/templates
- ./conf/default.conf:/etc/nginx/conf.d/default.conf
ports:
- "8080:80"
environment:
- NGINX_HOST=localhost
- NGINX_PORT=80
deploy:
resources:
limits:
cpus: '1'
memory: 256M
reservations:
memory: 256M
从功能上看,Nginx可以满足用户对于API网关的大部分需求,可以通过配置和插件的方式来支持不同的功能,性能非常优秀,缺点是没有管理的UI和管理API,
大部分的工作都需要手工配置config文件的方式来进行。商业版本的功能会更加完善。