在之前的文章《有趣网站盲盒项目设计》中网站的后端使用了nginx,使用了4个docker容器作为后端服务,本文介绍其转发规则的设置;

一、Nginx的反向代理与负载均衡

Nginx除了实现基本的Web Server功能之外还可以作为正向代理与反向代理。正向代理与反向代理的区别在于代理的对象不一样。正向代理的对象是客户端,反向代理的对象是服务端。做正向代理时,当客户端发起请求其访问目标应该是后端真实服务器;做反向代理时,客户端发起请求其目标应该是代理服务器本身,由代理服务器把后端真实服务器上的数据发给了客户端。反向代理通常是作为负载均衡来分发流量给后端的应用程序服务器,以此来提高性能。比如前端是一台Nginx作为负载均衡的分发器,后端是多台Apache搭建的Web Server,当访问流量很大时,就让Nginx分发请求给后端多台服务器,让它们分工响应。

我们的服务使用的是反向代理功能;

二、Nginx负载均衡模块——ngx_http_upstream_module

要实现Nginx负载均衡需要用到ngx_http_upstream_module模块和proxy_pass模块。其中ngx_http_upstream_module模块只能定义在nginx.conf的http字段中,该模块定义了需要反向代理的服务器池,然后进行负载均衡,最终再由proxy_pass模块进行反向代理。代理方式支持fastcgi_pass、memcached_pass、uwsgi等。

1、ngx_http_upstream_module中upstream常用参数

server:负载均衡后端服务器的IP或域名,不写端口的话默认是80。高并发场景用域名,再通过DNS进行负载均衡

weight:后端服务器权重,默认为1,权重越大接收的请求越多。例:weight=5

max_fails:检查节点的健康状态并允许请求失败的次数,达到该次数就将节点下线。默认为1,0表示禁止失败尝试。例:max_fails=2

fail_timeout:max_fails失败次数达到限制后暂停该节点服务的时间,默认是10秒。例:fail_timeout=10s

backup:热备配置,当服务池中所有服务器均出现问题后会自动上线backup服务器

down:标志服务器不可用,不参与负载均衡。这个参数通常配合IP_HASH使用

max_conns:限制最大连接数,通常对后端服务器硬件不一致的情况进行配置

keepalive:限制空闲长连接的最大数量

keepalive_timeout:空闲长连接的最长保持时间

keepalive_requests:每个长连接最多可以处理的请求数

2、upstream配置示例

upstream linuxe_backend {
  server 192.168.1.110 down;  #该节点不可用
  server 192.168.1.120 backup;  #其他节点挂了后该节点自动上线
  server 192.168.1.130 max_failes=1 fail_timeout=10s weight-5;
  server backend1.linuxe.cn 8080 weight=3
  keepalive 32;  #最多允许32个长连接
  keepalive_timeout 30s;  #每个长连接保持30秒
  keepalive_requests 100;  #每个长连接允许100个请求
}

3、upstream负载均衡的算法

轮询算法(默认算法):每个请求会依次分配给后端不同的应用程序服务器,不理会后端服务器的实际压力。如下面代码,当用户访问www.myserver.com站点时,Nginx会负载平衡分配给后端的三个服务器。使用ab做压力测试可以看到在加了负载均衡后Time per request(每个请求平均消耗时间)降低、Request per second(每秒请求数)提升。如果没有配置upstream模块而只使用proxy_pass模块,可以实现反向代理的作用。

http {        #upstream模块包含在http模块下
    upstream  myserver{        #定义upstream名字,下面会引用
        server 192.168.1.100;        #指定后端服务器地址
        server 192.168.1.110;        #指定后端服务器地址
        server 192.168.1.120;        #指定后端服务器地址
    }
    server {
        listen 80;
        server name www.myserver.com;
        location / {
            proxy_pass http://myserver;        #引用upstream
        }
    }
}
加权负载均衡:权重越大的服务器,被分配到的次数就会越多,通常用于后端服务器性能不一致的情况。在下面代码中,每3个请求都分配给192.168.1.100,然后第4个请求会分配给192.168.1.110,如此循环下去 http {     
    upstream  myserver{       
        server 192.168.1.100 weight=3;        #指定后端服务器地址,权重为3
        server 192.168.1.110;     
    }
    server {
        listen 80;
        server name www.myserver.com;
        location / {
            proxy_pass http://myserver;       
        }
    }
}
IP HASH:当同IP进行重复访问时会被指定到上次访问到的服务器,可以解决动态网站SESSION共享问题。如果需要将客户与后端一台服务器“绑定”起来,可以使用ip-hash负载平衡。这样可以确保来自相同客户机的请求总是指向相同的服务器除非该服务器不可用。 upstream myserver {
    ip_hash;        #采用IP HASH算法
    server 192.168.1.100;
    server 192.168.1.110;
    server 192.168.1.120;
}
基于URL的HASH:当客户端多次访问同一个地址时分配到固定的节点 upstream myserver {
    hash $request_uri;   
    server 192.168.1.100;
    server 192.168.1.110;
    server 192.168.1.120;
}
最少连接数轮询:哪个节点当前的连接数少就分配给哪个节点处理 least_conn;

三、Nginx反向代理模块——proxy_pass

1、proxy_pass语法示例

#将/test的请求转发到127.0.0.1的81端口
location = /test {
  proxy_pass http://127.0.0.1:81
}

2、proxy_pass模块常用指令

proxy_pass:指定需要反向代理的服务器地址,可以是一个upstream池

proxy_next_upstream:如果后端服务器不可用的话自动将请求转发到另一台服务器,默认为on,还可以设置为timeout或者http状态码

proxy_method:修改用户的method请求

proxy_http_version:修改用户的http协议版本

proxy_set_header:修改用户header头部,如客户端真实IP信息,也是配置较多的选项

proxy_set_body:修改用户包体信息

proxy_send_timeout:默认60S

proxy_connect_timeout:默认60S,Nginx与后端服务器连接超时时间

server {
  listen 80;
  server_name linxue.cn;
  location / {
    proxy_pass http://192.168.94.10:8080;
    proxy_method PUT;
    proxy_http_version 1.1;
    proxy_set_header test "var modify by nginx";
  }
}

3、proxy_pass“/”的常见误区。不带"/"的话不会修改用户的URL,用户请求的是什么URL就返回什么URL;带"/"则相反,会将location指定的URL从用户URL删除掉

#下面的配置,当用户请求/bbs/abc/test.html时最终返回http://127.0.0.1:8080/bbs/abc/test.html
location /bbs/ {
  proxy_pass http://127.0.0.1:8080;
}

#当用户请求/bbs/abc/test.html时最终返回http://127.0.0.1:8080/abc/test.html
location /bbs/ {
  proxy_pass http://127.0.0.1:8080/;
}

#示例3
location /test {
  proxy_pass http://127.0.0.1:81;  #如果这里写http://127.0.0.1:81/则是将uri /test/替换为了/
}

四、Nginx高可用的实现

利用backup标签可以实现高可用,当所有节点挂掉后backup服务器会自动接管服务,当有任意一台节点恢复后backup也会自动放弃服务

http {     
    upstream  myserver{       
        server 192.168.1.100
        server 192.168.1.110 backup;  
    }
    server {
        listen 80;
        server name www.myserver.com;
        location / {
            proxy_pass http://myserver;       
        }
    }
}

从上面多个配置示例来看Nginx的upstream模块相当于是建立一个服务池,把后端的服务器都放在池子里,而proxy模块则是从这个池子里调用这些服务器。

五、线上配置示例:

#先在nginx.conf中定义一组upstream
upstream pre-cloud_Backend {
         server pre-cloud.website.com:8080;
         ip_hash;
         check interval=5000 rise=1 fall=3 timeout=30000;
         check_http_expect_alive http_2xx http_3xx;  #tengine的健康检查模块
 }

#conf.d/下定义一个文件                                        
server{
        listen 80;
        server_name cloud.website.com;
        limit_conn perserver 10000;

location / {
        proxy_next_upstream error timeout http_503 http_504 http_502;  #如果请求当前节点触发了这里指定的条件就将请求转发到下一个机器
        proxy_connect_timeout 500s;
        proxy_read_timeout 500s;
        proxy_send_timeout 500s;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_pass http://pre-cloud_Backend;
        }
}

upstream与proxy_pass实现反向代理配置教程相关推荐

  1. Fikker反向代理配置教程

    fikker官网 :http://www.fikker.com/ 进入下载页面,可以直接下载最新版本,也可以看安装教程 1.步骤一:解压          Fikker 为绿色安装包,下载/解压在安装 ...

  2. Nginx教程系列四:实现反向代理配置

    文章目录 案例一 安装tomcat 配置Nginx反向代理 测试 案例二 安装第二个tomcat实例 准备测试页面 配置Nginx反向代理 测试 location 指令说明 案例一 预先安装nginx ...

  3. Nginx实现HTTP反向代理配置

    Nginx实现HTTP反向代理配置 无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教 ...

  4. Nginx 部署、反向代理配置、负载均衡

    Nginx 部署.反向代理配置.负载均衡 最近我们的angular项目部署,我们采用的的是Nginx,下面对Nginx做一个简单的介绍. 为什么选择Nginx 轻:相比于Apache,同样的web服务 ...

  5. Nginx安装/负载均衡/反向代理配置与调优

    [Nginx安装] Linux下直接使用包管理安装 sudo apt-get install nginx 使用whereis命令查看安装位置 whereis nginx #sbin下代表nginx可执 ...

  6. nginx反向代理配置及优化

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liuyu.blog.51cto.com/183345/166381 nginx反 ...

  7. nginx反向代理配置实例分享

    nginx反向代理配置一例. 配置内容如下: user www www; worker_processes 8; error_log /usr/local/webserver/nginx/logs/n ...

  8. nginx反向代理模块配置详解_nginx反向代理配置详解

    反向代理配置 修改部署目录下conf子目录的nginx.conf文件(如/opt/nginx/conf/nginx.conf)内容,可调整相关配置. 将默认配置里面带#号注释内容去掉 grep -v ...

  9. 利用nginx+lua+redis实现反向代理方法教程

    这篇文章主要给大家介绍了利用nginx+lua+redis实现反向代理方法教程,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 前言 最近因为工作需要,要进行IVR的 ...

最新文章

  1. 数据结构与算法——递归、回溯与分治
  2. python接口测试_python接口测试—get请求
  3. 拦截器和过滤器区别_新手能看懂的(Interceptor)和(Filter)区别与使用!
  4. 如何把MySql数据库中的数据导入到MyCat集群中_---Linux运维工作笔记050
  5. 可视化实验五:大数据可视化工具—NodeXL
  6. 怎么用c语言编写2的n次方,2的n次方用C语言怎么编写程序
  7. 计算机解释英文缩写x,计算机组成原理英文缩写解释
  8. 安装semantic segmentation editor
  9. 经典点云配准算法:迭代最近点算法ICP(Iterative Closest Point)
  10. 未来教育二级mysql怎么做题_计算机二级买了未来教育,但是不知道该怎么学习,就是单纯的刷题吗?感觉没有书有点不习惯,怎么办?...
  11. 快捷餐饮之店家后台系统管理实现
  12. solidworks属性管理器_发现SOLIDWORKS自定义属性(下)
  13. 产生虚假的用于欺骗的IP数据包程序实践——Teardrop
  14. 深度Linux如何安装驱动程序,在Deepin 20系统下手动安装N卡闭源驱动64-440.31.run的步骤...
  15. 4.2.1 积分法(一)——第一类换元积分法
  16. IPv6基础介绍及常用命令盘点
  17. Redis的一些知识
  18. 基于微信小程序的加油服务系统毕业设计源码
  19. About Maze Problem
  20. 线上抓娃娃方案的选型方法

热门文章

  1. DV-Hop算法原理
  2. 2019天池大数据-全球城市计算AI挑战赛经验分享
  3. webpack配置:安装了webpack和webpack-cli,但是运行webpack命令报错_
  4. 家用路由器工作的原理
  5. (转载)80后一代的尴尬
  6. DP之钢管切割,最长回文字符串,最长公共子串
  7. SQL语言的基本用法——学习笔记
  8. 【BZOJ3165】Segment(李超线段树)
  9. Java中文汉字排序
  10. uniapp 苹果支付注意事项(前端)