文章目录
1 配置反向代理
1.1 基本反向代理
-
首先开启tomcat,确保能够访问localhost:8080
-
开启nginx,确保能够访问localhost:80
-
修改nginx配置文件nginx.conf,在默认的server中的location中添加proxy_pass
server { listen 80; server_name localhost; location / { # 当访问80端口时,会反向代理到8080端口 proxy_pass http://127.0.0.1:8080; } }
修改nginx.conf后,重新加载nginx配置,然后再次在浏览器中输入localhost:80时,会出现tomcat页面
1.2 不同的url跳转不同的tomcat
1.2.1 启动两台tomcat
tomcat默认的端口为8080,所以在启动第二个tomcat前,需要修改server.xml中的端口配置
<!--对于默认的server.xml, 修改下面三处的port-->
<!--如果之前已经有修改过server.xml,需要进行的适配修改-->
<Server port="8015" shutdown="SHUTDOWN">
<!--此port为tomcat启动时的端口-->
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />
修改完后,能够访问127.0.0.1:8080和127.0.0.1:8081,同时便于后续验证观察,分别在两个tomcat中添加文件,路径如下
http://127.0.0.1:8080/edu/a.html,文件内容如下图所示
http://127.0.0.1:8081/vod/a.html,文件内容如下图所示
1.2.2 修改nginx.conf
修改server块配置如下
server {
listen 80;
server_name localhost;
# 如果url中有 /edu/,就转到8080端口
location ~ /edu/ {
proxy_pass http://127.0.0.1:8080;
}
# 如果url中有 /vod/,就转到8081端口
location ~ /vod/ {
proxy_pass http://127.0.0.1:8081;
}
}
然后reload nginx
1.2.3 验证结果
此时访问http://localhost/edu/a.html,能够加载如下界面
此时访问http://localhost/vod/a.html,能够加载如下界面
2 配置负载均衡
2.1 准备工作
先将反向代理中配置的location配置删除,防止对此阶段产生影响
在两个tomcat中,放置url相同的资源
此时,访问http://127.0.0.1:8081/edu/a.html,能够看到
此时,访问http://127.0.0.1:8081/edu/a.html,能够看到
2.2 修改nginx.conf
在http块中添加upstream块,并修改server块
upstream myserver {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://myserver;
}
}
2.3 验证结果
由于浏览器缓存问题,建议使用chrome的隐身模式进行验证
此时,访问http://localhost/edu/a.html,并不断刷新,能够看到8080和8081被平均访问
2.4 nginx分配策略
- 轮询(默认)
- 权重weight:默认为1,越高就分配的越多
- ip_hash:按ip的hash结果分配,这样每个访客固定访问一个后端server,可解决session问题
- fair:按server响应时间分配请求,响应时间短优先分配
3 动静分离
3.1 准备工作
在本地硬盘中准备两个静态文件
F:\data\www\a.html
F:\data\image\1.PNG
3.2 修改nginx.conf
修改server块内容如下
server {
listen 80;
server_name localhost;
# 当请求url中有www时,就会去F:\data\www下查询对应的静态文件
location /www/ {
root F:\data;
}
location /image/ {
root F:\data;
}
}
3.3 验证结果
当请求http://localhost/www/a.html时,能够加载文件
当请求http://localhost/image/1.PNG时,能够加载图片
4 nginx原理
- nginx启动之后,会有1个master进程和1到多个worker进程,master得到任务之后,将任务给worker
- worker之间使用”争抢“机制获得任务,获得任务之后,连接tomcat进行后续操作
- 一个master和多个worker的优点
- 可使用nginx -s reload进行热部署
- worker之间是独立的进程,如果一个worker出现问题,不影响其它worker,避免服务中断
- worker数量和cpu数相等最为适宜
- worker_connection
- 一个请求,worker可能占用2个连接(静态资源)或4个连接(动态资源)
- 静态资源访问最大并发数:worker_connection * worker_processes / 2
- 动态资源访问最大并发数:worker_connection * worker_processes / 4
参考:
https://www.bilibili.com/video/BV1zJ411w7SV?p=14&spm_id_from=pageDriver