Nginx反向代理+Go服务实践

前言

在后端开发期间,会为前端或者平台上提供API服务接口,这时、我们看完今天的文章可以详细了解到Nginx反向代理到后端服务上的过程。

Nginx:

是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。可以做反向代理、正向代理,静态服务器等。

负载均衡算法:

upstrem支持4种负载均衡调度算法:

轮询(weight):每个请求按时间顺序逐一分配到不同的后端服务器上,默认为轮询方式

url_hash:按访问URL的Hash来分配请求

ip_hash:按访问IP的Hash来分配请求,如果用户的ip固定不变,也同时可以解决session的问题

fair:根据页面大小和加载时间智能的分配请求,响应时间短的优先分配

反向代理:

客户端-->代理<-->服务端

举例说明:

比如在北京租房子,我们就好比客户端,我爱我家中介好比代理,实际上我们不一定能看到房主(服务端)

我们在租房子的过程中,知道中介是谁,但是不知道房主是谁。

服务器三台:

server 192.168.0.1
server 192.168.0.2
server 192.168.0.3

webApi服务:

Go语言基于gin框架开发的HTTP服务,服务启动监听10080端口号

/usr/local/brand/bin/webApi --config-dir=/usr/local/webApi/config api

Nginx配置:


# 进程数,一般情况下与CPU个数一致
worker_processes  24;

events {
    use epoll;
    #单个worker process进程的最大并发链接数
    worker_connections  65535;
}

http {
    # 其他配置省略
    include vhosts/api.test.com.conf;
}

api.test.com.conf配置:

server_name为api.test.com,监听80端口,将所有请求转发到http://192.168.0.*:10080下面

cat /usr/local/nginx/conf/vhost/api.test.com.conf

# 配置负载均衡,均衡负责轮询的方式进行负载
upstream api.test.com {
    # server 要代理到的服务器节点,weight是轮询的权重
    server 192.168.0.1:10080 weight=1;
    server 192.168.0.2:10080 weight=1;
    server 192.168.0.3:10080 weight=1;
}

server {
    listen       80;
    server_name  api.test.com;

    access_log  /data/log/nginx/api.test.com.access.log;
    error_log  /data/log/nginx/api.test.com.error.log;

    location / {
        # proxy_pass 要注意如何url以"/"结尾,则表示绝对路径,否则表示相对路径
        proxy_pass http://api.test.com;
    }
}

我们请求后返回:http://api.test.com/d/a?page=1&page_size=20,对应的结果有5条记录,这个时候已经说明请求是成功的。

Nginx访问日志如下:

==> /data/log/nginx/api.test.com.access.log <==
192.168.0.123 - - [22/Apr/2020:22:01:01 +0800] "GET /d/a?page=1&page_size=20 HTTP/1.1" 200 656 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36"

已经成功的访问到了我们的Nginx+Go服务。

总结

本文中实践了Nginx代理到后端Go服务的知识,部署简单,实用。