Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器以及电子邮件(IMAP/POP3)代理服务器。
Nginx 由俄罗斯程序员伊戈尔・赛索耶夫(Igor Sysoev)为俄罗斯访问量第二的 rambler.ru 站点开发,于 2004 年首次发布。其最初的目的是解决 C10K 问题(即同时处理一万个连接的问题),当时传统的服务器软件在处理高并发连接时性能瓶颈凸显,Nginx 凭借其高效的事件驱动的异步非阻塞 I/O 模型,在高并发场景下表现出色。
下面将介绍如何使用 Nginx 实现 API 网关,假如存在如下请求地址:
/api/order/get?id=1
/api/order/1
/api/product/get?id=1
/api/product/1
当访问 /api/order/** 地址时,会将请求路由到 order-service 服务。当访问 /api/product/** 地址时,则将请求路由到 product-service 服务。如下图:

下面将介绍使用 Nginx 实现 API 网关的详细步骤:
使用浏览器访问 https://nginx.org/en/download.html 地址,如下图:

本教程选择 Stable version 下的“nginx/Windows-1.26.2”版本,点击下载,如下图:

成功下载后,将 nginx-1.26.2.zip 文件解压到你想要的目录,如下图:

在使用 Nginx 实现 API 网关之前,先分别启动订单(order-service)、产品服务(product-service)和注册中心(eureka),方便后续使用。如下图:

进入到 Nginx 的 conf 目录,修改 nginx.conf 文件,配置一个 server {} 模块,该模块下面将分别对 /api/order 和 /api/product 地址进行处理。配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
# 订单服务
location /api/order {
# 将 /api/order 开头的地址的请求转发到 http://localhost:8092/order
proxy_pass http://localhost:8092/order;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# 产品服务
location /api/product {
# 将 /api/product 开头的地址的请求转发到 http://localhost:8091/product
proxy_pass http://localhost:8091/product;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}保存配置,重启 Nginx 服务。
使用浏览器访问 http://localhost/api/product/1 地址,效果如下图:

浏览器访问 http://localhost/api/order/1 地址,效果如下图:

上图中成功使用 Nginx 实现了一个 API 网关,后续将详细介绍如何使用 Zuul 1.X 实现 API 网关。
点击下载/查看本教程相关资料或者源代码。