• nginx的反向代理和负载均衡的一个总结


    之前一直觉的nginx的反向代理和负载均衡很厉害的样子,最近有机会接触了一下公司的这方面的技术,发现技术就是一张窗户纸呀,捅破了啥都明白了!

    接下来先看一下nginx的反向代理:

    简单的来说就是nginx不去自己处理php相关的请求,而是将php的相关的请求转发给apache来进行处理。

    上面就是一个比较简单的一个反向代理的流程图,其实我们也可以叫做“动静分离”,只是反向代理更加的规范。

    来看一下它的一个配置:

    使用proxy_pass即可进行反向代理,官方给的说明例子:

    1 Syntax:    proxy_pass URL;
    2 Default:    —
    3 Context:    location, if in location, limit_except

    我们可以使用类似于下面的这种方法来进行配置:

    1 location / {
    2     proxy_pass http://127.0.0.1/remote/; --- http是必须要带的不然的话  是不会生效的
    3 }

    上面就是反向代理的一个简单的使用配置。

    那接下来我们来看一下负载均衡的一个概念:

    其实就是多台服务器进行共同工作,反向代理的后端如果有多台服务器,那自然可以形成负载均衡,但我们考虑一下proxpy_pass如何指向多台服务器?

    那我们其实可以将多台的服务器用一个upstream 上游的服务器组指定绑定在一起并起个组名,然后使用proxpy_pass指向该组即可。

    我们来看一下upstream的一个简单的定义:

    1 Syntax:    upstream name { ... }
    2 Default:    —
    3 Context:    http

    来看一下下面一个简单的例子:

     1 upstream backend {
     2      server backend1.example.com weight=5; //这台机器会承担5个请求,剩下的机器会承担剩余的请求压力
     3      server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
     4      server unix:/tmp/backend3;
     5  
     6      server backup1.example.com  backup;
     7  }
     8   
     9 server {
    10     location / {
    11         proxy_pass http://backend;
    12     }
    13 }

    默认的均衡的算法很简单,就是针对后端服务器的顺序,逐个请求.

    上面就是一个简单的负载均衡的一个例子。

    那我们打开日志发现,$remot_addr变成了nginx的IP,而不是用户客户端的原来的IP,那这时候怎么办?

    1 Proxy_set_header X-Forwarded-For  $remote_addr;

    在每个location中加上这么一句话,就ok了。

     再附一张我们之前测试的一个案例:

  • 相关阅读:
    Hadoop 2.2.0单节点的伪分布集成环境搭建
    CentOS系统中出现错误--SSH:connect to host centos-py port 22: Connection refused
    JUnit 5和Selenium基础(三)
    JUnit 5和Selenium基础(二)
    JUnit 5和Selenium基础(一)
    如何对N个接口按比例压测
    性能测试中标记每个请求
    初学者的API测试技巧
    Web安全检查
    Groovy重载操作符
  • 原文地址:https://www.cnblogs.com/shangzekai/p/4686521.html
Copyright © 2020-2023  润新知