Nginx+tomcat設定集群
Aug 08, 2016 am 09:20 AM本文轉載自:http://os.51cto.com/art/201111/304608.htm
本文介紹了透過在Windows xp和ubuntu兩種環境下nginx和tomcat的叢集配置,最終實現負載平衡。
AD:
開發的應用採用F5負載平衡交換機,F5將請求轉發給5台hp unix伺服器,每台伺服器有多個webserver實例,對外提供web服務和socket等介面服務。之初,曾有個小小的疑問為何不採用開源的apache、Nginx軟體負載,F5設備動輒幾十萬,價格昂貴?自己一個比較幼稚的問題,後續明白:F5是操作於IOS網路模型的傳輸層,Nginx、apache是基於http反向代理方式,位於ISO模型的第七層應用層。直白些就是TCP UDP 和http協定的差別,Nginx不能為基於TCP協定的應用提供負載平衡。
了解了二者之間的區別於應用場景,對Nginx產生濃厚的興趣,閱讀張宴的(這個85年的小伙子年輕有為羨慕+妒忌),搞明白了大致原理和配置,Ubuntu10.10,window下對Nginx+tomcat負載平衡做了配置嘗試,將全部請求轉發到tomcat,並未做靜態,動態分開,圖片防盜鍊等配置。
Nginx 介紹
Nginx (發音同 engine x)是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協定下發行。其特點是佔有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁服務器中表現較好.目前中國大陸使用nginx網站用戶有:新浪、網易、 騰訊,另外知名的微網志Plurk也使用nginx。
上面的全是Nginx介紹基本上是廢話,下面轉入正題,圖文結合展示基本配置,首先是window環境、其次是Ubuntu環境(Vbox虛擬)。
Window xp環境:Nginx+Tomcat6
1、下載地址
http://nginx.org/en/download.html ,這裡我們推薦下載穩定版(stable versions),本文採用nginx-0.8. 20。
2、目錄結構
Nginx-
|_ 暫存檔案目錄
|_ html 靜態頁目錄
nginx.exe 主程式
window下安裝Nginx極為簡單,解壓縮到一個無空格的英文目錄即可(個人習慣,擔心中文出問題),雙擊nginx啟動,這裡我安裝到:D:server目錄,下面涉及到的tomcat也安裝在此目錄。
DOS環境啟動
若果想停止nginx,dos環境運行指令:nginx -s stop
3、nginx.conf設定
Nginx設定檔預設在conf目錄,主要設定檔為nginx.conf,我們安裝在D:servernginx-0.8.20、預設主設定檔為D:servernginx-0.8.20nginx.conf。下面是nginx作為前端反向代理伺服器的設定。
Nginx.conf程式碼
- #Nginx所使用使用者和群組,window下不指定
- #user niumd niumd;
- #工作的子進程數(通常等於CPU 但 ;
- #錯誤日誌存放路徑
- #error_log logs/error.log;
- #error_log logs/error.log notice;
- #指定pid存放文件
- pid logs/nginx.pid;
- events {
- #使用網路機型模型建議使用建議使用內不符
- #use epoll;
- #允許最大連結數
- http {
- include mime.types;
- #定義日誌格式 #log_format main
- '$remote_addr - $remote_user [$time_local] $request '$remote_addr - $remote_user [$time_local] $request ' '
- # '"$status" $body_bytes_sent "$http_referer" '
- '"$status" $body_bytes_sent "$http_referer" '
- #
- '"$http_user_agent" "$http_x_forwarded_for"' '"$http_user_agent" "$http_x_forwarded_for"'
- '"$http_user_agent" "$http_x_forwarded_for"' ;
- #access_log off;
- access_log logs/access.log; client_body_timeout 3m;
- send_timeout large_client_header_buffers 4
- 4k;
- sendfile on;
- tcp_nopush
- #keepalive_timeout
- 75
- 20 ;
- include gzip.conf;
- upstream localhost { upstream localhost {
- upstream localhost {
- #同一機器在多網情況下,路由切換,ip可能不同
- #ip_hash; server localhost:
- 18080; }
- server {
- server listen
- 80 ;
- location/ {
- proxy_send_timeout 30
- ; 🎠
- 30 ;
- }
- } } _redirect off;
- proxy_set_header Host $host; pro片_set_header
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- client_max_body_size 10m; client_max_body_size 10m; connect_timeout
- 300 ;
- proxy_send_timeout
- 300
; ize 4k;
proxy_buffers
432k; proxy_busy_buffers_size 64k;
- proxy_temp_file_write_size 64k;
- gipzft相關碼 gzip on;
- gzip_min_length /plain text/css application/x-javascript;
- 4、Tomcat配置
- 對於tomcat大家都很熟悉,只需要修改server.xml設定檔即可,這裡我們以apache-tomcat-6.0.14為例,分別在server目錄,解壓縮並命名為:apache-tomcat-6.0.14_1、apache-tomcat-6.0.14_2。 第一個連接埠修改: Xml程式碼
- 第一個連接埠修改: Xml程式碼
- port =
- "18006"
- shutdown =
第二處連接埠修改:
- Xml代碼
- +
- 隨意設置,別太小-->
port=
"18081"protocol🎠connectionTimeout="20000"
- redirectPort= "8443"
-
/c ector port="8009" protocol="AJP/1.3" redirectPort="8443" />
Engine元素增加jvmRoute屬性:Xml程式碼
Enginename="Catalina"defaultHost="localhost" cat的連接埠別重複,保證能啟動起來,另一個tomcat配置希捷省略,監聽埠為18080,附件中我們將上傳所有的設定資訊。 5、驗證設定與測試負載平衡
先測試nginx設定是否正確,測試指令:nginx -t (預設驗證:confnginx.conf),也可以指定設定檔路徑。其次驗證tomcat,啟動兩個tomcat,不出現端口衝突即為成功(tomcat依賴的java等搞“挨踢”的就廢話不說了);
最後驗證配置負載平衡設置,http:// localhost/ 或http://localhost/index.jsp 。我修改了index.jsp頁面,增加日誌輸出訊息,以便於觀察。注意:左上角小貓頭上的:access tomcat2、access tomcat1。說明訪問了不同的tomcat。 至此window下nginx+tomcat負載平衡配置結束,關於tomcat Session的問題通常是採用memcached,或者採用nginx_upstream_jvm_route ,他是一個 Nginx 的擴展模組,用來實現基於 Cookie 的 Sessvm_route ,他是一個 Nginx 的擴展模組,用來實現基於 Cookie 的 Sessvmion Sticky 的功能。如果tomcat過多不建議session同步,server間互相同步session很耗資源,高並發環境容易造成Session風暴。請依照 自己應用情況合理採納session解決方案。
Ubuntu10.10環境:Nginx+Tomcat6
我們下面簡單說下ubuntu10.10下如何安裝設定
1. en/download.html ,linux版本:nginx-0.8.20.tar.。解壓縮指令:tar -zxvf nginx-0.8.20.tar.gz
2、編譯安裝NginxNginx依賴一些其他PCRE、openssl(依賴libsslbtu),自己依賴PCRE,只需安裝依賴的openssl,以下我們簡單說下如何安裝PCRE和openssl等
PCRE下載位址:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Shell程式碼
.tar.gz cd pcre-
tar zxvf pcre-8.018.01
cd pcre-8.01
du make install- openssl透過apt-get install安裝
- sudo apt-get install openssl sudo apt-get install openssl
- sudo apt-get install libssl-dev
- //如缺少其他包,請採用此方法安裝,ubuntu有依賴提示
- //如缺少其他包,請採用此方法安裝,ubuntu有依賴提示
- Shell程式碼
- #將window共享目錄軟體拷貝到目前工作目錄
cp /mnt/fileshare/nginx-
0.8- #解壓縮軟體包
- tar zxvf nginx-
- 0.8.20.tar.gz
- cd nginx-
- 0.8 .
- 20 //編譯源碼,預設使用nobody,指定本機已存在的用戶,組,啟用nginx-statxus功能,啟用系統監控。啟動debug sudo ./configure --user=niumd --group=niumd --with-debug --with-http_stub_status_module
- sudo make sudo make install
- 編譯安裝正確結束,依照上述windowm.成功後我們對window下nginx.conf少做修改,如下:
- Ubuntu nginx.conf程式碼
- 與群組
- #錯誤日誌存放路徑
- #error_log logs/error.log;
- #error_log logs/error.log notice; pid logs/nginx. pid;
- events {
- #使用網路IO模型linux建議epoll,FreeBSD建議採用kqueue
- 數
- worker_connections
- 2048 ;
- }
- http {
- include mime.types;
- default_type #log_format main
- '$remote_addr - $remote_user [$time_local] $request '
- #
- '"$status" $body_bytes_sent "$http_referer" ' '"$status" $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"'
- '"$http_user_agent" "$http_x_forwarded_for"''"$http_user_agent" "$http_x_forwarded_for"';
- #access_log off;
- access_log logs/access.log; ? client_body_timeout 3m;
- send_timeout
- large_client_header_buffers 4
- 4k;
- sendfile on; tcp_nopush
- #keepalive_timeout 75
- 20;
- include gzip.conf;
- upstream localhost {
- #ip_hash
- #ip_hash;
- server localhost:
- 18081 ;
- server localhost:
- 18080 ;
- }
- server {
- listen
- 80 ;
- server_name localhost;
- location / {
- proxy_connect_timeout 3; proxy_send_timeout
- 30 ;
- proxy_read_timeout
- 30 ;
- proxy_pass http://localhost;
- }
- )使用含dow下基本上相同,差異在使用的IO網路模型,linux下建議使用epoll,另外就是運作所使用的使用者和群組;
- 3、配置tomcat
- 請參考window下配置,完全相同。
- 4、啟動停止nginx
- ubuntu下啟動nginx與window稍有不同,大致啟動停止方法如下。
- Java程式碼
-
- #nginx目錄執行
- sbin/nginx #nginx目錄執行
- sbin/nginx
- #nginx目錄執行sbin/nginx -c usr/local/nginx8. 20
niumd@niumd-laptop:/usr/local/nginx$ pwd
/usr/local/nginx- niumd@niumd-laptop:/usr/local/ usr/local/nginx/conf/nginx.conf 語法沒問題
- 設定檔/usr/local/nginx/conf/nginx.conf 測試成功
- niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/$ nginx -v
- nginx 版本:nginx/ 0.8
- . 20
- niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/nginx -V nginx 版本: nginx/0.8. 20
- 由 gcc 4.4.3(Ubuntu 4.4
- .3-4ubuntu5) 設定參數: --user=niumd --group=niumd --with-debug --with-http_sub_module niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/nginx niumd@niumd-laptop:/usr/local/nginx$ ps -ef|grepginxroot 5% 1
- 0
- 22
- : 32
- ? 00:00:00 nginx:主流程 sbin/nginx niumd 5159 5158 022: 32
- 022:32? 00:00:00 nginx:工作流程 niumd 5161 1577
- 022:32022 00:00:00 grep --color=auto nginx niumd@niumd-laptop:/usr/local/nginx$
- 我們透過ps -ef|grep nginx,如下看到結果:
注意一條:在啟動時【linux是因為我們設定的#允許最大連線數worker_connections 2048,超過linux預設1024的限制。
停止:kill -訊號類型pid
nginx/logs目錄下一個nginx。 pid的文件,此文件記錄了每次執行的pid,也可以透過ps指令查詢。
訊號類型如下:
訊號類型 描述RERM.INT USR1 重新加載載入日誌 USER2 平滑升級執行程序 WINCH 鎜QUQUp從容關閉工作流程 以上就介紹了Nginx+tomcat配置配置,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

熱門文章

熱門文章

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)