Nginx部署自己的项目
开发步骤:
-
第一步更改tomcat的端口号
在slave01虚拟机中更改端口号 192.168.68.130
69 <Connector port=“8081” protocol=“HTTP/1.1”
70 connectionTimeout=“20000”
71 redirectPort=“8443” />在master虚拟机中更改端口号 192.168.68.129
<Connector port=“8082” protocol=“HTTP/1.1”
70 connectionTimeout=“20000”
71 redirectPort=“8443” /> -
第二步:在server.xml文件中添加部署项目的虚拟目录
-
第三步:配置nginx的主配置文件
upstream tomcatServer01{
server 192.168.68.129:8082 weight = 3;
server 192.168.68.130:8081 weight = 1;
}
server {
listen 80;
server_name zhiyou200_java;
location / {
proxy_pass http://tomcatServer01;
index /;
}
}
-
重启nginx服务器
cd /usr/local/nginx/sbin
./nginx -s reload
Nginx集群的其他配置
```java
upstream tomcatServer1{ # 代理名字 名字任意
server 192.168.68.129:8082 weight=3 ; # weight 权重 server配置nginx转发应用服务器所在的虚拟主机的ip地址
server 192.168.68.130:8081 ; # 让nginx关联另一台tomcat应用服务器
# server 192.168.68.131:8083 down; # 表示当前的server应用服务器不参与负载均衡
# server 192.168.68.132:8084 backup; # 其他所有的非backup机器或者是down或者忙时的服务器请求backup服务器
# 被backup标记的应用服务器压力最轻
server 192.168.68.133:8085 max_fail = 3 ; # 允许请求失败的最大次数 默认值为1 默认情况下两秒钟检测一次
# 当失败请求超过最大次数,返回 proxy_next_upstream模块定定义的错误
# server 192.168.134:8086 fail_timeout = 1000; # 请求连接的超时时间 max_fail次失败后,暂停的时间为准
}
```
Nginx负载均衡环境中的Session共享问题
web服务器通过nginx连接起来,这样同一个IP访问同一个页面有可能会被分发到不同的应用服务器上面,
如果session不同步,就会出现session在多台服务器中不共享的问题。
解决方案:
-
第一种解决方案: 使用session借助cookie进行缓存:这种方式实现起来很容易,但是如果客户端把cookie禁掉了
那么就会出现session不同步了,cookie的网络安全性较低,里面的值是可以被伪造的。
-
第二种解决方案: 使用数据库,把 session值存储进数据库中,如我们的mysql中
虽然它实现了session同步,会加大对数据库的IO操作,增加数据库的负担,而且读写数据库效率较低
-
第三种解决方案: 往缓存中放 ,把session值存储在memcache或者redis中
memcache也可以做分布式
虽然它也实现了session同步,如果memcahe把内存划分成很多种规格的存储块,会产生很多个内存碎片,
如果存储块不足,就会导致内存溢出现象。
-
第四种解决方案: 使用nginx的自带的 ip_hash 能够解决将某个IP的请求定向到同一台后端,这样一来这个IP下的 某个客户端和某个后端就建立起了稳定的连接,session实现同步
upstream tomcatServer1{ # 代理名字 名字任意
ip_hash;
server 192.168.68.129:8082 weight=3 ; # weight 权重 server配置nginx转发应用服务器所在的虚拟主机 的ip地址
server 192.168.68.130:8081 ; # 让nginx关联另一台tomcat应用服务器 }
没办法实现分流
-
第五种解决方案: upstream_hash
可以解决ip_hash的一些问题,可以使用upstream_hash这个第三个模块,这个模块在大多数情况下是用作url_hash,也可以实现session共享