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的主目录,

其实都是调用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,很多需要共享的数据都可以这么做。

 

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...