windows nginx + tomcat 负载整合

啰嗦话不多说了,直奔主题


完整实例下载


步骤1:

先到官方下载个windows版本的nginx1.5现在是最新版本,然后随便解压到一个目录下,我的目录是C:\Program Files (x86)\nginx-1.5.0

然后双击那个nginx.exe启动看下;默认配置是80端口,如果没有其他程序占用这个端口就应该没什么问题,然后直接访问http://localhost,看到欢迎界面就OK了


步骤2:

解压两个免安装的tomcat到随便一个目录吧,我的目录是E:\

用myeclipse或者eclipse新建一个web工程随便放点东西下去


windows nginx + tomcat 负载整合


index.jsp的主要内容


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<meta http-equiv="pragma" content="no-cache"/>
		<meta http-equiv="cache-control" content="no-cache"/>
		<meta http-equiv="expires" content="0"/>  
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"/>
		<meta http-equiv="description" content="This is my page"/>
		<title>Insert title here</title>
		<script src="http://localhost/plugin/jquery/core.js" type="text/javascript"></script>
		<script>
			$(function(){
				$("#test").click(function(){
					alert("使用JQUERY方法成功!");
				});
			});
		</script>
	</head>
<body>
	通过nginx进入tomcat访问静态资源成功! <input type="button" id="test" value="测试静态JS"/>
	<% System.out.println("访问了这个页面!");%>
</body>
</html>


然后修改我们的两个tomcat的server.xml指向我们的项目,以及修改启动端口,毕竟一个电脑的端口都是唯一的,所以为了不冲突就只能修改各种不同的端口

这是一个示例,你可以直接搜索port,看到有端口数字就改变下,来点规律,前面加个1然后整个数字再加1(例如端口号是8080,你可以改成18080+1=18081)这样就不会冲突了

<?xml version='1.0' encoding='utf-8'?>
<Server port="18005" shutdown="SHUTDOWN">

  <!--APR library loader. Documentation at /docs/apr.html -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
  <Listener className="org.apache.catalina.core.JasperListener" />
  <!-- Prevent memory leaks due to use of particular java/javax APIs-->
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html -->
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">
  
    <Connector port="18080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="18443" />

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="18009" protocol="AJP/1.3" redirectPort="18443" />

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

		<Context docBase="E:\eclipse\workspace\nginx\WebRoot" reloadable="false" path="/nginx">
		</Context>
      </Host>
    </Engine>
  </Service>
</Server>

然后启动下两个tomcat看下有木有问题,如果木有问题就是OK了(通过bin下面的start启动就可以了)


步骤3: 来改我们的nginx配置文件

在conf下新增一个proxy.conf和gzip.conf文件,前者是使用代理需要的,后者是使用GZIP压缩需要的配置(可不用);具体的参数自己找找资料吧.这里不啰嗦了

proxy.conf

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

gzip.conf

gzip              on;  
gzip_min_length   1024;  
gzip_buffers      4 8k;  
gzip_comp_level   9;  
gzip_proxied      any;  
gzip_types        application/xml application/javascript application/x-javascript application/atom+xml application/rss+xml;  
gzip_types        text/css text/html text/javascript text/js text/plain text/xml; 

最后是修改的重点nginx.conf

可以先copy下面的配置替换默认的配置,然后自己按照需求来调

#Nginx所用用户和组,window下不指定
#user  niumd niumd;
#工作的子进程数量(通常等于CPU数量或者2倍于CPU)
worker_processes  2;
#错误日志存放路径
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
error_log  logs/error.log  info;
#指定pid存放文件
pid        logs/nginx.pid;
events {
#使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue,window下不指定。
#use epoll;
#允许最大连接数
worker_connections  2048;
}
http {
include       mime.types;
default_type  application/octet-stream;
#定义日志格式
#log_format  main  '$remote_addr - $remote_user [$time_local] $request '
#                  '"$status" $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';
#access_log  off;
access_log  logs/access.log;
client_header_timeout  3m;
client_body_timeout    3m;
send_timeout           3m;
client_header_buffer_size    1k;
large_client_header_buffers  4 4k;
sendfile        on;
tcp_nopush      on;
tcp_nodelay     on;
#keepalive_timeout  75 20;
include    gzip.conf;
include	   proxy.conf;
upstream localhost {
#根据ip计算将请求分配各那个后端tomcat,许多人误认为可以解决session问题,其实并不能。
#同一机器在多网情况下,路由切换,ip可能不同
#ip_hash;
#weigth参数表示权值,权值越高被分配到的几率越大
server localhost:18080 weight=1;
server localhost:28080 weight=6;
}
server {
listen       80;
server_name  localhost;

	location / {  
	    root E:/eclipse/workspace/nginx/WebRoot/statict;
	    index index.html index.htm;
	}
	
	location ~ \.(html|js|css|png|gif)$ {  
	    root E:/eclipse/workspace/nginx/WebRoot/statict;
	} 

	location ~ \.(jsp|action)$ {
	    proxy_connect_timeout   3;
	    proxy_send_timeout      30;
	    proxy_read_timeout      30;
	    proxy_pass http://localhost;
	}
}
}

root参数是指向文件夹路径,例如我的默认首页是放在
E:/eclipse/workspace/nginx/WebRoot/statict

index是访问当前root下的各种静态文件,这里配置访问是index.html;我页面请求http://localhost的时候会请求root路径下的index.html

location ~ \.(html|js|css|png|gif)$
这里是正则过滤遇到括号里的类型就会找root路径下的文件,很明显这里就是动态跟静态的分离做法,我是把静态文件都放在static里面


location ~ \.(jsp|action)$
这里是过滤遇到jsp跟action请求就会转移到tomcat里请求资源


最后保存配置文件,关闭nginx,重新启动,访问htt://localhost/nginx/index.jsp

多请求几次就能看到两个tomcat的小黑窗口有显示输出的东西


nginx + tomcat负载就差不多可以了,具体的只是配置的细节,例如拒绝神马请求,请求神马需要转换路径,就写多几个location配置即可,这些内容就自行研究吧!


上一篇:深入理解Spark:核心思想与源码分析. 3.12 Spark环境更新


下一篇:comet4j java服务端推送消息到web页面实例