Nginx+Redis+Tomcat学习笔记一(实现负载均衡)

Nginx是什么?能干什么?有哪些优势?

Nginx是一款 轻量级高并发WEB服务器,可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现

关于代理

说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;
此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户。

那么,正向代理和反向代理区别是什么?

简单地说,正向代理就是客户通过proxy代理服务器访问目的服务器,客户是明确知道要访问哪一个服务器的。典型的例子是“翻墙”访问外网。
反向代理就是客户端去访问服务器时,他并不知道会访问哪一台,感觉就是客户端访问了Proxy一样,而实则就是当proxy关口拿到用户请求的时候会转发到代理服务器中的随机(算法)某一台。而在用户看来,他只是访问了Proxy服务器而已,典型的例子就是负载均衡了。
如图:

负载均衡是什么?

客户端发送的、Nginx反向代理服务器接收到的请求数量,就是我们说的负载量。
请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。
所以,将服务器接收到的请求按照规则分发的过程,称为负载均衡。

Nginx支持的负载均衡调度算法方式如下:

1.weight轮询(默认):
接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
2.ip_hash:
每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
3.fair:
智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。
4.url_hash:
按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。

解压nginx开启服务的坑!!!

在nginx解压到电脑上之后,一定要确保刚解压的原始文件夹路径没有中文!!! 注意是原始文件夹,在这个上面浪费了时间,刚开始start nginx.exe的时候失败,去网上查说是路径有中文,然后我又转移到了没中文的路径下,依旧报错,最后删除了重新解压到无中文路径下才解决。

nginx.conf里的配置:

upstream a.com {
	server 192.168.x.xxx:8080 weight=1 max_fails=1 fail_timeout=5s;  //A服务器
	server 192.168.x.xxx:8080 weight=1 max_fails=1 fail_timeout=5s;  //B服务器
}

server {
    listen       80;//监听端口
    server_name  myserver;//设置的域名

    location / {
    	proxy_pass http://a.com; //http://后面的地址用来连接upstream
        
    }

1、进入nginx目录下的conf目录,并打开nginx.conf文件,找到http节点下的server节点,这里就是nginx实现反向代理的配置地方。
2、Server中listen后面表示监听端口,默认为80,server_name表示代理访问的域名,默认为localhost,location表示映射地址的配置区域,root为nginx访问默认目录,在当前nginx跟目录下,index为默认访问页面,及在地址栏输入http://localhost/,则会自动访问到…nginx-1.8.1/html/index.html这个网页。
3、设置一个和server同级别的upstream 节点,upstream后面跟代理域名,此时,需要在location节点中添加proxy_pass属性,并设置值为http:// + upstream后面跟随的代理域名。upstream 节点中,可配置多个server,每一个server表示具体的访问的电脑的ip地址+端口,端口后面可加参数weight=?,表示访问权重,weight值越高,表示访问道这台机器的几率就越大。

注意:如果myserver为一个已备案的正式域名,则可以在其他电脑直接访问,如果没有,则需要进行配置找到服务器C:\Windows\System32\drivers\etc目录下的hosts文件,新增如下配置192.168.x.xxx myserver ,其中0.141为服务器ip,此方法只能在局域网内访问。

安装启动:

1、安装nginx,将nginx-1.8.1文件夹拷贝到电脑上即可,免安装;
2、启动,打开cmd窗口,进入nginx跟目录下,并输入start nginx.exe,回车执行。
3、关闭nginx服务器,输入命令nginx -s stop。
4、修改nginx配置文件后,重新加载配置,输入命令nginx -s reload。

测试

访问域名http://myserver:80/
如果多次访问,访问的tomcat首页不同,那么恭喜你成功了
前提是你的tomcat版本也是不同的,也可以找其他方法测试

Nginx配置websocket转发服务

原来:
proxy_set_header X-Real-IP $remote_addr;           
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;            
proxy_set_header X-NginX-Proxy true;

改成:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
Redis和Tomcat实现session共享再记录一篇

猜你喜欢

转载自blog.csdn.net/weixin_41266715/article/details/89925534