linux 下 nginx的负载均衡
发布时间:2021-01-17 05:37:05 所属栏目:Nginx 来源:互联网
导读:nginx是如何实现负载均衡的,nginx的upstream目前支持以下几种方式的分配: 1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2、w
|
nginx是如何实现负载均衡的,nginx的upstream目前支持以下几种方式的分配: 1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 2、ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 3、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 4、url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 一、准备环境如下: 1、我们配置四个nginx的虚拟主机,分别如下: www.site.com 127.0.0.1:8081 127.0.0.1:8082 127.0.0.1:8083site1.conf的配置如下: server {
#监听的端口号
listen 8081;
#虚拟主机名
server_name 127.0.0.1;
#编码
charset utf-8;
#访问日志
access_log logs/site1.access.log combined;
location / {
#网站路径
root /data/wwwroot/site1;
#默认首页文件
index index.html index.htm index.php;
}
#在http中加入fastcgi_intercept_errors on;
#配置404信息
error_page 404 /404.html;
#配置500信息
error_page 500 502 503 504 /50x.html;
#缓存图片资源
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 15d;
}
#缓存js、css资源
location ~ .*.(js|css)$ {
expires 1d;
}
#对php的支持
location ~ .php$ {
root /data/wwwroot/site1;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
site2.conf和site3.conf的配置同site1.conf,只是端口、日志文件和目录地址需要修改。
2、三个站点下分别创建index.html,方便查看访问了哪个虚拟主机
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
我是站点一
</body>
</html>
二、配置好上述三台虚拟主机后,我们需要在nginx.conf的http{}节点中设置upstream
#注意这里的myserver,可自定义
upstream myserver {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
server 127.0.0.1:8083;
}
三、在需要负载的虚拟主机配置文件中添加
proxy_pass http://myserver;修改后的site.conf文件如下: server {
#监听的端口号
listen 80;
#虚拟主机名
server_name www.site.com;
location / {
#注意这里的myserver要与你upstream中的命名一致
proxy_pass http://myserver;
proxy_redirect off;
#注意,如果是本地反向代理并且端口不区分时(比如:都是用的80端口)
#需要把下面这行注释,不然会产生死循环
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
#后端服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
四、我们重启nginx,通过浏览器访问www.site.com。
我们刷新浏览器,可以看到,网站出现的内容,会随着你的刷新,轮询显示站点一,站点二,站点三。
五、upstream中的配置
upstream myserver {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=2;
server 127.0.0.1:8083 weight=3;
}
weight默认为1,weight越大,负载的权重就越大。
upstream myserver {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
server 127.0.0.1:8083 down;
}
down表示当前的server暂时不参与负载
upstream myserver {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
server 127.0.0.1:8083 backup;
}
backup其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
upstream myserver {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
server 127.0.0.1:8083 max_fails=3 fail_timeout=30s;
}
max_fails允许请求失败的次数默认为1,当超过最大次数时返回proxy_next_upstream 模块定义的错误
fail_timeout当max_fails 次失败后,暂停的时间。 (编辑:十堰站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – 错误乘客没有看到环境变量?
- ruby-on-rails-乘客nginx:在子目录中托管Rails应用程序
- nginx与javascript文件过期(由PHP动态生成)
- 在Nginx后面通过HTTPS访问Django Admin
- linux – ‘没有包nginx可用’错误CentOS 6.5
- rest – nginx作为限制http动词访问的反向代理
- NGINX和SPDY v2,v3和v3.1?
- Nginx子域:重定向/.众所周知的加密路径
- node.js – 自节点v0.12.2以来的负载平衡 – cluster,pm2或
- 无法通过非根上下文路径中的kubernetes ingress-nginx获取W
