windows下 Nginx+Tomcat
作者:互联网
Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务(邮件服务)。
Tomcat集群
1、下载tomcat,解压,复制一份,分别将文件夹重命名为tomcat1、tomcat2
2、修改conf/server.xml中使用的端口号,避免端口冲突
tomcat1的端口:
tomcat1使用默认的端口即可。低版本的tomcat(比如tomcat7),ajp的配置默认是注释掉的,需要取消注释。
http那个标签是建立http连接的,有这个标签才能成为web服务器,才能和客户端连接上。
同一个tomcat进程内,可以共用一个端口,所以2个重定向使用的端口可以相同。
tomcat2的端口:
很多教程的重定向端口都没有改,因为一个小demo,也用不上重定向。
3、用记事本打开bin/startup.bat,分别在开头加上
set TITLE="tomcat1" set CATALINA_HOME="D:\tomcat1"
set TITLE="tomcat2" set CATALINA_HOME="D:\tomcat2"
TITLE是启动tomcat时弹出的windows的黑框框的窗口标题,这个无关紧要。
CATALINA_HOME是tomcat的主目录的路径,启动tomcat时会检测startup.bat中是否设置了CATALINA_HOME,设置了就使用设置的,未设置就使用环境变量中的CATALINA_HOME,如果环境变量中也未设置,一闪而过启动失败。
启动的是CATALINA_HOME指定的tomcat,不是你双击|调用哪个tomcat的startup.bat就启动哪个tomcat。
只能写在startup.bat中,如果把值都写在环境变量CATALINA_HOME中,鬼知道你要启动哪个tomcat。
startup.bat中设置的CATALINA_HOME优先级高于环境变量中的设置。
4、将2个tomcat的conf/logging.properties中的控制台编码从UTF-8改为GBK,喜欢看乱码的可以不改。
5、tomcat依赖jdk(将jsp转换为servelt要用到jdk),环境变量中需要设置JAVA_HOME,值是jdk主目录的路径。
6、分别双击startup.bat启动2个tomcat,部署相同的项目,为了好观察效果,在tomcat1的项目的index.jsp的<body>中写tomcat1,另一个写tomcat2,浏览器中输入地址测试下项目是否都部署成功了。
Nginx
1、下载Nginx的windows版,解压
2、修改conf/nginx.conf
服务器列表中我给每个服务器(tomcat)加了权重,使用加权轮询,这样才方便看到效果。
默认是轮询(不设置权重、或者权重都为1),将服务器列表排成一圈,根据服务器列表配置的前后顺序:
nginx:tomcat1,你闲着不?
tomcat1:我闲着
nginx:那你处理下请求
nginx:tomcat1,你闲着不?
tomcat1:我正在处理请求
nginx:tomcat2,你闲着不?
tomcat2:我闲着
nginx:那你来处理请求
部署的项目小、处理速度快,又是本地机上,请求、响应时间只有几毫秒、十几毫秒,tomcat1基本都是闲着的,如果使用轮询,看到的一直都是tomcat1。
分配不同的权重才看得到tomcat2。如果你部署一个很大的项目,或者单身多年点一次刷新只需几毫秒,也可以看到tomcat2。
3、双击启动nginx.exe,验证nginx是否启动成功的2种方式:
- 任务管理器看一下有没有nginx的2个进程
- 浏览器地址栏输入127.0.0.1,看一下有没有nginx的首页或者tomcat的首页。如果没启动tomcat,看到的是nginx的首页;如果启动了tomcat,会将请求转发给tomcat,看到的是tomcat的首页
如果nginx启动失败,一般是端口被占用了,nginx默认使用80端口,杀掉占用端口的进程,或者在conf/nginx.conf中修改端口号,如果修改了端口号,地址栏中要写上端口号。
4、比方tomcat1的项目地址是 http://127.0.0.1:8080/test/ ,tomcat2的项目地址是 http://127.0.0.1:8081/test/
在地址栏输入127.0.0.1:80/test 即访问部署的项目,这个127.0.0.1:80是nginx的ip、端口。
端口号默认就是80,如果nginx使用80端口,地址栏可以不写端口号,如果不是80端口,必须写上端口号。
多个tomcat启动|关闭的3种方式:
1、双击.bat
2、命令行,切换到单个tomcat所在目录,startup、shutdown,cd来cd去很麻烦
3、将tomcat1的2个.bat分别重命名为startup1.bat、shutdown1.bat,tomcat2的分别重命名为startup2.bat、shutdown2.bat。
Path环境变量中添加tomcat1、tomcat2的bin目录,重启。配置环境变量,需重启电脑才会生效。
命令行下startup1即运行startup.bat、启动tomcat1,shutdown1即运行shutdown1.bat、停止tomcat1,tomcat2也是同样的道理。命令行传入的是.bat的文件名。
nginx启动|关闭的2种方式
1、双击nginx.exe启动,任务管理器结束nginx的2个进程即关闭,修改nginx的配置需先结束2个进程、再双击nginx.exe启动。
2、命令行cd到nginx的主目录,
- start nginx 启动nginx
- nginx -s reload 重新加载配置。修改nginx的配置后无需重启nginx,执行此命令即生效。
- nginx -s stop 快速停止nginx。这个是强制停止nginx,可能导致一些问题。
- nginx -s quit 完整有序地停止nginx。
其实都是调用nginx.exe,传递的参数不同罢了。
把nginx的主目录添加到Path环境变量中,不用cd到nginx主目录就可操作?
理论上是这样,但实操时基本都是毛病,不是启动失败(命令无效),就是停止的时候报错:不能创建xx日志文件、不能找到xx日志文件.......
cd到nginx的主目录进行操作,就不会出现这样的问题。
session共享
session原本是储存在tomcat服务器上的:
这次可能用tomcat1处理此用户的请求,此次的session数据保存在tomcat1上
下次可能使用tomcat2处理此用户的请求,tomcat2在本机上找不到此用户的session数据(因为储存在tomcat1上),而这次产生的session数据保存在tomcat2上,tomcat1上的session数据没有更新。
数据不同步是分布式系统(集群、微服务)都会遇到的问题
解决方式:使用redis实现session共享
session等数据保存到redis上,而非tomcat本地,要用时从redis上取出。
不局限于session,很多需要共享的数据都可以这么做。
标签:bat,Tomcat,tomcat,nginx,windows,端口,Nginx,tomcat2,tomcat1 来源: https://www.cnblogs.com/chy18883701161/p/12346301.html