nginx 反向代理 负载均衡配置

匿名 (未验证) 提交于 2019-12-02 22:10:10

负载均衡是指一台主服务器接收请求,转发到多台服务器组成的服务器集群,让多台服务器平均分担负载。

我在VMware上装了3台centos,其中一台作为反向代理服务器,其余两台组成服务器集群。

A:192.168.0.167
B:192.168.0.168
C:192.168.0.169 反向代理服务器

用户直接访问C服务器,由C服务器转发请求到A和B服务器。

C服务器nginx.conf 配置:
在 http { 内添加以下代码

upstream myserver {      #myserver为自定义的名称       server  192.168.0.167:80;  #服务器A的ip       server  192.168.0.168:80;  #服务器B的ip     }

在location / { 内添加以下代码

proxy_pass http://myserver;  #转发到哪个服务器集群,我这里为http://myserver

A、B服务器nginx.conf 配置(如果服务器中只有一个server域,这一步可以省略)
把 server { 内的server_name改成服务器C的ip或域名

server_name 192.168.0.169;

然后把两个完全一样的项目分别部署到服务器A、B上。
这里为了测试,我把两个index.php文件分别放到A、B服务器上
并分别写入内容

 echo '这里是服务器A';
 echo '这里是服务器B';

在浏览器输入反向代理服务器C的IP:

反复刷新浏览器,结果为两个内容交替显示,说明反向代理服务器是轮流把请求转发到服务器集群中的服务器的。至此完成了一个简单的负载均衡配置。

为什么会轮流交替转发呢?因为upstream默认是以轮询的方式,按照请求的时间顺序向服务器集群中的服务器轮流分配,如果遇到宕机的服务器,即把请求转向下个服务器。upstream还有其他分配策略,下面介绍其中几种:

ip_hash
根据IP分配,相同IP的请求会分配到同一服务器,可以解决session的问题。

upstream 192.168.0.169 {                ip_hash;       server  192.168.0.167:80;         server  192.168.0.168:80;       }

还可以为每个服务器分别设置分配规则:

  1. weight:权重,设置值越大,被分配到几率越大。
  2. backup:备用服务器,当其他服务器宕机的时候才会启用。
  3. down:表示不使用该服务器。
upstream 192.168.0.169 {           server  192.168.0.165:80 weight=1;         server  192.168.0.166:80 weight=2;            server  192.168.0.167:80 backup;         server  192.168.0.168:80 down;       }

以上,反向代理服务器C仅仅只作为一个负责转发请求的中转站,是否有点浪费?
那么我们可以把服务器C也配置成一个可以提供后端服务的服务器,让其既作为一个反向代理服务器,又作为服务器集群中的一份子。
在nginx.conf的http { 内添加一个server段,让其侦听与反向代理服务器不同的端口

server {         listen 8080;    #侦听端口         server_name 192.168.0.169;    #反向代理服务器IP或域名         root /www;    #网站根目录          location / {                 index index.html index.php;         }         location ~ \.php {             fastcgi_pass   127.0.0.1:9000;             fastcgi_index  index.php;             fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;             include        fastcgi_params;         }      }

然后在upstream内加入此sever的ip和端口

upstream myserver {       server  192.168.0.167:80;       server  192.168.0.168:80;       server 192.168.0.169:8080;    #添加此IP和端口     }

再把网站部署到根目录里面就可以了。

又或者,可以把反向代理服务器配置为缓存服务器

在http中写入以下代码:

proxy_cache_path /cache/servercache levels=1:2 keys_zone=testCache:1m inactive=1h max_size=30m;

各参数解释:
proxy_cache_path /cache/servercache 缓存路径,缓存文件夹的上级文件夹必须要指定,否则会保存,如这里要手动建立 /cache 文件夹;
levels=1:2 缓存目录的层级名称,这里指定两层目录,第一次名称为一个字母,第二层为两个;
keys_zone=testCache:1m 指定缓存区名称和内存缓存空间大小;
inactive=2h 缓存数据超过两小时没人访问将会自动删除;
max_size=30m 指定硬盘缓存空间大小;

然后加入一下代码

proxy_cache testCache;  #指定使用的缓存去,设置为上面keys_zone指定的缓存区 proxy_cache_valid  200 304  12h; #设置各状态码的缓存时间,若不指定状态码只写12h,即默认只缓存200、301、302 #proxy_cache_valid any 1m;  #也可以用any代替所有状态码

这些代码写在 http server location 任一个域里面都可以

访问一下网站,看有没有生成缓存文件

文章来源: https://blog.csdn.net/codercwm/article/details/89062340
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!