啰嗦话不多说了,直奔主题
步骤1:
先到官方下载个windows版本的nginx1.5现在是最新版本,然后随便解压到一个目录下,我的目录是C:\Program Files (x86)\nginx-1.5.0
然后双击那个nginx.exe启动看下;默认配置是80端口,如果没有其他程序占用这个端口就应该没什么问题,然后直接访问http://localhost,看到欢迎界面就OK了
步骤2:
解压两个免安装的tomcat到随便一个目录吧,我的目录是E:\
用myeclipse或者eclipse新建一个web工程随便放点东西下去
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配置即可,这些内容就自行研究吧!