1、nginx简介
1、1什么是nginx
nginx是专门为性能优化而开发,性能是其最重要的考量,实现上非常注重性能效率,能经受高负载的考验
有报告表明能支持高达50000个并发连接数
1、2反向代理
1、2、1正向代理
在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问
1、2、2反向代理
我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是反向代理服务器地址,隐藏了真实服务器IP地址。
1、3负载均衡
单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
1、4动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
2、nginx使用docker安装
参考一篇非常优秀的教学博文docker配置nginx
3、nginx的配置文件
nginx配置文件的位置
nginx配置文件有三部分组成
(1) nginx配置文件由三部分组成
第一部分:全局块
全局块是从配置文件开始到events块之间的内容,主要会设置一些影响nginx服务器整体运行时的配置指令
第二部分:events块
events块涉及指令主要影响nginx服务器与用户的网络连接
第三部分:http块
配置中秀嘎斯最频繁的部分
http块包括http全局块,server块
4、配置实例
4、1反向代理
4.1.1实现目标
使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,nginx监听端口为9001
访问http://xxx.0.0.0.1:9001/edu/ 直接跳转到xxx.0.0.1:8081
访问http://xxx.0.0.0.1:9001/vod/ 直接跳转到xxx.0.0.1:8088
4.1.2准备两个tomcat一个8080端口,一个8081端口
tomcat81
[root@iZf8zeb4pvftjcmv58dmy8Z ~]# docker run -d --name tomcat81 -p 8081:8080 tomcat # 创建tomcat容器其端口为8081其中-p就是映射端口
93a60e86ebd20728f4be5cbbc15ca5ee90b269ab38753ab92deddbf8d92315ab
[root@iZf8zeb4pvftjcmv58dmy8Z ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93a60e86ebd2 tomcat "catalina.sh run" 5 seconds ago Up 4 seconds 0.0.0.0:8081->8080/tcp, :::8081->8080/tcp tomcat81
d0fcc0d3c89d tomcat "catalina.sh run" 29 minutes ago Up 26 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp tomcat80
94031e73c1ff nginx "/docker-entrypoint.…" 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp, :::80->80/tcp nginx01
6ec4c699f539 mysql:8.0.22 "docker-entrypoint.s…" 2 days ago Exited (0) 4 hours ago sleepy_fermi
ce519f267f73 redis "docker-entrypoint.s…" 4 days ago Up 30 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis01
在这里创建好容器之后直接访问ip:8081会报错404,需要做以下修改
因为docker下载的tomcat容器的webapps目录下是空的,所以我们需要将webapps.dist文件夹里的内容复制到webapps文件夹里面就能完成访问
[root@iZf8zeb4pvftjcmv58dmy8Z ~]# docker exec -it tomcat81 /bin/bash # 进入tomcat容器
root@93a60e86ebd2:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
root@93a60e86ebd2:/usr/local/tomcat# cd webapps #进入webapps目录
root@93a60e86ebd2:/usr/local/tomcat/webapps# ls # 目录是空的
root@93a60e86ebd2:/usr/local/tomcat/webapps# cd ..
root@93a60e86ebd2:/usr/local/tomcat# rm -rf webapps #删除空的webapps文件夹
root@93a60e86ebd2:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps.dist work
root@93a60e86ebd2:/usr/local/tomcat# mv webapps.dist webapps # 将webapps.dist文件夹下的内容复制到webapps下面
root@93a60e86ebd2:/usr/local/tomcat# cd webapps
root@93a60e86ebd2:/usr/local/tomcat/webapps# ls # 查看新的webapps
ROOT docs examples host-manager manager
另一个端口为808的容器也是如上操作
4.1.3创建需要的前端文件
- 8081端口的容器中创建vod文件夹及其子文件a.html内容是8081
root@93a60e86ebd2:/usr/local/tomcat/webapps# mkdir vod # 创建文件夹
root@93a60e86ebd2:/usr/local/tomcat/webapps/vod# echo '<h1>8081</h1>' > ./a.html # 创建并写入文件a.html
root@93a60e86ebd2:/usr/local/tomcat/webapps/vod# ls
a.html
-808端口的tomcat添加html
[root@iZf8zeb4pvftjcmv58dmy8Z ~]# docker exec -it tomcat80 /bin/bash
root@d0fcc0d3c89d:/usr/local/tomcat# cd webapps
root@d0fcc0d3c89d:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
root@d0fcc0d3c89d:/usr/local/tomcat/webapps# mkdir edu
root@d0fcc0d3c89d:/usr/local/tomcat/webapps# ls
root@d0fcc0d3c89d:/usr/local/tomcat/webapps# cd edu
root@d0fcc0d3c89d:/usr/local/tomcat/webapps/edu# ls
root@d0fcc0d3c89d:/usr/local/tomcat/webapps/edu# echo '<h1>8080</h1>' > ./a.html
root@d0fcc0d3c89d:/usr/local/tomcat/webapps/edu# ls
a.html
4.1.4找到nginx配置文件,进行反向代理配置
进入被挂载的配置文件目录
[root@iZf8zeb4pvftjcmv58dmy8Z ~]# cd /root/nginx/conf
[root@iZf8zeb4pvftjcmv58dmy8Z conf]# ls
nginx.conf
#编辑配置文件
[root@iZf8zeb4pvftjcmv58dmy8Z conf]# vim nginx.conf
但是我访问9001的话死活出不来界面,折腾了半小时我才想起来,我一开是创建容器的时候给nginx的端口是80,所以还得将监听端口改为默认的80端口
看我访问的资源是vod要让他自动到8081端口执行
看我访问的资源是vod要让他自动到8080端口执行
4.2负载均衡实例
4.2.1准备在两个端口的tomcat下创建完全相同的web工程
tomcat80容器webapps下创建test工程其中的a.html内容是8080
[root@iZf8zeb4pvftjcmv58dmy8Z conf]# docker exec -it tomcat80 /bin/bash
root@d0fcc0d3c89d:/usr/local/tomcat# cd webapps
root@d0fcc0d3c89d:/usr/local/tomcat/webapps# ls
ROOT docs edu examples host-manager manager
root@d0fcc0d3c89d:/usr/local/tomcat/webapps# mkdir test
root@d0fcc0d3c89d:/usr/local/tomcat/webapps# cp edu/a.html test/a.html
root@d0fcc0d3c89d:/usr/local/tomcat/webapps# cd test
root@d0fcc0d3c89d:/usr/local/tomcat/webapps/test# ls
a.html
tomcat81容器同理
4.2.2配置nginx.conf文件
4.2.3nginx负载均衡分配服务器策略
第一种 ==轮询 == (默认)
第二种 weight
weight代表权重默认为1,权重越高被分配的客户端越多
第三种 ip_hash
用法
upstream server_pool{
ip_hash;
server xxx.xxxx.xxxx:xx
server xxx.xxxx.xxxx:xx
}
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
第四种 fair
根据服务器的响应时间分配,谁的响应时间短,先响应谁