一、下载Nginx安装包
官方网站:http://nginx.org/
有两个版本windows版本和linux版本。生产环境都是使用linux版本。
二、Nginx的安装与部署
2.1 在Windows上安装部署
2.1.1 解压安装
将安装包解压到某个盘符下,比如:D: ginx
目录结构:
2.1.2 启动运行
双击 nginx.exe 即可运行,登陆 http://localhost:80(默认端口80,输入网址时80可省略)访问,显示如下界面表示安装成功。
小贴士:此页面其实就是安装包下html文件夹中的index.html。等同于根路径下的初始化界面。后续我们可以通过nginx.conf文件修改它的默认首页等配置信息。
2.1.3 关闭停止
-
- 手动关闭:结束 nginx 的进程;
- 命令行关闭:nginx -s stop
2.1.4 重新加载配置文件
-
- 命令行加载:nginx -s reload // 可以在不关闭 nginx 的情况下进行更新
2.2 在Linux上安装部署
2.2.1 安装
1)安装环境
-
- gcc
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc。
* yum install gcc-c++
-
-
PCRE
-
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括perl兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
* yum install -y pcre pcre-devel
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
-
-
zlib
-
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
* yum install -y zlib zlib-devel
-
-
openssl
-
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
* yum install -y openssl openssl-devel
2)编译与安装
① 把nginx的源码包上传至linux服务器
② 解压源码包。 如:tar -zxf nginx-1.8.0.tar.gz
③ 进入nginx-1.8.0文件夹。使用configure命令创建makefile
④ 参数设置如下:(可根据实际情况进行修改,也可不修改)
./configure
--prefix=/usr/local/nginx
--pid-path=/var/run/nginx/nginx.pid
--lock-path=/var/lock/nginx.lock
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--with-http_gzip_static_module
--http-client-body-temp-path=/var/temp/nginx/client
--http-proxy-temp-path=/var/temp/nginx/proxy
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi
--http-scgi-temp-path=/var/temp/nginx/scgi
注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录
⑤ make
⑥ make install
2.2.2 启动与关闭
在nginx目录下有一个sbin目录,sbin目录下有一个nginx可执行程序。
命令行启动:./nginx
命令行关闭:./nginx -s stop
命令行退出:./nginx -s quit // 等程序执行完毕后关闭,建议使用此命令。
2.2.3 重新加载配置文件
命令行加载:./nginx -s reload // 可以在不关闭 nginx 的情况下进行更新
三、Nginx搭建Tomcat集群
3.1 tomcat集群配置
- 首先安装部署多个tomcat服务器,在没有条件的情况下,可以在本地安装多个tomcat后,分别对tomcat重命名并修改配置文件server.xml中的端口号(为了避免端口冲突);
- 再将项目分别发布到相应的tomcat中。
设置Linux的防火墙:(在linux上搭建集群)
* /sbin/iptables -I INPUT -p tcp --dport 端口号 -j ACCEPT
* /etc/rc.d/init.d/iptables save (永久保存上面修改后的设置)
3.2 Nginx负载均衡配置
- 修改安装目录下conf文件夹下的nginx.conf配置文件 (nginx/conf/nginx.conf)
- 重新加载配置文件
// 可以在不关闭 nginx 的情况下进行更新
windows命令行加载:nginx -s reload
liunx命令行加载:./nginx -s reload
3.3 Tomcat集群的session共享
在上述的配置中,我们可以通过http://localhost:801访问到不同的tomcat来分担服务端的压力。
需要注意的是,请求负载过程中的会话信息不能丢失,那么就需要在多个tomcat中进行session的共享。
- 配置tomcat的session共享问题可以有三种解决方案
- ① 以负载均衡器本身提供的session共享策略。在Nginx的nginx.conf配置文件中配置ip_hash,让一个用户的请求只在一个tomcat服务器上进行操作。
- ② 利用web容器本身的session共享策略来配置共享。针对于weblogic这种方式还是靠普的,但是针对于tomcat这种方式存在很大的缺陷,主要因为是依靠广播机制来实现的session复制,互相复制会浪费很多带宽导致整个网络反映缓慢。官网也建议这种方式最好不要超过4台tomcat。(不推荐)
* 使用tomcat的广播机制完成session的共享。
步骤:
- 修改tomcat配置文件server.xml,只需要将引擎节点中注释掉的下面这句取消注释即可:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
使用这样方法配置的集群会将Session同步到所在网段上的所有配置了集群属性的实例上(此处讲所在网段可能不准确,是使用Membership 的address和port来区分的。tomcat集群的实例如果在Membership配置中有相同的address和port值的tomcat被分到同一个集群里边。他们的session是相互共享的,同一个session的集群被称为一个cluster。可以配置多个cluster,但是cluster和cluster之间的session是不共享的)。也就是说如果该广播地址下的所有Tomcat实例都会共享Session,那么假如有几个互不相关的集群,就可能造成Session复制浪费,所以为了避免浪费就需要对节点多做点设置了,如下:
Xml代码:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
</Channel>
</Cluster>
加了一个Channel,里面包了个Membership,咱们要关注的就是membership的port属性和address属性,不同的集群设置不同的port值或address值,从目前的使用来看,基本上是隔离开了。
- 修改项目的web.xml文件,只需要在web-app节点中添加这个节点<distributable/>就可以了。
- 重启服务器
- ③ 使用redis服务器的方式完成session的共享。(推荐)