Apache,Nginx
Apache和Nginx都屬于屬于 靜态頁面伺服器,都有插件支援動态程式設計語言處理,但Nginx的IO模比Apache更适合跑代理。是以一般都作為前端緩沖代理(Nginx的反向代理功能)。
Tomcat,Jetty
tomcat和Jetty都是Java Servlet容器,可以用來生成動态頁面,主要用來跑Java的Web功能,當然也提供一個簡單靜态頁面轉換:
- Jetty 是面向 Handler 的架構,就像 Spring 是面向 Bean 的架構,iBATIS 是面向 statement 一樣,而 Tomcat 是以多級容器建構起來的,它們的架構設計必然都有一個“元神”,所有以這個“元神“建構的其它元件都是肉身
- Jetty 可以很容易被擴充和裁剪,相比之下,Tomcat 要臃腫很多,Tomcat 的整體設計上很複雜
負載均衡
tomcat的最大優勢在于處理動态請求,處理靜态内容的能力不如Apache和Nginx,并且經過測試發現,tomcat在高并發的場景下,其接受的最大并發連接配接數是由限制的,連接配接數過多會導緻tomcat處于"僵死"狀态,是以,在這種情況下,我們可以利用Nginx的高并發,低消耗的特點與tomcat一起使用。是以,tomcat與Nginx、Apache結合使用共有如下幾點原因:
- Tomcat處理html的能力不如Apache和Nginx,tomcat處理靜态内容的速度不如Apache和Nginx。
- tomcat接受的最大并發數有限,接連接配接數過多,會導緻tomcat處于"僵屍"狀态,對後續的連接配接失去響應,需要結合Nginx一起使用。
通常情況下,tomcat與Nginx、Apache結合使用,Nginx、Apache既可以作為 靜态頁面伺服器,也可以 轉發動态請求 至tomcat伺服器上。但在一個高性能的站點上,通常Nginx、Apache隻提供代理的功能,也就是轉發請求至tomcat伺服器上,而對于靜态内容的響應,則由前端 負載均衡 器來轉發至專門的靜态伺服器上進行處理。其架構類似于如下圖:

在這種架構中:
- Nginx作為前端代理時,如果是靜态内容,如html、css等内容,則直接交給靜态伺服器處理;如果請求的圖檔等内容,則直接交給圖檔伺服器處理。
- 如果請求的是動态内容,則交給tomcat伺服器處理。
是以在這裡,我們通過用Nginx作為代理伺服器來轉發來自前端的請求,
安裝多個Tomcat
- 修改Tomcat端口為:8081,8082(在同一台電腦上,避免端口沖突)
SHUTDOWN | HTTP/1.1 | redirectPort | AJP/1.3 | ||
---|---|---|---|---|---|
預設 | 8005 | 8080 | 8443 | 8009 | |
Tomcat7.1 | 8101 | 8081 | - | ||
Tomcat7.2 | 8102 | 8082 |
- 在兩個Tomcat中context.xml中加入(與
用戶端互動)redis
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60" />
- 兩個Tomcat中加入jar包
- commons-pool2-2.4.2.jar
- jedis-2.7.3.jar
- tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar
Redis
安裝redis(Google,百度一下redis作為nosql,但是下載下傳我的redis版本,在最後),看一下bin下的RedisService.docx
Windows下Nginx指令
-
啟動
直接點選Nginx目錄下的Nginx.exe 或者 cmd運作start Nginx
-
關閉
Nginx -s stop 或者 Nginx -s quit
stop表示立即停止Nginx,不儲存相關資訊
quit表示正常退出Nginx,并儲存相關資訊
-
重新開機(因為改變了配置,需要重新開機)
Nginx -s reload
-
關閉程序
tskill Nginx
Nginx負載均衡配置
在Nginx.conf配置檔案中加入注釋部分
# upstream localhost {
# server localhost:8081;
# server localhost:8082;
# }
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
# proxy_pass http://localhost;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
測試
- 在兩個Tomcat中的webapps下的ROOT下加入一個session.jsp
<%=session.getId()%> + Tomcat7.1
<%=session.getId()%> + Tomcat7.2
- 依次運作redis,Tomcat,Nginx
成功
jar包,redis,Nginx,Tomcat : http://pan.baidu.com/s/1c1NSPzU
總結
Tomcat9配置
最開始,我采用的是Tomcat9,在我安裝的時候總是有問題,很多東西已經改了,tomcat9安裝來安裝去,結果都是同一個Tomcat,有時候版本高就是有點坑。
Tomcat9必須要配置
CATALINA_HOME
問題 :
- 必須配置CATALINA_HOME變量,不然就閃退,但是如果配置就打開了自己的用的Tomcat,不是需要測試的Tomcat,結果是加的東西改變了他的屬性
具體配置參考 : windows下安裝多個tomcat服務
-
安裝服務
在指令行中進入/Tomcat路徑/bin/,執行“service.bat install”:
說明:
- 服務名和顯示名稱:service.bat中設定了預設的服務名稱,不同版本分别命名為Tomcat4、Tomcat5、Tomcat6,如果需要自 定義服務名或服務的顯示名稱,可在service.bat中修改SERVICE_NAME或PR_DISPLAYNAME;
- 防火牆的影響:/bin/tomcat6.exe(或tomcat4.exe、tomcat5.exe)将被作為服務程式,如果有防火牆,需要設為允許作為服務。
-
解除安裝服務
在指令行中進入/Tomcat路徑/bin/,執行“service.bat remove”:
Jar包
jar包是一個很大的問題,有些jar包不支援(錯誤為仔細記錄),而且Tomcat-session jar的實作版本也不一樣。
不過正因為踩了坑,才更有趣,不是嗎?