Nginx配置负载均衡

负载均衡(Load Balance),其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。 例如,当我们网站的访问量少的时候,单台服务器足以处理客户的请求。但随着我们的客户量,访问量越来越多时,单台服务器处理不过来就会造成响应时长过长,用户体验差,甚至造成服务器宕机,此时我们就需要配置服务器集群,多台服务器共同为用户提供服务,减轻单台服务器压力;而且当其中一台服务器出现问题宕机后,其他服务器依然可以正常接收处理用户请求,提高了系统的稳定性,用户体验也更好。 本文介绍Nginx配置反向代理实现负载均衡的步骤 ## 一、正向代理与反向代理 #####1. 正向代理 正向代理类似一个跳板机,代理访问外部资源 比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理服务器,请求发到代理服,代理服务器能够访问谷歌,这样由代理去谷歌取到返回数据,再返回给我们,这样我们就能访问谷歌了 正向代理的用途: 1. 访问原来无法访问的资源,如google 2. 可以做缓存,加速访问资源 3. 对客户端访问授权,上网进行认证 4. 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息 ##### 2. 反向代理 反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器 反向代理的作用: 1. 保证内网的安全,阻止web攻击,大型网站,通常将反向代理作为公网访问地址,Web服务器是内网 2. 负载均衡,通过反向代理服务器来优化网站的负载 [![](http://static.tscgo.cn/FjPbHzYoExvwGWK_6Zn47r7BOrYG )](http://static.tscgo.cn/FjPbHzYoExvwGWK_6Zn47r7BOrYG ) ## 二、负载均衡 现在我们搭建一个由两台服务器组成的集群为用户提供服务。 第一台服务器是: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,从而达到负载均衡的效果,减轻单机处理所有请求的压力。 [![](http://static.tscgo.cn/FnUVWWBDFu3XWi3p_am_0Bc4cKND )](http://static.tscgo.cn/Fu1LBAIgnu5H5XrHWnE4lQZf055E ) ## 三、负载均衡配置 注意点: 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,此时,负载均衡配置完成。 [![](http://static.tscgo.cn/Fu1LBAIgnu5H5XrHWnE4lQZf055E )](http://static.tscgo.cn/Fu1LBAIgnu5H5XrHWnE4lQZf055E ) 至此,nginx的负载均衡配置已经完成,希望可以帮助到大家。

评论

  1. #1

    爱猫一族 2021-12-01 12:01:33
    有帮助!