Nginx负载均衡[通俗易懂]

Nginx负载均衡

大家好,又见面了,我是全栈君。

apache与nginx的区别

nginx本身只能处理静态页的解析,如果要解析动态页面的话,需要用到反向代理的功能
nginx有反向代理功能,能做负载均衡。apache没有
nginx更轻量级,占用的内存很小。而apache更稳定
nginx更适合高并发,因为nginx处理请求属于异步非阻塞的,可以多个连接(万级别)对应一个进程。而apache 则是阻塞型的,一个连接对应一个进程。
nginx 处理 静态资源 性能高于apache,处理 动态语言 性能低于apache,因为nginx处理动态语言经过的层次太多了。
Nginx负载均衡[通俗易懂]
A. 使用nginx的反向代理将请求转发到php-fpm -> B.fastcgi进程管理器(php-fpm)收到请求后选择并连接一个cgi解释器

nginx的两种负载均衡方式

轮询加权(也可以不加权,就是1:1负载)和
ip_hash(根据ip分配后端服务器,解决session问题)

// 轮询加权
upstream lb {
    server 192.168.196.130 weight=1;
    server 192.168.196.132 weight=2;
}

// ip_hash轮询
upstream lb {
    server 192.168.196.130;
    server 192.168.196.132;
    ip_hash;
}

服务器环境假设

假设
192.168.1.111(主) -> 安装有LNMP,进行负载均衡控制
192.168.1.112(从) -> 安装有LNMP,进行应用运行
192.168.1.113(从) -> 安装有LNMP,进行应用运行

LNMP的安装

每台服务器都安装LNMP
参考:https://www.kancloud.cn/wangking/linux/280755

负载均衡配置

主服务器(192.168.1.111)负载均衡配置

vim /opt/nginx/conf/vhosts/zhuifanba.conf

upstream load_balance{
    # 设置负载均衡的机器列表(采用轮询的方式)
    server 192.168.1.112:80; #从服务器1
    server 192.168.1.113:80; #从服务器2
}

server {
    listen 80;
    server_name www.zhuifanba.com;
    location / {
        #设置反向代理
        proxy_pass  http://load_balance;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

    location ~ .*\.(php|php5)?$
    {
        #设置反向代理
        proxy_pass  http://load_balance;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        # 设置静态文件的反向代理
        proxy_pass   http://load_balance;
        expires      30d;
    }

    location ~ .*\.(js|css)?$
    {
        # 设置静态文件的反向代理
        proxy_pass  http://load_balance;
        expires      1h;
    }
  
}

从服务器(192.168.1.112~113)运行环境配置

vim /opt/nginx/conf/vhosts/zhuifanba.conf

server {
    listen       80;
    server_name   www.zhuifanba.com;
    index index.html index.htm index.php;
    root /var/www/zhuifanba/frontend/web;

    location / {
        if (!-e $request_filename){
            rewrite ^/(.*) /index.php last;
        }
    }

    location ~ .*\.(php|php5)?$
    {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/zhuifanba/frontend/web$fastcgi_script_name;
        include fastcgi.conf;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 30d;
    }
    location ~ .*\.(js|css)?$
    {
        expires 1h;
    }
    
    error_log /var/log/zhuifanba.error.log;
    access_log /var/log/zhuifanba.access.log;
    
}

Nginx负载均衡[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111901.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • HTML DOM clearInterval() 方法

    HTML DOM clearInterval() 方法

    2021年10月18日
  • vue 使用数组splice方法失效,且总是删除最后一项的解决办法。[通俗易懂]

    vue 使用数组splice方法失效,且总是删除最后一项的解决办法。[通俗易懂]今天在写项目的时候,遇到一个很简单的需求,下图,点击添加标签,左边出现一个可以输入的标签,点击删除按钮,就能删除当前标签,很简单的需求,我却搞了一个多小时(哎…新手愚笨啊)一看到这个我的思路就是点击添加标签,把新增的节点push到自己定义的数组里,然后渲染出来,点击删除按钮,用splice方法从数组中删除掉当前的节点(很简单,很明确的思路嘛,但是却事与愿违) <div…

  • Android中的shell循环命令

    Android中的shell循环命令新建test.txt,写入:i=0;while[$(($i))-le5];doi=$(($i+1));echo$i;done;执行这个文件adbshell<test.txt

  • IIS7配置防盗链「建议收藏」

    IIS7配置防盗链「建议收藏」在IIS下如何实现Web的防盗链等Url重定向了,用下面的方法即可实现:1、下载微软官方提供的IISREWRITE模块:http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=1b8c7bd8-8824-4408-b8fc-49dc7f951a002、修改Web站点的web.config<syst…

  • knn算法实现手写数字识别的背景_knn手写数字识别60000训练集

    knn算法实现手写数字识别的背景_knn手写数字识别60000训练集KNN最邻近分类算法:(近邻取样)邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是机器学习分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。属于监督学习,有类别标记,且KNN是惰性学习。叫做Memory-basedlearning、也叫instance-basedlearning.他…

  • ES6中set和map「建议收藏」

    ES6中set和map「建议收藏」一。set数据容器能够存储无重复值数据的有序列表1.通过newset()方法创建容器通过add()方法添加2.set.size获取存储的数据的数量例: varset=newSet() set.add(1); set.add(‘1’); console.log(set)console.log(set.size)3.Set内部使用Obj…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号