nginx实现反向代理与动静分离
1 安装两个slaver
1.1 服务器配置
java37master:1G
java37slaver1:512M
java37slaver2:512M
1.2 创建虚拟机
-
设置内存为512M
-
设置网络
-
设置主机名称并应用:java37slaver1+java37slaver2
-
设置编码集
-
设置张号密码
-
注意:如果出现错误:法获得VMCI驱动程序的版本:句柄无效
https://blog.51cto.com/xuan97916/1909845
1.3 添加基本的配置
- 安装ifconfig
* 查看ifconifg是否存在:ll /sbin/ifconfig 不存在
* 安装ifconfig: yum install ifconifg 缺少包
* 查看依赖的包: yum search ifconifg 缺少net-tools.x86_64
* 安装依赖的包: yum install net-tools.x86_64 -y
- 安装vim
yum -y install vim*
- 安装rz
yum install lrzsz -y
1.4 安装jdk
- 安装环境gc++
* yum install glibc.i686 -y
* yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6
# 如果第二步出错:执行一下命令:yum install --setopt=protected_multilib=false libgcc
* yum update libstdc++-4.4.7-4.el6.x86_64
* yum install gcc-c++ -y
- 创建文件夹
mkdir -p /usr/soft
- 把jdk的压缩文件上传到/usr/soft下
- 压缩
- 重命名为java11
- 配置环境变量
vim /etc/profile
# 配置jdk11
export JAVA_HOME=/usr/soft/jdk11
# export JRE_HOME=$JAVA_HOME/jre #jdk11没有jre 不要配置
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
- 加载配置文件
source /etc/profile
- 验证
java
javac
java -version
1.5 安装tomcat
- 上传tomcat的压缩文件到/usr/soft下
- 解压
- 重命名为tomcat9
- 关闭防火墙
[root@java37master tomcat9]# systemctl stop firewalld.service #关闭防火墙
[root@java37master tomcat9]# firewall-cmd --state #查看防火墙状态
[root@java37master tomcat9]# systemctl status firewalld.service #查看防火墙状态
[root@java37master tomcat9]# systemctl disable firewalld.service #关闭开机启动防火墙
- 进入bin包启动tomcat
./startup.sh
- 浏览器访问tomcat
1.6 两个slaver上面发布项目
-
数据库使用master上的即可
-
把war复制到slaver1和slaver2的webapps下
-
开启tomcat
-
浏览器访问即可
2 配置静态ip(三台都做)
2.1 查看三台服务器的名称
- 应该不需要修改:安装虚拟机时已经指定
[root@java37master ~]# cat /etc/hostname
java37master
[root@java37slaver1 ~]# cat /etc/hostname
java37slaver1
[root@java37slaver2 ~]# cat /etc/hostname
java37slaver2
- 如果修改 需要重启虚拟机
reboot
2.2获取主机的网关(Gateway)
DNS域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网
[root@java37slaver2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.56.2 0.0.0.0 UG 100 0 0 ens33
192.168.56.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
2.3 设置每台主机的静态ip
[root@java37slaver2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@java37slaver2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" #配置静态ip::1 设置为static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="d0371869-480f-4966-b578-f4c19877545a"
DEVICE="ens33"
ONBOOT="yes"
#配置静态ip::2 添加以下五项
# 添加下面五项 配置静态ip
IPADDR=192.168.56.130 #当前主机ip #每台主机的ip不同:
NETMASK=255.255.255.0
GATEWAY=192.168.56.2 #网关
DNS1=8.8.8.8
DNS2=114.114.114.114
- 重启网络
systemctl restart network
3 设置三台服务器的dns(三台都做)
3.1 概念
三台服务器之间 通过主机名即可访问对方
3.2 编辑/etc/hosts::
[root@java37slaver2 ~]# vim /etc/hosts
[root@java37slaver2 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#配置三台服务器的dns
192.168.56.128 java37master
192.168.56.129 java37slaver1
192.168.56.130 java37slaver2
3.3 ping测试是否可以通信
[root@java37slaver2 ~]# ping java37slaver2
[root@java37slaver2 ~]# ping java37slaver1
[root@java37slaver2 ~]# ping java37master1
PING java37slaver2 (192.168.56.130) 56(84) bytes of data.
64 bytes from java37slaver2 (192.168.56.130): icmp_seq=1 ttl=64 time=0.135 ms
64 bytes from java37slaver2 (192.168.56.130): icmp_seq=2 ttl=64 time=0.038 ms
64 bytes from java37slaver2 (192.168.56.130): icmp_seq=3 ttl=64 time=0.036 ms
64 bytes from java37slaver2 (192.168.56.130): icmp_seq=4 ttl=64 time=0.059 ms
...
^C
--- java37slaver2 ping statistics ---
19 packets transmitted, 19 received, 0% packet loss, time 18027ms
rtt min/avg/max/mdev = 0.032/0.056/0.135/0.029 ms
4 ssh免密登录
SSH 为 [Secure Shell]的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为[远程登录]会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
目的:在一个链接中在三台服务器之间来回切换
4.1 生成公钥和秘钥(三台服务器都做)
- ssh-keygen
[root@java37slaver2 ~]# ssh-keygen #生成公钥和秘钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:rg+D53FfFk6WXKuVR1oW1lAYWT3Q03zwnecCl5VZRp0 root@java37slaver2
The key's randomart image is:
+---[RSA 2048]----+
| .*&^|
| +E@|
| . +.@|
| . = O.|
| S * * o|
| . . + + o |
| . = o = |
| o * . o |
| o.. . |
+----[SHA256]-----+
# 其间看提示 点击enter键 或者输入yes
4.2 把公钥和秘钥发给master(三台都做)
- ssh-copy-id java37master
[root@java37slaver2 ~]# ssh-copy-id java37master
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host 'java37master (192.168.56.128)' can't be established.
ECDSA key fingerprint is SHA256:nbd7BL+4vc6QScOYqafO9p7KkxDkPb+On1BEOSRgdpc.
ECDSA key fingerprint is MD5:01:22:0b:dc:39:de:ac:6e:8a:c8:a4:00:09:71:e9:3b.
Are you sure you want to continue connecting (yes/no)? yes #输入yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@java37master's password: #输入密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'java37master'"
and check to make sure that only the key(s) you wanted were added.
4.3 查看master上的文件/root/.ssh/authorized_keys
[root@java37master ~]# cat /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHwdT7gfnM1szAO3iEbtwIv2UicU99N+oqHYSHoEuz8O+4QL1WRYmal1UoeF6AKTeO2FFJR60+mRfIH3orl8euLyh0cVkl4P9lN+SYoRFhnX2qfs5OmN/3p/GRt1g6EZCTGn/JPBAbCn3ueQefABq09DnduMYaFo5x5+Bc/KilRgdF6Eb7n4ha/WoZP530FdLUi1oAHMX4sobu2hHj7//ciptdFPje6VxMRPXHx2kdddL4FqxsYH1WlSZhuNC0ZlXZ7raV5dWwIxeSjw8293PRXuq3dkGRUF9VYD74onyN/U4msIBQ5ZNEf9l+28Hp6R65MJWSAirXWIoT3JEnS65n root@java37slaver2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/HW7pqOk4lSVbO36hn59k9FCa+I2iWc0D6Zb5VtPLxEqvyVXpd+bVLrDdqLyPimET3P4p9AsDQ+dp5EGaBQMNOyjlD0SHfFHvhF8GR+XPa9w7K6mnuniQZq1bylt0Kh4bXVaLAsyvIKUJLiMnElb0L2bFmuO6gBzze1JPAJ+aEwUBcxPVI+wr1M9IMMfOWknBf3dzLY3CBni+e9g+YacsimgGG6A6lFveuF5Wb19Z2mEn+Ep7Qt108FJoTIjxqzfCNlRChA1o4fdJx52sIHT8xtFT8uuQo2UekSScdVVROE1mrJj/Bco28K/cXyyQu3D5dIsLclN/Dthw61weiK47 root@java37slaver1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1zZxKdO/kYyOFBQJdkSADm6oMQXxQxxCHQXUitaPB3ckD0XI9awkUvuzUuaGr2ApHpaAXd6gZGBexbsWfWBBwZB6lRDzJZEajEblp5KGvcHJdDLzG1sMNfs4oxFOh0Gf2NeG0to/tbFnMOZ/hHUyy6KQv9BmPzIH6gEaMoNYxms/mr0NzEIVNNtXp9dke89x4nNkHsILXMKDhkvbXAjIieX9p2zCZEhTWrwuFS+AabnewjV3lCEAxxVQ4OlPTnWjdHlEmAtLq2ZiHL7YGPpSjdBqDINE9ams1EZZcQY+Qv2cZgmAeyXo1LePEtH/2XcqEUnbYEkSGRNhLQgiBm4QN root@java37master
4.4 把master上的此文件发给两个slaver(只在master上做)
- scp 本地文件 远程登录用户名@远程主机:远程主机的目录
[root@java37master ~]# scp /root/.ssh/authorized_keys root@java37slaver1:/root/.ssh
The authenticity of host 'java37slaver1 (192.168.56.129)' can't be established.
ECDSA key fingerprint is SHA256:S8/WIYoiYeX3yEKdkcW7blvb6VvY5K7HLdIgKgvE4FI.
ECDSA key fingerprint is MD5:62:6b:14:c3:14:cb:de:8c:a9:2b:6a:07:88:dd:07:18.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'java37slaver1,192.168.56.129' (ECDSA) to the list of known hosts.
root@java37slaver1's password:
authorized_keys 100% 1199 1.0MB/s 00:00
[root@java37master ~]# scp /root/.ssh/authorized_keys root@java37slaver2:/root/.ssh
The authenticity of host 'java37slaver2 (192.168.56.130)' can't be established.
ECDSA key fingerprint is SHA256:YVz8ctecowRD4iP5833WxJRi1gd4O4vm1piMKh5Xrls.
ECDSA key fingerprint is MD5:93:96:8e:81:79:43:92:13:46:86:6b:53:31:80:58:5b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'java37slaver2,192.168.56.130' (ECDSA) to the list of known hosts.
root@java37slaver2's password:
authorized_keys 100% 1199 930.5KB/s 00:00
4.5 通过ssh实现三台服务器的免密登录(三台都做)
- 测试9次
[root@java37master ~]# ssh java37master
[root@java37master ~]# ssh java37slaver1
[root@java37master ~]# ssh java37slaver2
- 退出当前账户:exit
[root@java37master ~]# exit
登出
Connection to java37master closed.
5 三台服务器都发布项目
- 使用master的mysql
- 把项目打包为war包
- 把war包放入/tomcat9/webapps下
- 启动三台服务器的tomcat
- 监控tomcat的日志输出信息:tail -f xxx
- 通过浏览器访问:
1 nginx
1.1 概念
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。
因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名
1.2 安装:只在master上安装
http://nginx.org/en/download.html
- 安装nginx的依赖
[root@java37master ~]# yum install yum-utils
...
- 创建yum的配置信息
[root@java37master ~]# touch /etc/yum.repos.d/nginx.repo #创建yum配置文件
[root@java37master ~]# vim /etc/yum.repos.d/nginx.repo
[root@java37master ~]# cat /etc/yum.repos.d/nginx.repo #添加如下代码 指定下载stable版本
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
- 安装nginx
[root@java37master ~]# yum install nginx -y
1.3 关闭linux自带杀毒软件selinux
- 查看selinux的状态
[root@java37master ~]# getenforce
Enforcing #处于防御状态
- 修改配置文件 取消开机启动
[root@java37master ~]# vim /etc/selinux/config
[root@java37master ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled #取消开机启动
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
- 重启master
reboot
1.4 启动并测试ngixn
[root@java37master ~]# systemctl start nginx #开启nginx
[root@java37master ~]# systemctl restart nginx #重启nginx
[root@java37master ~]# systemctl stop nginx #关闭nginx
[root@java37master ~]# systemctl status nginx #查看nginx状态
- 通过浏览器访问nginx:nginx的默认端口和http一样 都是80端口
2 nginx实现反向代理
2.1 概念
通过nginx给服务器集群的多台服务器 提供一个统一的访问入口
2.2 实现其功能::只在master上执行
- 创建文件:
[root@java37master conf.d]# touch /etc/nginx/conf.d/cloud37.conf
- 编辑文件:指定url的解析规则
[root@java37master conf.d]# vim /etc/nginx/conf.d/cloud37.conf
[root@java37master conf.d]# cat /etc/nginx/conf.d/cloud37.conf
#为三台服务器对应的集群 起个名字
upstream cloudserver
{
server 192.168.56.128:8080;
server 192.168.56.129:8080;
server 192.168.56.130:8080;
}
#提供server配置 实现反向代理url转换规则
server
{
#指定nginx监听的端口
listen 80;
#指定nginx的主机的ip地址 master的ip
server_name 192.168.56.128;
#指定url的转换规则
location /cloud37{
proxy_pass http://cloudserver/java37_08_cloud;
}
#浏览器请求:http://192.168.56.128:80/cloud37 时 会被nginx解析为
#http://192.168.56.128:8080/java37_08_cloud
#http://192.168.56.129:8080/java37_08_cloud
#http://192.168.56.130:8080/java37_08_cloud
}
- 重启ngixn
[root@java37master conf.d]# systemctl restart nginx.service
- 对项目进行修改:所有请求都更改为http://192.168.56.128:80/cloud37
<!-- 主要是三个地方需要改进:1 所有style和script标签-->
<!-- 主要是三个地方需要改进:2 所有ajax的url-->
<!-- 主要是三个地方需要改进:3 img的src-->
<html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<head>
<!--#添加 定义一个pagescore域属性 记录nginx的地址-->
<c:set var="path" value="http://192.168.56.128:80/cloud37"/>
<title>云盘项目</title>
<!--1.1 引入min.css-->
<link type="text/css" rel="stylesheet" href="${pageScope.path}/bootstrap-3.3.7-dist/css/bootstrap.min.css"/>
<!--1.2 引入bootstrap-theme.min.css-->
<link type="text/css" rel="stylesheet" href="${pageScope.path}/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css"/>
<!--2.1 引入bootstrap-table.min.css-->
<link type="text/css" rel="stylesheet" href="${pageScope.path}/bootstrap-3.3.7-dist/css/bootstrap-table.min.css"/>
<!-- 3.1 bootstarp-editable基本使用:1引入bootstrap-editable.css -->
<link type="text/css" rel="stylesheet" href="${pageScope.path}/bootstrap-3.3.7-dist/css/bootstrap-editable.css" />
<!--1.3 引入jquery-->
<script type="text/javascript" src="${pageScope.path}/js/jquery-3.3.1.min.js"></script>
<!--1.4 引入bootstrap.min.js-->
<script type="text/javascript" src="${pageScope.path}/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
<!--2.2 引入bootstrap-table.min.js-->
<script type="text/javascript" src="${pageScope.path}/bootstrap-3.3.7-dist/js/bootstrap-table.min.js"></script>
<!--2.3 引入bootstrap-table-editable.min.js-->
<script type="text/javascript" src="${pageScope.path}/bootstrap-3.3.7-dist/js/bootstrap-table-editable.min.js"></script>
<!--2.4 引入bootstrap-table-zh-CN.min.js-->
<script type="text/javascript" src="${pageScope.path}/bootstrap-3.3.7-dist/js/bootstrap-table-zh-CN.min.js"></script>
<!--3.1 引入jquery.serializejson.min.js 使用serializeJSON方法-->
<script type="text/javascript" src="${pageScope.path}/js/jquery.serializejson.min.js"></script>
<!--3.3 bootstarp-editable基本使用:2引入bootstrap-editable.min.js -->
<script type="text/javascript"
src="${pageScope.path}/bootstrap-3.3.7-dist/js/bootstrap-editable.min.js"></script>
</head>
<body>
<!--0:定义全局变量-->
<script type="text/javascript">
var uid;
var dfu="0";
var path="${pageScope.path}/"; //更改path的写法 不要出现核心标签库
</script>
<!--登录模态框:类似于弹出框-->
<div class="modal fade" id="userLoginModal" >
<div class="modal-dialog" role="document">
<div class="modal-content">
...
<div class="form-group">
<label class="control-label">验 证 码:</label>
<img src="${pageScope.path}/user/yzmImg.action" id="img_yzm" />
<input type="text" class="form-control" name="uyzm" value="1234">
</div>
</form>
</div>
...
</div>
</div>
</div>
<script type="text/javascript">
.....
//更改验证码
$("#img_yzm").bind("click",function(){
$("#img_yzm").attr("src","${pageScope.path}/user/yzmImg.action?n="+Math.random());
});
});
</script>
</body>
</html>
- 项目clean package
- 把三台服务器的tomcat关闭 清除/webapps下的java37*
- 把打好的war添加到webapps下
- 开启tomcat
- 开启日志监控
- 通过浏览器访问:http://nginxip:nginxport/cloud37/index.jsp
注意:请求的时候一定要加资源名称
3 nginx实现负载均衡
3.1 概念
负载均衡:负载均衡也是 Nginx常用的一个功能,当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。
我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。
如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。
负载均衡配置一般都需要同时配置反向代理,通过反向代理跳转到负载均衡。
nginx 根据服务器的性能 按制定策略来合理分配处理请求的比例
3.2 方式
更改nginx的配置文件:/etc/nginx/conf.d/cloud37.conf 的cloudserver信息
3.3 负载均衡策略
1 轮训
默认策略:
所有服务器按顺序轮流处理请求
适合于服务器性能相同的集群
upstream cloudserver
{
#默认轮训
server 192.168.56.128:8080;
server 192.168.56.129:8080;
server 192.168.56.130:8080;
}
2 权重
根据服务器性能 设置处理请求的比例
适合于服务器性能差别大的集群
upstream cloudserver
{
#1轮训 默认
#2权重
# #weight:指定比例
# #fail_timeout:指定最大等待时间
server 192.168.56.128:8080 weight=1 fail_timeout=10s;
server 192.168.56.129:8080 weight=1 fail_timeout=10s;
server 192.168.56.130:8080 weight=4 fail_timeout=10s;
}
- 注意 重启nginx
systemctl restart nginx
3 ip_hash
每台服务器设置个编号:从0开启
客户端ip的hashcode值%服务器台数 =n :让编号为n的服务器处理此请求
特点:同一个客户端的所有请求都只被服务器处理
upstream cloudserver
{
#1轮训 默认
#2权重
# #weight:指定比例
# #fail_timeout:指定最大等待时间
#server 192.168.56.128:8080 weight=1 fail_timeout=10s;
#server 192.168.56.129:8080 weight=1 fail_timeout=10s;
#server 192.168.56.130:8080 weight=4 fail_timeout=10s;
#3ip_hash
ip_hash;
server 192.168.56.128:8080 fail_timeout=10s;
server 192.168.56.129:8080 fail_timeout=10s;
server 192.168.56.130:8080 fail_timeout=10s;
}
4 fair
nginx接受到请求 会询问整个服务器集群 把请求交给第一个响应的服务器
upstream cloudserver
{
server 192.168.254.128:8080;
server 192.168.254.129:8080;
server 192.168.254.130:8080;
fair;
}
# fair测试出错::::需要添加插件:::添加插件失败!yum安装没有对应的配置文件
#unknown directive "fair" in /etc/nginx/conf.d/cloud37.conf:23
#nginx的错误日志位置:/var/log/nginx/error.log
5 url_hash
nginx根据请求的url的hashcode%服务器个数=n 把请求交给编号为n的服务器
upstream cloudserver
{
#1轮训 默认
#2权重
# #weight:指定比例
# #fail_timeout:指定最大等待时间
#server 192.168.56.128:8080 weight=1 fail_timeout=10s;
#server 192.168.56.129:8080 weight=1 fail_timeout=10s;
#server 192.168.56.130:8080 weight=4 fail_timeout=10s;
#3ip_hash
#ip_hash;
#server 192.168.56.128:8080 fail_timeout=10s;
#server 192.168.56.129:8080 fail_timeout=10s;
#server 192.168.56.130:8080 fail_timeout=10s;
#
#4 fair
#server 192.168.56.128:8080;
#server 192.168.56.129:8080;
#server 192.168.56.130:8080;
#fair;
#
#5 url_hash
server 192.168.56.128:8080 fail_timeout=10s;
server 192.168.56.129:8080 fail_timeout=10s;
server 192.168.56.130:8080 fail_timeout=10s;
hash $request_uri;
}
4 动静分离
4.1 概念
静态资源(html/css/js/img) 不需要依赖web应用服务器的解析 直接放在nginx上 访问时直接响应给客户端
提高响应效率 降低服务器压力
4.2 对项目进行修改
1 把jsp转化为html
2 把style和script的路径都更改为相对路径
3 把<c:set 删除
4 直接给path赋值:var path = "http://192.168.56.128:80/cloud37/";
5 去除所有的${}
$(function () {
//var user = "${sessionScope.user}";
//alert(user);
//if (user) {
// uid = "${sessionScope.user.uid}";
// setTableData();
//} else {
$("#userLoginModal").modal("show");//弹出登录模态框
//}
});
6 更改img的连接
<div class="form-group">
<label class="control-label">验 证 码:</label>
<img src="user/yzmImg.action" id="img_yzm"/>
<input type="text" class="form-control" name="uyzm" value="1234">
</div>
...
//更改验证码
$("#img_yzm").bind("click", function () {
$("#img_yzm").attr("src", "user/yzmImg.action?n=" + Math.random());
});
4.3 把所有静态资源存入一个文件夹cloud37中
4.4 把项目中这些静态资源删除
4.5 启动tomcat
- 项目clean package
- 关闭三个tomcat
- 清除webapps下的java37*
- 把war重新上传到webapps下
- 开启三台服务器
4.6 把静态资源文件夹cloud37上传到/usr/share/nginx文件夹下
[root@java37master bin]# cd /usr/share/nginx
[root@java37master nginx]# ll
总用量 0
drwxr-xr-x 6 root root 102 12月 22 17:52 cloud37
drwxr-xr-x. 2 root root 40 12月 22 11:06 html
4.7 更改nginx的配置文件 并重启
[root@java37master conf.d]# pwd
/etc/nginx/conf.d
[root@java37master conf.d]# vim cloud37.conf #更改配置文件
[root@java37master conf.d]# systemctl restart nginx.service #重启nginx
[root@java37master conf.d]# cat cloud37.conf
#为三台服务器对应的集群 起个名字
upstream cloudserver
{
#1轮训 默认
#2权重
# #weight:指定比例
# #fail_timeout:指定最大等待时间
#server 192.168.56.128:8080 weight=1 fail_timeout=10s;
#server 192.168.56.129:8080 weight=1 fail_timeout=10s;
#server 192.168.56.130:8080 weight=4 fail_timeout=10s;
#3ip_hash
#ip_hash;
#server 192.168.56.128:8080 fail_timeout=10s;
#server 192.168.56.129:8080 fail_timeout=10s;
#server 192.168.56.130:8080 fail_timeout=10s;
#
#4 fair
#server 192.168.56.128:8080;
#server 192.168.56.129:8080;
#server 192.168.56.130:8080;
#fair;
#
#5 url_hash
server 192.168.56.128:8080 fail_timeout=10s;
server 192.168.56.129:8080 fail_timeout=10s;
server 192.168.56.130:8080 fail_timeout=10s;
hash $request_uri;
}
#提供server配置 实现反向代理url转换规则
server
{
#指定nginx监听的端口
listen 80;
#指定nginx的主机的ip地址 master的ip
server_name 192.168.56.128;
#动静分离
location ~ .*\.(html|css|js|eot|svg|ttf|woff|woff2)$
{
root /usr/share/nginx;
}
#指定url的转换规则
location /cloud37{
proxy_pass http://cloudserver/java37_08_cloud;
}
#浏览器请求:http://192.168.56.128:80/cloud37 时 会被nginx解析为
#http://192.168.56.128:8080/java37_08_cloud
#http://192.168.56.129:8080/java37_08_cloud
#http://192.168.56.130:8080/java37_08_cloud
}