基于Nginx的API部署方案

核心内容:

1、介绍 Nginx
2、介绍如何安装 Nginx
3、介绍如何配置 Nginx
Nginx介绍
Nginx是一个自由,开源,高性能及轻量级的HTTP服务器和反向代理服务器,它有很多功能,主要功能为:
1.正向代理
2.反向代理
3.负载均衡
4.HTTP服务器(包括动静分离)

Nginx反向代理功能:

Nginx 最常用的功能之一是作为一个反向代理服务器。反向代理(Reverse Proxy)是指以代理服务器来接收 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器(摘自百度百科)。

为什么需要反向代理呢?在实际的生产环境中,服务部署的网络(内网)跟外部网络(外网)通常是不通的,需要通过一台既能够访问内网又能够访问外网的服务器来做中转,这种服务器就是反向代理服务器。Nginx 作为反向代理服务器,简单的配置如下:

server {                     
    listen      80;           
    server_name  apiserver.com;    
    client_max_body_size 1024M;
                             
    location / {             
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://127.0.0.1:8080/;
        client_max_body_size 100m;
    }                        
}

Nginx在做反向代理服务器时,能够根据不同的配置规则转发到后端不同的服务器。

Nginx负载均衡功能:

Nginx 另一个常用的功能是负载均衡,所谓的负载均衡就是指当 Nginx 收到一个 HTTP 请求后,会根据负载策略将请求转发到不同的后端服务器上。比如,apiserver 部署在两台服务器 A 和 B 上,当请求到达 Nginx 后,Nginx 会根据 A 和 B 服务器上的负载情况,将请求转发到负载较小的那台服务器上。这里要求 apiserver 是无状态的服务。

安装和启动 Nginx(需要切换到 root 用户):

1. 安装Nginx(CentOS 7.x安装流程)

$ yum -y install nginx

2. 确认Nginx安装成功

$ nginx -v

3.启动Nginx

$ systemctl start nginx

4.设置开机启动

$ systemctl enable nginx

5.查看Nginx启动状态

提示:这里统计学习计划的总量

$ systemctl status nginx

Nginx 常用命令

nginx -s stop       快速关闭 Nginx,可能不保存相关信息,并迅速终止 Web 服务
nginx -s quit       平稳关闭 Nginx,保存相关信息,有安排的结束 Web 服务
nginx -s reload     因改变了 Nginx 相关配置,需要重新加载配置而重载
nginx -s reopen     重新打开日志文件
nginx -c filename   为 Nginx 指定一个配置文件,来代替默认的
nginx -t            不运行,而仅仅测试配置文件。Nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
nginx -v            显示 Nginx 的版本
nginx -V            显示 Nginx 的版本、编译器版本和配置参数

Nginx 默认监听 80 端口,启动 Nginx 前要确保 80 端口没有被占用。当然你也可以通过修改 Nginx 配置文件 /etc/nginx/nginx.conf 改 Nginx 监听端口。

配置Nginx作为反向代理:

假定要访问的 API 服务器域名为 apiserver.com,在 /etc/nginx/nginx.conf 配置 API 服务器的 server 入口:
在这里插入图片描述
完成nginx.conf内容如下:

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

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;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    server {  
        listen      80;                                                        
        server_name  apiserver.com;                                              
        client_max_body_size 1024M;

        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass  http://127.0.0.1:8080/;
            client_max_body_size 5m;
        }
    } 
}

配置说明
● 由于 Nginx 默认允许客户端请求的最大单文件字节数为 1MB,实际生产环境中可能太小,所以这里将此限制改为 5MB(client_max_body_size 5m)
● server_name:说明使用哪个域名来访问
● proxy_pass:反向代理的路径(这里是本机的 API 服务,所以IP为 127.0.0.1。端口要和 API 服务端口一致:8080)
测试
1.配置完Nginx后重启Nginx

$ systemctl restart nginx

2.在编辑完apiserver后,启动API服务

$ ./apiserver

3.在/etc/hosts 中添加一行:127.0.0.1.apiserver.com
4.发送HTTP请求

$ curl -XGET -H "Content-Type: application/json" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MjgwMTY5MjIsImlkIjowLCJuYmYiOjE1MjgwMTY5MjIsInVzZXJuYW1lIjoiYWRtaW4ifQ.LjxrK9DuAwAzUD8-9v43NzWBN7HXsSLfebw92DKd1JQ" http://apiserver.com/v1/user 

{
  "code": 0,
  "message": "OK",
  "data": {
    "totalCount": 1,
    "userList": [
      {
        "id": 0,
        "username": "admin",
        "sayHello": "Hello Jypl3DSig",
        "password": "$2a$10$veGcArz47VGj7l9xN7g2iuT9TF21jLI1YGXarGzvARNdnt4inC9PG",
        "createdAt": "2018-05-28 00:25:33",
        "updatedAt": "2018-05-28 00:25:33"
      }
    ]
  }
}

成功通过代理访问后端的API服务。
请求流程说明
在用 curl 请求 http://apiserver.com/v1/user 后,后端的请求流程实际上是这样的:

  1. 因为在 /etc/hosts 中配置了 127.0.0.1 apiserver.com,所以请求 http://apiserver.com/v1/use 实际上是请求本机的 Nginx 端口(127.0.0.1:80)
  2. Nginx 在收到请求后,解析到请求域名为 apiserver.com,根据请求域名去匹配 Nginx 的 server 配置,匹配到 server_name apiserver.com 配置
  3. 匹配到 server 后,把请求转发到该 server 的 proxy_pass 路径
  4. 等待 API 服务器返回结果,并返回客户端

配置Nginx作为负载均衡:

负载均衡的演示需要多个后端服务,为此我们在同一个服务器上启动多个 apiserver,配置不同的端口(8080、8082),并采用 Nginx 默认的轮询转发策略(轮询:每个请求按时间顺序逐一分配到不同的后端服务器)。

在 /etc/nginx/nginx.conf 中添加 upstream 配置:
在这里插入图片描述
配置说明
● 因为有多个后端,所以需要将之前固定的后端 proxy_pass http://127.0.0.1:8080/ 换成具有多个后端的 apiserver.com(通过 upstream)
● upstream 配置中配置多个后端(ip:port)

upstream apiserver.com {
    server 127.0.0.1:8080;
    server 127.0.0.1:8082;
}

配置Nginx作为反向代理:

在实际项目中,API服务器所在的网络通常不能直接通过外网访问,需要通过外网访问的Nginx服务器,将请求转发到内网的API服务器。并且随着业务规模越来越大,请求量也会越来越大,这时候需要将API横向扩容,也需要Nginx。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

终生成长者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值