如何使用nodejs + NGINX实现REST API版本控制?

时间:2017-01-29 06:40:48

标签: node.js nginx sails.js api-versioning

从过去的几天开始,我正在研究如何在NGINX的帮助下实现API版本控制。

在应用程序级别,我能够实现但是这需要2个Diff控制器,2个diff路径,2个diff模型等。我不想这样做。

我想要两个不同的项目,比如v1和v2。使用NGINX,如果我的URL包含v1,那么它指向v1项目,如果URL包含v2,那么它将指向v2项目类似的东西。

我知道使用NGINX ALIAS或ROOT我们能做到但我不知道怎么做?

1 个答案:

答案 0 :(得分:1)

实际上,我们正在讨论如何将nginx配置为反向代理。并根据URL的内容为不同的项目执行代理。

在您的情况下,您需要:

  1. 配置sail-projects at different ports。例如:

    for API.V1:sails.config.port - > 3010

    for API.V2:sails.config.port - > 3020

  2. 添加到nginx配置(nginx.conftwo upstream(例如,位于同一服务器上的nginx和api-projects)。

  3. 为不同的api添加到服务器块内的nginx配置(nginx.conftwo locations

  4. Nginx配置可能如下所示:

    upstream api_v1 {  
      server 127.0.0.1:3010;
      keepalive 64;
    }
    
    upstream api_v2 {  
      server 127.0.0.1:3020;
      keepalive 64;
    }
    
    server {  
      listen        80;
      server_name   example.com;
    
      location /api/v1 {
        proxy_pass                          http://api_v1;
        proxy_http_version                  1.1;
        proxy_set_header  Connection        "";
        proxy_set_header  Host              $host;
        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header  X-Real-IP         $remote_addr;
      }
    
      location /api/v2 {
        proxy_pass                          http://api_v2;
        proxy_http_version                  1.1;
        proxy_set_header  Connection        "";
        proxy_set_header  Host              $host;
        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header  X-Real-IP         $remote_addr;
      }
    
    }