设为首页 - 加入收藏 分享知识网_鹰潭站长网 (http://www.0701zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: Linu 荣耀6Plus Note
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

部署Nginx Plus作为API网关:Nginx

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

了解着名的Nginx服务器(微服务必不可少的东西)如何用作API网关。

现代应用程序体系结构的核心是HTTP API。 HTTP使应用程序能够快速构建并轻松维护。无论应用程序的规模如何,HTTP API都提供了一个通用接口,从单用途微服务到无所不包的整体。通过使用HTTP,支持超大规模Internet属性的Web应用程序交付的进步也可用于提供可靠和高性能的API交付。

部署Nginx Plus作为API网关:Nginx

有关API网关对微服务应用程序重要性的精彩介绍,请参阅我们博客上的构建微服务:使用API??网关。

作为领先的高性能,轻量级反向代理和负载均衡器,NGINX Plus具有处理API流量所需的高级HTTP处理功能。这使得NGINX Plus成为构建API网关的理想平台。在这篇博文中,我们描述了许多常见的API网关用例,并展示了如何配置NGINX Plus以便以高效,可扩展且易于维护的方式处理它们。我们描述了一个完整的配置,它可以构成生产部署的基础。

注意:除非另有说明,否则本文中的所有信息均适用于NGINX Plus和NGINX开源。

介绍Warehouse API

API网关的主要功能是为多个API提供单一,一致的入口点,无论它们在后端如何实现或部署。并非所有API都是微服务应用程序。我们的API网关需要管理现有的API,单块和正在部分过渡到微服务的应用程序。

在这篇博文中,我们引用了一个假设的库存管理API,即“仓库API”。我们使用示例配置代码来说明不同的用例。 Warehouse API是一个RESTful API,它使用JSON请求并生成JSON响应。但是,当部署为API网关时,使用JSON不是NGINX Plus的限制或要求; NGINX Plus与API本身使用的架构风格和数据格式无关。

Warehouse API实现为离散微服务的集合,并作为单个API发布。库存和定价资源作为单独的服务实施,并部署到不同的后端。所以API的路径结构是:

  1. api?└──?warehouse??
  2. ├──?inventory??
  3. ?└──?pricing?

例如,要查询当前仓库库存,客户端应用程序会向/ api / warehouse / inventory发出HTTP GET请求。

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

组织NGINX配置

使用NGINX Plus作为API网关的一个优点是,它可以执行该角色,同时充当现有HTTP流量的反向代理,负载平衡器和Web服务器。如果NGINX Plus已经是应用程序交付堆栈的一部分,那么通常不需要部署单独的API网关。但是,API网关所期望的某些默认行为与基于浏览器的流量的预期不同。出于这个原因,我们将API网关配置与基于浏览器的流量的任何现有(或未来)配置分开。

为实现这种分离,我们创建了一个支持多用途NGINX Plus实例的配置布局,并为通过CI / CD管道自动配置部署提供了便利的结构。 / etc / nginx下的结果目录结构如下所示。

  1. etc/?└──?nginx/??
  2. ?├──?api_conf.d/?.......................................?Subdirectory?for?per-API?configuration??
  3. ?│?└──?warehouse_api.conf?......?Definition?and?policy?of?the?Warehouse?API??
  4. ?├──?api_backends.conf?.....................?The?backend?services?(upstreams)??
  5. ?├──?api_gateway.conf?........................?Top-level?configuration?for?the?API?gateway?server??
  6. ?├──?api_json_errors.conf?............?HTTP?error?responses?in?JSON?format??
  7. ?├──?conf.d/?
  8. ?│?├──?...??
  9. ?│?└──?existing_apps.conf??
  10. ?└──?nginx.conf?

所有API网关配置的目录和文件名都以api_为前缀。这些文件和目录中的每一个都启用API网关的不同特性和功能,并在下面详细说明。

定义顶级API网关

所有NGINX配置都以主配置文件nginx.conf开头。要读入API网关配置,我们在nginx.conf的http块中添加一个指令,该指令引用包含网关配置的文件api_gateway.conf(下面的第28行)。请注意,默认的nginx.conf文件使用include伪指令从conf.d子目录中引入基于浏览器的HTTP配置(第29行)。本博文广泛使用include指令来提高可读性并实现配置某些部分的自动化。

  1. include?/etc/nginx/api_gateway.conf;?#?All?API?gateway?configuration?
  2. ?include?/etc/nginx/conf.d/*.conf;?#?Regular?web?traffic?

api_gateway.conf文件定义了将NGINX Plus公开为客户端的API网关的虚拟服务器。此配置公开API网关在单个入口点https://api.example.com/(第13行)发布的所有API,受第16到21行配置的TLS保护。请注意,此配置纯粹是HTTPS - 没有明文HTTP侦听器。我们希望API客户端知道正确的入口点并默认进行HTTPS连接。

  1. log_format?api_main?'$remote_addr?-?$remote_user?[$time_local]?"$request"'?
  2. ?'$status?$body_bytes_sent?"$http_referer"?"$http_user_agent"'?
  3. ?'"$http_x_forwarded_for"?"$api_name"';?
  4. ??
  5. include?api_backends.conf;?
  6. include?api_keys.conf;?
  7. ??
  8. server?{?
  9. ?set?$api_name?-;?#?Start?with?an?undefined?API?name,?each?API?will?update?this?value?
  10. ?access_log?/var/log/nginx/api_access.log?api_main;?#?Each?API?may?also?log?to?a?separate?file?
  11. ??
  12. ?listen?443?ssl;?
  13. ?server_name?api.example.com;?
  14. ??
  15. ?#?TLS?config?
  16. ?ssl_certificate?/etc/ssl/certs/api.example.com.crt;?
  17. ?ssl_certificate_key?/etc/ssl/private/api.example.com.key;?
  18. ?ssl_session_cache?shared:SSL:10m;?
  19. ?ssl_session_timeout?5m;?
  20. ?ssl_ciphers?HIGH:!aNULL:!MD5;?
  21. ?ssl_protocols?TLSv1.1?TLSv1.2;?
  22. ??
  23. ?#?API?definitions,?one?per?file?
  24. ?include?api_conf.d/*.conf;?
  25. ??
  26. ?#?Error?responses?
  27. ?error_page?404?=?@400;?#?Invalid?paths?are?treated?as?bad?requests?
  28. ?proxy_intercept_errors?on;?#?Do?not?send?backend?errors?to?the?client?
  29. ?include?api_json_errors.conf;?#?API?client?friendly?JSON?error?responses?
  30. ?default_type?application/json;?#?If?no?content-type?then?assume?JSON?
  31. }?

此配置是静态的 - 各个API及其后端服务的详细信息在第24行的include伪指令引用的文件中指定。第27到30行处理日志记录默认值和错误处理,并在响应中讨论错误部分如下。

单服务与微服务API后端

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章