Linux-Nginx服务解析【反向代理、动静分离、负载均衡、会话共享】

Nginx是一款轻量级的Web 服务器反向代理服务器电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占用内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务

下载nginx
Linux-nginx1.10.2稳定版
Windows-nginx1.10.2稳定版
在这里插入图片描述

部署并介绍nginx

1、下载并解压nginx
2、启动nginx应用程序
双击nginx应用程序,闪一下就算打开了,可以输入网址:http://127.0.0.1/进行检验,看到以下界面为已开启nginx。关闭nginx则需打开任务管理器结束nginx的相关进程。
在这里插入图片描述
3、nginx的主配置文件【D:\Nginx\nginx\conf\nginx.conf

    server {
        listen       80;  #端口号
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;   # 页面存放位置
            index  index.html index.htm;     #欢迎页面
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

可通过 listen 80;修改nginx服务占用的端口号,修改后要重启nginx服务。
默认访问界面

Nginx服务需要提供Tomcat

Nginx是一个web服务器,速度快,但是不能作为Servlet 容器独立运行,所以通常的工作方式是Nginx配合Tomcat来协同工作。 这就是为什么要单独提供Tomcat,以方便配合Nginx进行工作。

1、下载并开启tomcat

Tomcat下载

①双击startup.bat运行Tomcat
在这里插入图片描述
输入网址:http://127.0.0.1:8111/会跳转到http://127.0.0.1:8111/login.jsp,该界面使用的资源是8111端口上的Tomcat资源。
在这里插入图片描述

Nginx反向代理

正向代理:用户和服务器之间的连接桥梁【用户做的桥梁】
反向代理:用户和服务器之间的连接桥梁【服务器做的桥梁】
举例:

用户A想访问微博,不能直接访问微博,所以用户A找了用户B,通过用户B去访问微博。这叫正向代理
用户A想访问微博,不能直接访问微博,只能直接访问百度,微博把其上的资源放到了百度上,当用户访问微博的资源时,百度就给予回应。这叫反向代理。

Nginx反向代理,即是指用户访问nginx,而nginx把资源放到tomcat上,用户请求nginx的资源时,tomcat就会回应用户,并返回相应资源。

访问nginx请求http://127.0.0.1/
访问8111端口tomcat的请求http://127.0.0.1:8111/ 【只有在tomcat启动的情况下才可访问】

1、实验效果

①访问nginx的请求:http://127.0.0.1/,只能看到如下界面:
在这里插入图片描述
②修改nginx的配置文件,设置反向代理,并重启nginx服务。
在这里插入图片描述
③再次输入http://127.0.0.1/,可以看到以下界面:
在这里插入图片描述
在这里插入图片描述
可以看到,虽然输入的网址是:http://127.0.0.1/,但访问的仍然是http://127.0.0.1:8111/ 上的资源。

2、nginx反向代理的意义

nginx服务在处理静态文件的吞吐量上优于tomcat。
所以静态资源交由nginx,再反代到tomcat处理,而nginx不好处理的动态资源交由tomcat直接处理,从而达到动静分离的效果。

Nginx动静分离

静态资源: 当用户多次访问这个资源,资源的源代码永远不会发生改变的资源。【图片、css、js】
动态资源:当用户多次访问这个资源,资源的源代码可能会发生改变。【jsp】
动静分离:静态资源交由nginx,再反代到tomcat处理,而nginx不好处理的动态资源交由tomcat直接处理,从而达到动静分离的效果。
在这里插入图片描述
①修改nginx服务的主配置文件,要重启nginx服务。将静态资源交由nginx处理,tomcat只处理动态资源。
在这里插入图片描述

        location / {
	proxy_pass http://127.0.0.1:8111;   #反向代理地址
        }

        location ~\.(css|js|png)$ {    #哪些静态资源交由nginx处理
	root D:/Tomcat/tomcat_8111/webapps/ROOT;   #静态资源的本地存放路径【正斜杠】
        }

②输入网址http://127.0.0.1/,并查看tomcat的访问情况,可以看到tomcat提供的是动态资源。
在这里插入图片描述

Nginx负载均衡

负载均衡:当网站的访问量很大时,请求的动态资源较多,一个tomcat不足以提供访问,可以使用多个tomcat,由nginx按照权重对请求进行分配,从而缓解单独一个tomcat受到的访问压力。
在这里插入图片描述
①打开两个tomcat,端口号分别为8111和8222
在这里插入图片描述
②编辑nginx的主配置文件,修改完后要重启nginx服务

upstream tomcat_8111_8222{
	server 127.0.0.1:8111 weight=1;    #负载均衡tomcat的8111
	server 127.0.0.1:8222 weight=2;    #负载均衡tomcat的8222
	}
# weight越大,请求分配到概率就越大。
location / {
	proxy_pass http://tomcat_8111_8222;   #nginx反向代理
    }

在这里插入图片描述
③输入网址http://127.0.0.1/,可以看到以下内容:
在这里插入图片描述
在这里插入图片描述

Nginx动静分离和负载均衡的结合

  • 若使用了Nginx动静分离,则请求中所有的静态资源都由nginx处理,tomcat则不再处理静态资源。
  • 若使用了Nginx负载均衡,则请求的所有资源按权重进行分配给相应的tomcat处理。
  • 若同时使用了Nginx动静分离和负载均衡,则静态资源由nginx处理,动态资源按权重分配给tomcat处理。

Nginx session共享

负载均衡所带来的问题:通过负载均衡,可以将用户的请求分发到不同的tomcat来缓解nginx服务器的压力。但是可能会因为不同的tomcat提供的资源不同,导致用户每次访问的结果不同,非常影响用户的体验。【会话滞后

法一:通过IP地址标记用户

upstream tomcat_8111_8222{
	server 127.0.0.1:8111 weight=1;
	server 127.0.0.1:8222 weight=2;
	ip_hash;   #在nginx的主配置文件中加入这句,重启nginx即可。
       }

存在问题:
①当大量请求都来自局域网时,请求资源相对于各个客户端而言,所对应的tomcat都固定,相当于没有进行负载均衡。
②如果存在大量的客户端使用tomcat1分配资源,这时tomcat1宕机了,那么只能将请求再次交给tomcat2,这时在tomcat2中没有当前session,只能重新建立新的session,严重影响用户体验。

法二:redis+tomcat+session-manager

使用redis来存取session
redis相当于一个共享文件夹,当tomcat1需要保存session信息时,将session信息存放在redis上,当tomcat2需要获取的时候也从redis上获取。这样在访问两个tomcat的时候,状态就会保持一致,不会影响到用户体验。

在这里插入图片描述

配置过程

①下载并启动redis
redis下载
在这里插入图片描述
②解压并存放jar包
存放目录:
D:\Tomcat\tomcat_8111\lib
在这里插入图片描述
D:\Tomcat\tomcat_8222\lib
在这里插入图片描述
③修改tomcat/conf/context.xml文件,每个tomcat都要修改

 <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
  <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
   host="127.0.0.1"  
   port="6379"  
   database="0"  
   maxInactiveInterval="60" />

在这里插入图片描述
④重启tomcat
⑤测试两个地址的情况
http://127.0.0.1:8111/
http://127.0.0.1:8222/
在这里插入图片描述

开启顺序:nginx、redis、tomcat8111、tomcat8222

以上就是nginx的应用了,如需上述nginx+tomcat+redis安装包,可点击安装包进行下载。

猜你喜欢

转载自blog.csdn.net/weixin_36522099/article/details/105215246