美文网首页
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