Netflix Zuul 用 Nginx 实现 API 网关

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 服务。如下图:

bda64ea40e32c28bd9f21a0ed6dd4235_1733061630347-09bbbd15-bd08-43df-a779-d3dfd8ee1da0.png

下面将介绍使用 Nginx 实现 API 网关的详细步骤:

安装 Nginx

使用浏览器访问 https://nginx.org/en/download.html 地址,如下图:

7b42c80aa5d5307e710ba09d6ab70306_1733059881788-b01f160d-68fb-4817-9d63-800d5a0588ac.png

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

937a7ebbf4830550fad74e2158cc732f_1733059927460-1b35b52d-d889-40e3-aaec-12a76a90fb2c.png

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

image.png

启动依赖服务

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

7cf6fb2434c405e08786eeadff0c079c_1733062429669-75b50fd5-4c03-49e9-b0a9-b13d15ba11f4.png

配置 Nginx

进入到 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 地址,效果如下图:

4f672b8ecf118a9ec56cfd4eff809aa9_1733061434011-a8b8eca9-4f32-447e-8c6c-efc8e58106c6.png

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

08caa2f06e74e5aae2ef6ba54d4cbde0_1733061459422-cf9f3563-8ded-4761-9f2e-56c26ba5a680.png

上图中成功使用 Nginx 实现了一个 API 网关,后续将详细介绍如何使用 Zuul 1.X 实现 API 网关。

点击下载/查看本教程相关资料或者源代码。
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号