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
①双击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/