自动化Nginx服务器的反向代理的配置方法

如果可以减少过多的外部隔离的API和简化部署的细节 这会是非常好的。

在以前的文章中,我解释了"一些使用反向代理的好处"。在我目前的项目里,我们已经构建分布式面向服务的架构,也显式提供了一个HTTP API,我们使用反向代理将请求路由通过API路由给单个组件。我们选择了Nginx Web这个优秀的服务器作为我们的反向代理,它快速、可靠且易于配置。我们通过它将多个HTTP的API服务聚合到一个URL空间。举例来说,当你键入:

http://api.example.com/product/pinstripe_suit
它将被路由到:
http://10.0.1.101:8001/product/pinstripe_suit
但当你访问:
http://api.example.com/customer/103474783
它将被路由到:
http://10.0.1.104:8003/customer/103474783

对使用者来言,他们觉得是在使用同一个URL空间(http://api.example.com/blah/blah),但在后端不同的顶级分类的URL被路由到不同的后端服务器。 /prodect/...路由到 10.0.1.101:8001, /customer/…则路由到10.0.1.104:8003。 我们也希望这是自动配置。比如说我想创建一个新的组件来记录的库存水平。相比于扩展现有的组件,我更希望能够写另一个独立的可执行文件或提供服务的HTTP端点,然后自动部署成为我的云计算基础架构中的主机之一,并使Nginx的自动将http ://api.example.com/sock/whatever 路由我新组件。 我们也想进行 后端服务的负载平衡,我们也想部署我们的股票 新API的多个服务实例间的Nginx自动轮询。


我们称每个顶级分类(/stock、/produck、/customer)为一个声明。 A组件上线时通过RabbitMQ发布了一个'AddApiClaim'。此消息有3个字段:'声明','IP地址','端口地址'。我们有一个'ProxyAutomation'的特殊组件,这个组件接收这些消息并按要求重写Nginx配置项。它使用SSH和SCP登录到nginx服务器,传输各种配置文件,并指示Nginx的重新加载配置。我们使用the excellent SSH.NET库来进行自动化。

Nginx的配置是一个非常好的事情是支持通配符。看一看我们的顶级配置文件:
 复制代码 代码如下:
...
 
 http {
 
     include       /etc/nginx/mime.types;
 
     default_type  application/octet-stream;
 
  
 
     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
 
                       '$status $body_bytes_sent "$http_referer" '
 
                       '"$http_user_agent" "$http_x_forwarded_for"';
 
  
 
     access_log  /var/log/nginx/access.log  main;
 
  
 
     sendfile        on;
 
     keepalive_timeout  65;
 
  
     include /etc/nginx/conf.d/*.conf;
 
 }

如16行所描述, 将conf.d目录的所有.conf引用到此处.

在conf.d文件夹内,有一个文件包含了所有api.example.com的请求配置:
 复制代码 代码如下:
include     /etc/nginx/conf.d/api.example.com.conf.d/upstream.*.conf;
 
  
 
 server {
 
     listen          80;
 
     server_name     api.example.com;
 
  
 
     include         /etc/nginx/conf.d/api.example.com.conf.d/location.*.conf;
 
  
 
     location / {
 
         root    /usr/share/nginx/api.example.com;
 
         index   index.html index.htm;
 
     }
 
 }

这段配置让 Nginx 侦听来自 80 端口的 api.example.com 的请求。


这里包括两部分。第一个部分是第一行,我将在以后讨论。第7行表述了将子目录"api.example.com.conf.d"中的location.*.conf引用到配置中来。我们代理服务器的自动化组件添加新的组件(AKA API claims)通过引入新的location.*.conf。举个例子,我们的股票组件可能创建一个location.stock.conf配置文件,像这样:
 复制代码 代码如下:
location /stock/ {
 
     proxy_pass http://stock;
 
 }

这只是简单的告诉Nginx将所有api.example.com/stock/…的代理请求转发到'stock'中定义的后端服务器,这些定义存放在'upstream.*.conf'中。代理自动化组件也引入了一个名为upstream.stock.conf文件,它看起来像这样:
 复制代码 代码如下:
upstream stock {
 
    server 10.0.0.23:8001;
 
    server 10.0.0.23:8002;
 
}

这些配置告诉Nginx将所有到api.example.com/stock/的请求轮询到给定的地址,在这个例子中两个实例在同一台机器(10.0.0.23)上,一个在8001端口,一个在8002端口。
 

正如股票组件的部署一样,添加新条目可以同样增加到upstream.stock.conf中。同样,当组件卸载时,只要删除对应条目就可以了,当所有组件移除时,将整个文件已就删除。

这种基础架构可以让我们聚合组件的基础设备。我们可以 通过简单地添加新的组件实例来扩展应用程序。作为组件开发人员也不需要做任何代理配置,只需要确保组件发送了添加或删除API声明的消息就可以了。

标签:
Nginx,反向代理

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。