前提条件
创建虚拟机
一台nginx,1台或者2台tomcat
1台的话里面2个tomcat的端口号要改一下
2台就不用改端口号了
我这用2台tomcat,这三个虚拟机的ip肯定要在同意网段是吧
nginx:192.168.10.189
tomcat1:192.168.10.211
tomcat2:192.168.10.212
把你的tomcat安装目录webapps/root里的内容删除,自己写两个index.html进去,比如用来区分这两个tomcat主页
反向代理
在你的nginx安装目录下的conf文件夹里的nginx.conf里编辑:
upstream tomcat {
server 192.168.10.211:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat;
index index.jsp index.html index.htm;
}
}
nginx的默认端口号是80,这样你访问192.168.10.189,不用加上80端口号
就跳转到你的tomcat1主页了,如果想改nginx端口为8080,
那你访问的时候就是192.168.10.189:8080了.
所以你可以通过配置不同的端口号,来实现nginx挂载多个不同的项目.
负载均衡
负载均衡就简单了,就把配置文件改两行:
upstream tomcat {
server 192.168.10.211:8080 weight=10;
server 192.168.10.212:8080 weight=10;
}
server {
listen 80;
server_name localhost
location / {
proxy_pass http://tomcat;
index index.html index.htm;
}
}
weight是权重,权重越大,访问其tomcat的次数越多.
但是现在有一个问题,就是同一个ip地址,nginx随机给你分配一个tomcat,你访问的tomcat不是固定的,在实际应用中这会产生session丢失的问题,每次访问到一个新的tomcat还要再登陆一遍,怎么解决呢?
另外一个问题,可能你的防火墙屏蔽了nginx的80,8080端口
输入下两条指令开启80,8080端口
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
保存: /etc/rc.d/init.d/iptables save
重启防火墙 /etc/init.d/iptables restart CentOS防火墙的关闭,关闭其服务即可:
查看防火墙信息:/etc/init.d/iptables status
关闭防火墙服务:/etc/init.d/iptables stop
Tomcat主备
就加了个backup,192.168.10.211挂了才会访问192.168.10.212
upstream tomcat {
server 192.168.10.211:8080 weight=10;
server 192.168.10.212:8080 weight=10 backup;
}
关于ip_hash; 写入upstream里面,可以实现某ip访问固定的tomcat
但要把nginx服务器放在最前端.
nginx主备方案
用keeplived实现主备,安装keepalived这里就不说了.
修改主nginx下/etc/keepalived/keepalived.conf文件
global_defs {
notification_email {
xxx@xx.com
}
notification_email_from xxx
smtp_server smtp.hysec.com
smtp_connection_timeout 30
router_id nginx_master # 设置nginx master的id,在一个网络是唯一的
}
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" #最后手动执行下此脚本,以确保此脚本能够正常执行
interval 2 #(检测脚本执行的间隔,单位是秒)
weight 2
}
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备
interface eth0 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡)
virtual_router_id 66 # 虚拟路由编号,主从要一直
priority 100 # 优先级,数值越大,获取处理请求的优先级越高
advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port #(调用检测脚本)
}
virtual_ipaddress {
192.168.10.231 # 定义虚拟ip(VIP),可多设,每行一个
}
}
修改备nginx下/etc/keepalived/keepalived.conf文件,和主nginx基本相同
配置备nginx时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致
这个虚拟ip:192.168.10.231就是你对外提供的地址,通过这个地址,访问你的主nginx,然后你的nginx指向了你的其中的一个tomcat.