当前位置: 首页>后端>正文

nginx中配置了upstream但服务端口没有带上 nginx upsream

NGINX服务器实现负载均衡

关键技术:nginx upstream

基本语法说明

在进行实际操作之前我们先进行简单的介绍nginx upstream 的一些基础使用方法。

基本结构 :upstream name{指令…} 基本配置例子,如下:
upstream uname{
 	server ip;
 	server ip;
 	#多个ip 以此往下递增
}
server{
	location /{
  		proxy_pass http://uname/; #转发upstream
  		#此处需要注意uname为upstream 的名字,且最后有/
      	proxy_set_header X-Forwarded-For $remote_addr;
      	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      	proxy_set_header Host $host;
      	proxy_redirect off;
    }
}
server 指令的基本语法 server address [配置参数…]

配置参数

参数说明

使用示例

weight

服务器权重,权重越搞访问次数越高

weight =1

max_fails

访问失败多少次后踢出,表示为宕机

max_fails=2

fail_timeout

踢出后重新探测服务器是否正常的时间,单位s

fail_timeout=20

max_connsr

服务器的最大连接数量,默认为0,不限制

max_connsr=100

backup

标记服务器为备用,当其他服务器都不可用时才会访问此服务器(轮询下可用)

backup

down

标记服务器为宕机状态,暂不参与负载策略

down

指令使用示例[轮询策略]

轮询策略:nginx按加权轮转的方式将请求分发到各服务器,常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能。比如以下配置第一会访问192.168.0.1,第二次和第三次会访问到192.168.0.2,第四次又访问192.168.0.1,以此类推。

upstream uname{
	server 192.168.0.1 weight=1 max_fails=2 max_connsr=100 backup; 
	server 192.168.0.2 weight=2 max_fails=2 max_connsr=100 ; 
}

iphash策略

每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,而不是像轮询那样,没次访问都会再重新分配。

upstream uname{
	ip_hash;
	server 192.168.0.1 weight=1 max_fails=2 max_connsr=100 backup; 
	server 192.168.0.2 weight=2 max_fails=2 max_connsr=100 ; 
}

least_conn

将你新来的访问转发到访问量最少的服务器上,保证了每个服务器的服务数量尽可能的平等

upstream uname{
	least_conn;
	server 192.168.0.1; 
	server 192.168.0.2 ; 
}

fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。保证性能最好的服务器能够充分发挥。

upstream uname{
	server 192.168.0.1; 
	server 192.168.0.2 ; 
	 fair;
}

实际配置

服务器的准备

1:为了能够保证我们此处能够用于生产环境,我在腾讯云临时租用了几个服务器来进行搭建演示。为了能够展示出效果,至少得3台服务器。具体架构如下:

nginx中配置了upstream但服务端口没有带上 nginx upsream,nginx中配置了upstream但服务端口没有带上 nginx upsream_内网,第1张

流量转发服务器只负责流量转发,而不负责相关的逻辑处理,服务器一和服务器二则进行具体的业务逻辑处理。2:在选择服务器上,我们尽可能将所有的服务器选择在同一个局域网之下,这样内网之间传输数据是基本没有消耗的,如果是外网搭建集群,那么流量转发的服务器还需要通过外网去请求,无论是请求时间、还是资源都是很浪费的。

nginx中配置了upstream但服务端口没有带上 nginx upsream,nginx中配置了upstream但服务端口没有带上 nginx upsream_分布式_02,第2张

  • 118.24.251.228(内网:172.30.0.5) 为一号服务器
  • 129.28.194.183(内网:172.30.0.6) 为二号服务器
  • 129.28.189.148(内网:172.30.0.4) 为流量转发服务器

3:对每台服务器都进行nginx安装。此处具体的可参考以下博文 nginx 安装教程

4:搭建完成之后对服务器一和服务器二都进行站点配置

服务器一:

nginx中配置了upstream但服务端口没有带上 nginx upsream,nginx中配置了upstream但服务端口没有带上 nginx upsream_分布式_03,第3张

服务器二:

nginx中配置了upstream但服务端口没有带上 nginx upsream,nginx中配置了upstream但服务端口没有带上 nginx upsream_内网_04,第4张

配置转发流量的服务器

upstream phpstream{
   server 172.30.0.6 weight=1;
   #如果这里使用的是内网ip 需要在该服务器上将次ip 添加到域名里
   server 172.30.0.5 weight=1;
}
server
{
    listen 80;
    server_name 129.28.189.148;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/129.28.189.148;
    
    location /{
     	proxy_pass http://phpstream/; #转发upstream
  		#此处需要注意uname为upstream 的名字,且最后有/
      	proxy_set_header X-Forwarded-For $remote_addr;
      	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      	proxy_set_header Host $host;
     	proxy_redirect off;
    }
}

此时我们访问流量转发服务器会出现如下界面

nginx中配置了upstream但服务端口没有带上 nginx upsream,nginx中配置了upstream但服务端口没有带上 nginx upsream_分布式_05,第5张

此时不用慌,并不是配置出现了问题,我们只需要到服务器一、服务器二上把流量转发的服务器的ip添加上去就可以了。

nginx中配置了upstream但服务端口没有带上 nginx upsream,nginx中配置了upstream但服务端口没有带上 nginx upsream_分布式_06,第6张

然后我们在进行访问刷新

nginx中配置了upstream但服务端口没有带上 nginx upsream,nginx中配置了upstream但服务端口没有带上 nginx upsream_内网_07,第7张

nginx中配置了upstream但服务端口没有带上 nginx upsream,nginx中配置了upstream但服务端口没有带上 nginx upsream_nginx_08,第8张

在刷新过程中我们可以看到同一个ip地址刷新的结果呗转发到了服务器一和二上。至此就完成了nginx upstream 反向代理集群的搭建。



https://www.xamrdz.com/backend/3u41942317.html

相关文章: