一、nginx简介
1.什么是nginx?
2.为什么使用niginx?
互联网时代,海量用户高并发已然成为互联网的主体。
如何能让一个网站承载几万甚至几十万个用户的持续访问呢?这是中小网站急需解决的问题。
传统单机tomcat搭建的网站,在比较理想的状态下能够承受的并发访问量在 150 到 200 左右。按照并发访问量占总用户数量的 5% 到 10% 这样计算,单点 tomcat 网站的用户人数在 1500 到 4000 左右。远远不能满足海量用户的访问需求。这时候可以使用负载均衡
来解决高并发的问题,而nginx
就是一款高性能可以实现负载均衡的代理服务器。
应用场景:
- http 服务器,可以做静态网页的 http 服务器。
- 配置虚拟机,一个域名可以被多个 ip 绑定。可以根据域名的不同把请求转发给运行在不同端口的服务器。
- 反向代理,负载均衡。把请求转发给不同的服务器。
二、搭建集群
1.在Windows下搭建集群
1.1.在 D 盘新建两个新建两个目录 tomcat1、tomcat2
1.2.修改 tomcat2 的端口,例如, 在以 tomcat1 的端口为基础上+10,修改完,启动这两个 tomcat,再分别访问
- 访问 8080 端口:
localhost:8080/test/
- 访问 8090 端口:
localhost:8090/test/
1.3.解压 nginx
修改 ngnix 的 nginx.conf 文件,在 location / 下添加反向代理服务器,代理 8080 端口:
location / {
root html;
index index.html index.htm;
proxy_pass http://localhost:8080
}
以上只是代理了一台服务器。启动 nginx,每次访问 localhost/test/, 最后访问的都是8080端口服务器的数据。
1.4.代理集群,例如代理两台服务器
//需要在http节点上添加一个
upstream mz{
server 127.0.0.1:8080;
server 127.0.0.1:8090;
}
//修改location /下的反向代理
proxy_pass http://mz
修改如图:
另外,还可以给服务器添加权重:
表示如果有 6 次访问,则有 4 次可能访问到第二个服务器。启动 nginx,则每次访问localhost/test/,会有可能访问到8080端口服务器的数据,也可能访问到8090端口服务器的数据。
1.5.Session共享问题
- 解决方式一(只能在 windows 下好使):
web 服务器解决(广播机制),注意:tomcat 下性能低
修改两个地方:- 修改两个 tomcat 的 server.xml,支持共享,将引擎标签下的
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
注释去掉
- 修改项目的配置文件 web.xml 中添加一个节点
<distributable/>
- 修改两个 tomcat 的 server.xml,支持共享,将引擎标签下的
- 解决方式二:可以将 session 的 id 放入 redis 中
- 解决方式三:保证一个 ip 地址永远的访问一台 web 服务器,就不存在 session 共享问题了,在 nginx 的配置文件中 upstream 中添加 ip_hash(在 Linux 下经常使用该方式)
ip_hash 指令能够将某个客户端 IP 的请求通过哈希算法定位到同一台后端服务器上。
2.在Linux下搭建集群
2.1.先将 nginx 上传到 linux 上
2.2.解压 nginx
2.3.先编译 nginx
安装依赖包
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
执行编译
先进入 nginx的目录
执行
./configure
2.4.安装 nginx
- 执行
make
- 执行
make install
2.5.启动 nginx:
cd nginx 目录下
配置文件 conf
启动nginx
./nginx
注:
①在 nginx 目录下有一个 sbin 目录,sbin 目录下有一个 nginx 可执行程序
②关闭 ngnix:
- 关闭命令:相当于找到 nginx 进程kill ./nginx -s stop
- 退出命令 ./nginx -s quit等程序执行完毕后关闭,建议使用此命令。
2.6.将端口号 80 放行
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
将该设置添加到防火墙的规则中
/etc/rc.d/init.d/iptables save
2.7.修改 conf 文件和 window 下一样:配置集群