囉嗦話不多說了,直奔主題
完整執行個體下載
步驟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配置即可,這些內容就自行研究吧!