加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

部署Nginx Plus作为API网关:Nginx

发布时间:2019-09-04 23:20:08 所属栏目:教程 来源:首席架构师
导读:了解着名的Nginx服务器(微服务必不可少的东西)如何用作API网关。 现代应用程序体系结构的核心是HTTP API。 HTTP使应用程序能够快速构建并轻松维护。无论应用程序的规模如何,HTTP API都提供了一个通用接口,从单用途微服务到无所不包的整体。通过使用HTTP

在这个阶段,我们的政策部分非常简单。位置块本身标记为第16行,这意味着客户端无法直接向它发出请求。重新定义$ api_name变量以匹配API的名称,以便它在日志文件中正确显示。最后,请求被代理到API定义部分中指定的上游组,使用$ request_uri变量 - 其中包含原始请求URI,未经修改。

选择广泛或者精确的API定义

API定义有两种方法 - 广泛而精确。每种API最合适的方法取决于API的安全要求以及后端服务是否需要处理无效的URI。

在warehouse_api_simple.conf中,我们通过在第3行和第8行定义URI前缀来使用Warehouse API的广泛方法。这意味着以任一前缀开头的任何URI都代理到相应的后端服务。使用基于前缀的位置匹配,对以下URI的API请求都是有效的:

  • /api/warehouse/inventory
  • /api/warehouse/inventory/
  • /api/warehouse/inventory/foo
  • /api/warehouse/inventoryfoo
  • /api/warehouse/inventoryfoo/bar/

如果唯一的考虑是将每个请求代理到正确的后端服务,则广泛的方法提供最快的处理和最紧凑的配置。另一方面,精确的方法使API网关能够通过显式定义每个可用API资源的URI路径来理解API的完整URI空间。采用精确的方法,Warehouse API的以下配置使用精确匹配(=)和正则表达式(〜)的组合来定义每个URI。

  1. location = /api/warehouse/inventory { # Complete inventory 
  2.  set $upstream inventory_service; 
  3.  rewrite ^ /_warehouse last; 
  4.   
  5. location ~ ^/api/warehouse/inventory/shelf/[^/]*$ { # Shelf inventory 
  6.  set $upstream inventory_service; 
  7.  rewrite ^ /_warehouse last; 
  8.   
  9. location ~ ^/api/warehouse/inventory/shelf/[^/]*/box/[^/]*$ { # Box on shelf 
  10.  set $upstream inventory_service; 
  11.  rewrite ^ /_warehouse last; 
  12.   
  13. location ~ ^/api/warehouse/pricing/[^/]*$ { # Price for specific item 
  14.  set $upstream pricing_service; 
  15.  rewrite ^ /_warehouse last; 

此配置更详细,但更准确地描述了后端服务实现的资源。这具有保护后端服务免于格式错误的客户端请求的优点,代价是正常表达式匹配的一些小额外开销。有了这个配置,NGINX Plus接受一些URI并拒绝其他URI无效:

「微服务架构」部署NGINX Plus作为API网关,第1部分 - NGINX

使用精确的API定义,现有的API文档格式可以驱动API网关的配置。可以从OpenAPI规范(以前称为Swagger)自动化NGINX Plus API定义。此博客文章的Gists中提供了用于此目的的示例脚本。

重写客户请求

随着API的发展,有时会发生需要更新客户端的重大更改。一个这样的示例是重命名或移动API资源。与Web浏览器不同,API网关无法向其客户端发送命名新位置的重定向(代码301)。幸运的是,当修改API客户端不切实际时,我们可以动态地重写客户端请求。

在下面的示例中,我们可以在第3行看到定价服务以前是作为库存服务的一部分实现的:rewrite指令将对旧定价资源的请求转换为新的定价服务。

  1. # Rewrite rules 
  2. rewrite ^/api/warehouse/inventory/item/price/(.*) /api/warehouse/pricing/$1; 
  3.   
  4. # API definition 
  5. location /api/warehouse/inventory { 
  6.  set $upstream inventory_service; 
  7.  rewrite ^(.*)$ /_warehouse$1 last; 
  8.   
  9. location /api/warehouse/pricing { 
  10.  set $upstream pricing_service; 
  11.  rewrite ^(.*) /_warehouse$1 last; 
  12.   
  13. # Policy section 
  14. location /_warehouse { 
  15.  internal; 
  16.  set $api_name "Warehouse"; 
  17.   
  18.  # Policy configuration here (authentication, rate limiting, logging, more...) 
  19.   
  20.  rewrite ^/_warehouse/(.*)$ /$1 break; # Remove /_warehouse prefix 
  21.  proxy_pass http://$upstream; # Proxy the rewritten URI 

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读