系统相关
首页 > 系统相关> > windows下 Nginx+Tomcat

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启动失败,一般是端口被占用了,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的主目录,

其实都是调用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