nginx反代之前端调度

简介:

  前言

    正如大家所知nginx可以作为web服务器,提供web服务,也可使用其模块进行前端调度,实现负载均衡的功能,在此我们来叙说其前端调度功能。

    

    一、常用模块说明 

    ngx_http_proxy_module(负载均衡,反代模块)

    1.proxy_pass URL;    #反代及其输出其路径 

    示例:location / {

        proxy_pass http://192.168.184.129:80;    

    }

            

 location /bbs/ {

        proxy_pass http://192.168.184.129:80;

   }

 location /bbs/ {

        proxy_pass http://192.168.184.129:80;

   }

 location /bbs/ {

        proxy_pass http://192.168.184.129:80/;

   }

location ~|~* PATTERN {

        proxy_pass http://192.168.184.129:80;

   }



    注意:proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机,在uri后加上斜杠时,则将是/下的文件请求为其站点目录。如果location定义其uri时使用正则表达式的模式,则proxy_pass之后必须不能使用uri,否则为语法错误。

   2. proxy_set_header    fileld    value; #设置发往后端主机请求报文的首部信息

    示例:proxy_set header X-REAL-IP $remote_addr;  

    3.proxy_cache_path    #定义代理缓存路径 

    proxy_cache zone #调用的缓存名称; 

    proxy_cache_key string; #调用的缓存键值; 

    proxy_cache_vaild time; #各种响应码的缓存时长;

    示例:

    proxy_cache proxycache; 

    proxy_cache_key $request_uri

    proxy_cache_vaild 200 302 10m;

    proxy_cache_valid 301 1h;

    proxy_cache_valid any 1m; 


    ngx_http_upstream_module:(upstream模块) 

    upstream模块用来定义一个server组的反代模块,主要是由proxy_pass,fastcgi_pass,uwsgi_pass....组成。

    1.upstream name {...}  #定义一个服务端组,只能在http上下文中定义

        upstream webserver 

    2.server address #后端主机IP地址 

    参数:

        ①weight=number #权重,默认为1,

        ②max_fails=number #失败的尝试最大次数

        ③fail_timeout=time #服务器不可以超时时间

        ④backup #把服务器当做备用状态,可使用为sorry server

        ⑤down #标记为不可用状态

    示例:

    upstream dynamic {

        zone upstream_dynamic 64k;

        server backend1.example.com      weight=5;

        server backend2.example.com:8080 fail_timeout=5s slow_start=30s;

        server 192.0.2.1                 max_fails=3;

        server backend3.example.com      resolve;

        server backend4.example.com      service=http resolve;

        server backup1.example.com:8080  backup;

        server backup2.example.com:8080  backup;

    }

    3.least_conn; #最少连接算法,当server权重不相同是为wlc即加权最少连接

    4.ip_hash;    #源地址哈希,能将来自于相同ip地址的主机发往同一个后端real server。 

    5.hash key [consistent]; #基于指定的key的hash表实现请求调度。     

        hash $request_uri;

        hash $remote_addr;

        hash $cookie_name; 

    6.keepalive_connectons: #可使用的保持连接的连接数   

    

    7.health_check [parameters];

        定义对后端主机的健康状态进行检测机制,只能用于location上下文;

    可用参数:

        ①interval=time #检测频率,默认为5秒

        ②fails=number #判断服务器状态转为失败需要检测的次数

        ③passes=number #判断服务器状态转为成功需要检测的次数

        ④uri=uri #判断其健康与否是使用的uri

        ⑤match #基于指定的match来衡量检测结构的成败

    

    ngx_stream_core_module:

    1.listen address:port [ssl] [udp] [backlog=number] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];

监听的端口;

默认为tcp协议;

udp: 监听udp协议的端口;

    实例:

    steam {

        upstream webserver {

            server 192.168.184.130:22;

            server 192.168.184.132:22;

            hash $request_uri;

    }

    server {

        listen    10.1.100.1:2203;

        proxy_pass webserver;

    }

    }

    

    实验环境极其步骤:

    1、实验环境:一台前端调度器,两台后端真实主机,其ip地址分别为:

     调度器:10.1.10.1

    real_server1:192.168.184.130

    real_server2:192.168.184.132

    2、在调度器上配置反代proxy_pass,如下拓扑图:

wKioL1gTZzjTfNQdAACEpH56CXw894.png


实验截图:

wKioL1gUEtKiQx5eAABiXtYb_NM563.png


实验结果:

wKiom1gUFWehu2rKAAAlYWbtvIw054.png

注意设置内存缓存时需要在http模块写入代理缓存路径:proxy_cache_path如: proxy_cache_path /var/cache/nginx/proxy levels=2:1:2 keys_zone=proxycache:10m max_size=1g;同时proxy_pass也同样支持正则表达式模式匹配。

upstream模块:

wKioL1gUFNLBaJkNAAA3-iVIyWo934.png


注意:此模块定义时需在location中调用才能生效:proxy_pass http://webserver;


实验结果图:

wKioL1gUFfjRKHz2AAAuSf8aX1Y748.png


stream_module:

wKiom1gUFrLSClwcAAAt1243xpY765.png



    上诉则为nginx的反代模块,如需清晰的掌握需结合实际的应用程序加以测试,如搭建WordPress等应用程序测试是否能实现前端调度功能。


本文转自chengong1013 51CTO博客,原文链接:http://blog.51cto.com/purify/1867063,如需转载请自行联系原作者

相关文章
|
5月前
|
缓存 负载均衡 前端开发
写给前端的nginx知识
写给前端的nginx知识
46 1
|
24天前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
99 0
|
4月前
|
负载均衡 前端开发 应用服务中间件
【Linux】Nginx安装使用负载均衡及动静分离(前后端项目部署),前端项目打包
【Linux】Nginx安装使用负载均衡及动静分离(前后端项目部署),前端项目打包
381 0
|
1天前
|
前端开发 JavaScript 应用服务中间件
前端vue2、vue3去掉url路由“ # ”号——nginx配置(二)
前端vue2、vue3去掉url路由“ # ”号——nginx配置
14 0
|
4月前
|
前端开发 应用服务中间件 nginx
前端破圈使用Docker Nginx容器部署项目🏴‍☠️
前端破圈使用Docker Nginx容器部署项目🏴‍☠️
|
3月前
|
前端开发 应用服务中间件 nginx
Docker 安装 Nginx 部署前端项目
Docker 安装 Nginx 部署前端项目
308 1
|
4月前
|
缓存 前端开发 网络协议
前端必备 Nginx 配置
前端必备 Nginx 配置
50 0
|
5月前
|
前端开发 JavaScript 应用服务中间件
nginx配置vue前端代理
nginx配置vue前端代理
79 0
|
5月前
|
前端开发 应用服务中间件 nginx
用docker和nginx部署前端项目访问本地java网关gateway服务
本地开发 java 微服务项目,但是拿到的对应的web前端项目只有打包编译过后的 dist 目录里的静态资源(里面只有一个index.html和一些编译过后的 js、css文件),前端接口需要先访问到 java 的网关服务,然后网关里再做转发
194 1
|
5月前
|
前端开发 应用服务中间件 nginx
Nginx启动本地前端项目
Nginx启动本地前端项目