美文网首页
Nginx配置负载均衡

Nginx配置负载均衡

作者: tscgo_cn | 来源:发表于2021-01-02 00:09 被阅读0次
    负载均衡(Load Balance),其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
    例如,当我们网站的访问量少的时候,单台服务器足以处理客户的请求。但随着我们的客户量,访问量越来越多时,单台服务器处理不过来就会造成响应时长过长,用户体验差,甚至造成服务器宕机,此时我们就需要配置服务器集群,多台服务器共同为用户提供服务,减轻单台服务器压力;而且当其中一台服务器出现问题宕机后,其他服务器依然可以正常接收处理用户请求,提高了系统的稳定性,用户体验也更好。
    本文介绍Nginx配置反向代理实现负载均衡的步骤

    一、正向代理与反向代理

    1. 正向代理

    正向代理类似一个跳板机,代理访问外部资源
    比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了
    正向代理的用途:

    1. 访问原来无法访问的资源,如google
    2. 可以做缓存,加速访问资源
    3. 对客户端访问授权,上网进行认证
    4. 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
    2. 反向代理

    反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器
    反向代理的作用:

    1. 保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网
    2. 负载均衡,通过反向代理服务器来优化网站的负载
    image.png

    二、负载均衡

    现在我们搭建一个由两台服务器组成的集群为用户提供服务。
    第一台服务器是:192.168.204.133
    第二台服务器是:192.168.204.134
    那么我们可以这样配置:所有的用户通过域名解析访问到第一台服务器:192.168.204.133的80端口,80端口由Nginx监听,接收到用户请求后,按照一定的策略(平均,权重,ip_hash等等)分发到真正处理请求的服务器中,我们设置真正处理请求的服务器是192.168.204.133的8080端口 和 192.168.204.134的80端口。这样,假如我们有100个请求同时请求我们的网站,那么可以把50个请求转发到192.168.204.133,另外50个请求转发到192.168.204.134,从而达到负载均衡的效果,减轻单机处理所有请求的压力。


    image.png

    三、负载均衡配置

    注意点:
    1,新装的Linux可能只允许访问80端口,其他端口不允许访问,此时需要配置防火墙
    2,nginx+php环境访问显示access denied 解决办法:将php.ini中cgi.fix_pathinfo从0改为1。        
    3,fastcgi_pass有两种配置,unix:/tmp/php-cgi.sock 和 127.0.0.1:9000; 默认是前者
    

    1,第一台服务器192.168.204.133的Nginx配置:
    其中192.168.204.133:80提供代理服务,负责分发用户发送的请求到集群节点,192.168.204.133:8080提供真实服务,为一个集群节点

    #nginx进程数,建议设置为等于CPU总核心数。该配置的数值越大,Nginx的并发能力就越强
    worker_processes auto;
    worker_cpu_affinity auto;
    
    #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
    error_log  /home/wwwlogs/nginx_error.log  crit;
    
    
    pid        /usr/local/nginx/logs/nginx.pid; #进程pid文件
    worker_rlimit_nofile 51200;                 #指定进程可以打开的最大描述符:数目
    
    events
       {
           use epoll;
           worker_connections 51200;#数值越大,并发能力越强
           multi_accept off;
           accept_mutex off;
       }
    
    
    http
    {
       include       mime.types;           #引入一个外部文件: ./mine.types 该文件放着大量的媒体类型 
       default_type  application/octet-stream;
    
       # 负载服务器节点
       upstream my-server
       {
           server 192.168.204.133:8080;
           server 192.168.204.134:80;
       }
    
       # 代理服务器配置:
       server
       {
           listen  80;                         #监听的端口
           server_name _;                      #访问域名
    
           location /
           {
               proxy_pass http://my-server/;   #配置想要分发到的节点
           }
    
       }
    
       # 服务器节点192.168.204.133:8080 配置:
       server
       {
           listen  8080;                       #监听的端口
           server_name _;                      #访问域名
           index index.html index.php;         #默认访问的文件
           root /home/wwwroot/default/balance; #网站根目录
    
           location /
           {
               index index.html index.php;
           }
    
           #命中php文件,交由php-cgi处理,非PHP应用忽略以下配置
           location ~ \.php(.*)$  
           {
               fastcgi_pass  unix:/tmp/php-cgi.sock;
               fastcgi_index  index.php;
               fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               fastcgi_param  PATH_INFO  $fastcgi_path_info;
               fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
               include        fastcgi_params;
           }
       }
    
    }
    
    

    2,第二台服务器192.168.204.134的Nginx配置:

    worker_processes auto;
    worker_cpu_affinity auto;
    
    error_log  /home/wwwlogs/nginx_error.log  crit;
    pid        /usr/local/nginx/logs/nginx.pid;
    worker_rlimit_nofile 51200;
    
    events
        {
            use epoll;
            worker_connections 51200;
            multi_accept off;
            accept_mutex off;
        }
    http
    {
        include       mime.types;           
        default_type  application/octet-stream;
    
    
        # 服务器节点192.168.204.134 配置:
        server
        {
            listen  80;                         #监听的端口
            server_name _;                      #访问域名
            index index.html index.php;         #默认访问的文件
            root /home/wwwroot/default;         #网站根目录
    
            location /
            {
                index index.html index.php;
            }
    
            #命中php文件,交由php-cgi处理,非PHP应用忽略以下配置
            location ~ \.php(.*)$  
            {
                fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_index  index.php;
                fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                fastcgi_param  PATH_INFO  $fastcgi_path_info;
                fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
                include        fastcgi_params;
            }
        }
    
        #include vhost/*.conf;
    }
    

    然后我们打开两个浏览器窗口模拟两个请求,共同访问 192.168.204.133 ,可以看,一个请求分发到了192.168.204.133:8080,一个请求分发到了192.168.204.134:80,此时,负载均衡配置完成。


    image.png

    相关文章

      网友评论

          本文标题:Nginx配置负载均衡

          本文链接:https://www.haomeiwen.com/subject/pwxsoktx.html