Nginx

Nginx之负载均衡

2019-10-25  本文已影响0人  红薯爱帅

1. 概述

Nginx完成对多个server的load balance,可以通过upstream完成,支持不同的规则,例如weight、backup等。
如果需要对单个server的多个URL做load balance,就不能使用upstream,需要借助rewrite完成。
例如,要完成对URL-A转发为URL-A1、URL-A2、URL-A3、URL-A4,转发规则可以轮寻,也可以是随机,也可以按weight分配。
另外,需要支持超时,以及失败次数达到上限后,不再继续向该URL转发,等健壮性要求。(规则较复杂,本文并未实现,可以考虑写一个lua插件,或者单独开发一个api-gateway)

2. 解决方案

FROM gcc:9
LABEL maintainer=shuzhang

WORKDIR /home

RUN wget http://nginx.org/download/nginx-1.17.4.tar.gz && \
    wget https://github.com/openresty/set-misc-nginx-module/archive/v0.32.tar.gz && \
    wget https://github.com/simplresty/ngx_devel_kit/archive/master.zip && \
    tar -zxvf nginx-1.17.4.tar.gz && \
    tar -zxvf v0.32.tar.gz && \
    unzip master.zip

RUN cd nginx-1.17.4 && \
    ./configure --prefix=/opt/nginx \
        --with-http_ssl_module \
        --add-module=../ngx_devel_kit-master \
        --add-module=../set-misc-nginx-module-0.32 && \
    make -j2 && make install && \
    rm -rf /home/*

EXPOSE 10386
ENTRYPOINT ["/opt/nginx/sbin/nginx"]
CMD ["-g", "daemon off;"]
worker_processes  8;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       10386;
        server_name  localhost;
        location /service/detect {
            set_random $a 0 4;
            rewrite ^/service/detect\/([^\/]+?)(\/|$) /service/detect/$1_$a break;
            proxy_pass http://127.0.0.1:10080;
        }
    }
}
# docker run -d -v ~/temp/nginx.conf:/opt/nginx/conf/nginx.conf -p 10888:10386 nginx:test

3. 后记

nginx有很多好用的三方插件,详细可以查看
https://www.nginx.com/resources/wiki/modules/

上一篇 下一篇

猜你喜欢

热点阅读