文章目录
1.什么是Nginx
1.官方解释: Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
- 简言之:Nginx是高性能的web服务器,但是不能作为servlet容器独立运行,所以通常用来和Tomcat做负载均衡
2.作用 域
- 反向代理:代理服务器请求(如:访问youtube(假设能发出请求),但是youtube悄悄地把这个请求交给bilibili来做,那么bilibili就是反向代理)
正向代理:代理客户请求(如:翻墙软件) - 负载均衡:负载均衡的概念就是当访问量很大的时候,一个 Tomcat 吃不消了,这时候就准备多个 Tomcat,由Nginx按照权重来对请求进行分配,从而缓解单独一个Tomcat受到的压力
- 动静分离:Nginx对静态资源的处理要比tomcat强太多。
一图胜千言
3. 举个稀松平常的例子(反衬作用)
URLFilter ,拦截所有请求,打印当前访问服务器的端口号,以及访问的资源
这就是 没有 负载均衡,没有动静分离,以及没有反向代理的例子。
你看,访问的端口号 全是 8080 ,说明没有负载均衡,只有 端口号为8080的这个tomcat服务器在提供服务。
你看,访问的资源有 png,css,js这些静态资源和jsp,说明 没有动静分离,所有资源都交给了tomcat处理。
你看,访问的资源路径 都是指定了 8080端口号,说明没有Nginx的反向代理,统统交给了8080这个服务器。
非反向代理举例
我直接 通过 127.0.0.1:8080/login.jsp 访问, 因为指定了 8080 端口,就相当于直接去访问了 8080 这个tomcat服务器。
反向代理
我访问 127.0.0.1/login.jsp ,不指定端口号,Nginx接收到这个请求,把请求交给了 8080 这个tomcat服务器(反向代理),同时把请求中的静态资源留下自己处理,只把 jsp请求 交给tomcat(动静分离)。
如果有多个tomcat工作,Nginx可以把请求按照权重分配给不同的tomcat(负载均衡)
4. session共享
Nginx负载均衡减轻服务器压力的同时,会不可避免的带来一个问题,那就是session共享
当同一个用户第一次访问tomcat_8111 并且登录成功, 而第二次访问却被分配到了tomcat_8222, 这里并没有记录他的登陆状态,那么就会呈现未登录状态了,严重伤害了用户体验。
解决办法有两种
1.ip_hash;
2.redis+tomcat-sessoin-manager(本文采用这种)
也就是把 session级别的信息,放到redis 缓存中。记录用户的登录信息。
详情点击 http://how2j.cn/k/nginx/nginx-share-session/1569.html?p=37958
最后图片镇楼,总结
5.演示效果图。
演示结果图
怎么配置的呢?
先放个网址,讲的很好。
http://how2j.cn/k/nginx/nginx-tutorial/1565.html?p=37958
上面有 演示用到的 多个tomcat,nginx 以及redis 等工具。
并且有详细的配置步骤。
感兴趣的话,要不大家自己研究研究?
6.照着葫芦画瓢(以下为 云服务器centos7.3 配置负载均衡)
7.安装篇(nginx+redis+tomcat)
- 操作系统 :CentOS 7.3
- tomcat 7.0
- nginx 1.12.2
- redis 3.2.12
- 安装nginx:
1. 查看 yum的信息
yum info nginx
2.安装
yum -y install nginx
3.查看状态
systemctl status nginx.service
4.启动服务
systemctl start nginx.service -l (-l 查看详细信息)
5.关闭服务
systemctl stop nginx.service
6.重启服务
systemctl restart nginx.service
7.开启开机自启动
8.关闭开机自启动
systemctl disable nginx.service
- 安装redis
1.设置 仓库
yum install epel-release
2.安装redis
yum install redis
3.查看 redis.conf 安装位置
whereis redis.conf
4.开启redis服务
service redis start
5.关闭redis服务
service redis stop
6.重新启动redis
systemctl restart redis.service
7.设置开机自启动
chkconfig redisd on
3.tomcat 通过上传安装包解压安装
参考此文章
https://blog.youkuaiyun.com/M_Kerry/article/details/81664548
8. nginx 配置
位置:/etc/nginx/nginx.conf
- 在文件头部 修改用户:
#user nginx;
修改为
user root;
解释:
- / 表示拦截所有请求,全都交给 tomcat.8111.8222 这组服务器(对应 upstream 后面的配置)
location / {
proxy_pass http://tomcat.8111.8222;
} -
listen 80 // 表示 监听 80 端口
-
root // 表示nginx放置 网页的目录
- location ~.(css|js|png)$ {
root /usr/local/tomcat9/webapps/ROOT;
} //表示 css、js和png这些静态资源去 下面的root 目录里找。(处理静态资源比tomcat要高效)
9. redis 配置
- 关闭 保护模式(本地 redis 客户端 登录 要用)
搜索 protected-mode 关键字(配置文件太长,不得不搜索)
把 yes 换成 no
protected-mode no - 开启密码登录(设置了密码,tomcat的context.xml里要加上 password这个属性以及属性值)
搜索 requirepass 关键字
①把 requirepass 前面的 # 去掉,②把 foobared 改成你的密码
requirepass yourpassword
10 .tomcat配置
在每个 tomcat 的 context.xml里加上 redis 的配置
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="59.110.238.xxx"
password="admin"
port="6379"
database="0"
maxInactiveInterval="60" />
并且加入相应的jar包。(支持 tomcat7, 不支持9,8没试过)
http://how2j.cn/k/nginx/nginx-share-session/1569.html?p=37958
2.配置 server.xml
查看日志:
tail -300f /usr/local/tomcat799/logs/catalina.out
红色部分 换成你相应的 路径
此命令 能查看 最后三百行的日志,并且能实时打印日志,方便查看。