首頁 >後端開發 >php教程 >Nginx+tomcat設定集群

Nginx+tomcat設定集群

WBOY
WBOY原創
2016-08-08 09:20:13918瀏覽

本文轉載自: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程式碼

  1. #Nginx所使用使用者和群組,window下不指定 
  2. #user  niumd niumd; 
  3.  
  4. #工作的子進程數(通常等於CPU 但 ;
  5.   #錯誤日誌存放路徑 
  6. #error_log  logs/error.log; 
  7. #error_log  logs/error.log  notice;
  8.  
  9. #指定pid存放文件 
  10. pid        logs/nginx.pid; 
  11.  
  12. events { 
  13.     #使用網路機型模型建議使用建議使用內不符
  14.     #use epoll; 
  15.      
  16.     #允許最大連結數 
  17.   
  18.  
  19. http { 
  20.     include       mime.types; 
  21.             #定義日誌格式 
  22.     #log_format  main 
  23. '$remote_addr - $remote_user [$time_local] $request '$remote_addr - $remote_user [$time_local] $request '
  24. '
  25.     #                 
  26. '"$status" $body_bytes_sent "$http_referer" '
  27. '"$status" $body_bytes_sent "$http_referer" '
  28.  
  29.     #                 
  30. '"$http_user_agent" "$http_x_forwarded_for"'
  31. '"$http_user_agent" "$http_x_forwarded_for"'
  32. '"$http_user_agent" "$http_x_forwarded_for"'
  33.  
  34.     #access_log  off; 
  35.     access_log  logs/access.log;  🠎    client_body_timeout    3m; 
  36.     send_timeout                large_client_header_buffers 
  37. 4
  38. 4k; 
  39.  
  40.     sendfile        on; 
  41.     tcp_nopush    
  42.  
  43.     #keepalive_timeout 
  44. 75
  45. 20
  46.  
  47.     include    gzip.conf; 
  48.     upstream localhost { 
  49.     upstream localhost { 
  50.     upstream localhost { 
  51.   
  52.       #同一機器在多網情況下,路由切換,ip可能不同 
  53.       #ip_hash;  
  54.     server localhost:
  55. 18080
  56.      } 
  57.  
  58.     server { 
  59.  
  60.     server
  61.             listen      
  62. 80
  63.                  location/ { 
  64.                                proxy_send_timeout     
  65. 30
  66. 🎠   
  67. 30
  68.                      } 
  69.              
  70.    } 
  71. } _redirect          off; 
  72. proxy_set_header        Host $host;  pro片_set_header 
  73. proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for; 
  74. client_max_body_size    10m;
  75. client_max_body_size    10m; connect_timeout  
  76. 300
  77. proxy_send_timeout     
  78. 300
  79. ize       4k; 

proxy_buffers

4

32k;  proxy_busy_buffers_size 64k; 

    proxy_temp_file_write_size 64k;
  1. gipzft相關碼
  2. gzip              on; 
  3. gzip_min_length      /plain text/css application/x-javascript;
  4. 4、Tomcat配置
  5. 對於tomcat大家都很熟悉,只需要修改server.xml設定檔即可,這裡我們以apache-tomcat-6.0.14為例,分別在server目錄,解壓縮並命名為:apache-tomcat-6.0.14_1、apache-tomcat-6.0.14_2。 第一個連接埠修改:
  6. Xml程式碼
  7. 第一個連接埠修改:
  8. Xml程式碼
  9.  
  10. port
  11. =
  12. "18006"
  13. shutdown
  14. =
"SHUTDOWN"

>

第二處連接埠修改:
    Xml代碼
  1. +
  2. 隨意設置,別太小--> 
Connector

port=

"18081"

protocol🎠       

connectionTimeout="20000"

  
  1.                redirectPort=
  2. "8443"
  3. /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 zxvf  pcre-8.01

    .tar.gz 

    cd pcre-

    8.01

     

    cd pcre-8.01

    du make install
    1. openssl透過apt-get install安裝
    2. sudo apt-get install openssl  sudo apt-get install openssl 
    3. sudo apt-get install libssl-dev 
    4. //如缺少其他包,請採用此方法安裝,ubuntu有依賴提示
    5. //如缺少其他包,請採用此方法安裝,ubuntu有依賴提示
    //如缺少其他包,請採用此方法安裝,ubuntu有依賴提示

    來編譯Nginx:
    1. Shell程式碼
    2. #將window共享目錄軟體拷貝到目前工作目錄 

    cp /mnt/fileshare/nginx-

    0.8

     

      #解壓縮軟體包 
    1. tar zxvf nginx-
    2. 0.8.20.tar.gz 
    3.  
    4. cd nginx-
    5. 0.8
    6. .
    7. 20  //編譯源碼,預設使用nobody,指定本機已存在的用戶,組,啟用nginx-statxus功能,啟用系統監控。啟動debug 
    8. sudo ./configure  --user=niumd --group=niumd --with-debug --with-http_stub_status_module  
    9.   
    10.   sudo make  
    11. sudo make install
    12. 編譯安裝正確結束,依照上述windowm.成功後我們對window下nginx.conf少做修改,如下:
    13. Ubuntu nginx.conf程式碼
    14. 與群組
      1.  
      2. #錯誤日誌存放路徑 
      3. #error_log  logs/error.log; 
      4. #error_log  logs/error.log  notice; 
      5. pid        logs/nginx. pid; 
      6.  
      7. events { 
      8.   #使用網路IO模型linux建議epoll,FreeBSD建議採用kqueue 
      9.   數 
      10.     worker_connections 
      11. 2048
      12.  
      13. http { 
      14.     include       mime.types; 
      15.     default_type    #log_format  main 
      16. '$remote_addr - $remote_user [$time_local] $request '
      17.  
      18.     #                 
      19. '"$status" $body_bytes_sent "$http_referer" '
      20. '"$status" $body_bytes_sent "$http_referer" '
      21.  
      22.     #                 
      23. '"$http_user_agent" "$http_x_forwarded_for"'
      24. '"$http_user_agent" "$http_x_forwarded_for"''"$http_user_agent" "$http_x_forwarded_for"'
      25.  
      26.     #access_log  off; 
      27.     access_log  logs/access.log;  ?    client_body_timeout    3m; 
      28.     send_timeout           
      29.     large_client_header_buffers 
      30. 4
      31. 4k; 
      32.  
      33.     sendfile        on;      tcp_nopush    
      34.  
      35.     #keepalive_timeout  75
      36. 20
      37.  
      38.     include    gzip.conf; 
      39.     upstream localhost { 
      40.      #ip_hash 
      41.       #ip_hash; 
      42.       server localhost:
      43. 18081
      44.       server localhost:
      45. 18080
      46.      } 
      47.  
      48.     server {
      49.             listen      
      50. 80
      51.             server_name  localhost;    
      52.  
      53.             location / { 
      54.               proxy_connect_timeout   3
      55.               proxy_send_timeout     
      56. 30
      57.               proxy_read_timeout     
      58. 30
      59.                 proxy_pass http://localhost; 
      60.             } 
      61.               )使用含dow下基本上相同,差異在使用的IO網路模型,linux下建議使用epoll,另外就是運作所使用的使用者和群組;
      62. 3、配置tomcat
      63. 請參考window下配置,完全相同。
      64. 4、啟動停止nginx
      65. ubuntu下啟動nginx與window稍有不同,大致啟動停止方法如下。
      66. Java程式碼
        1. #nginx目錄執行
        2. sbin/nginx
        3. #nginx目錄執行
        4. sbin/nginx
        5. #nginx目錄執行sbin/nginx -c usr/local/nginx8.
        6. 20
        /conf/nginx/conf

        niumd@niumd-laptop:/usr/local/nginx$ pwd 

        /usr/local/nginx 
        1. niumd@niumd-laptop:/usr/local/ usr/local/nginx/conf/nginx.conf 語法沒問題
        2. 設定檔/usr/local/nginx/conf/nginx.conf 測試成功
        3. niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/$ nginx -v
        4. nginx 版本:nginx/
        5. 0.8
        6. .
        7. 20
        8.  
        9. niumd@niumd-laptop:/usr/local/nginx$ sudo sbin/nginx -V  nginx 版本: nginx/0.8.
        10. 20
        11.  
        12. 由 gcc 4.4.3(Ubuntu
        13. 4.4
        14. .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%   
        15. 1
        16.  
        17. 0
        18. 22
        19. :
        20. 32
        21. ?        00:00:00 nginx:主流程 sbin/nginx  niumd     5159  5158  022
        22. 32
        23. 02232?        00:00:00 nginx:工作流程  niumd     5161  1577
        24.  
        25. 02232022 00:00:00 grep --color=auto nginx  niumd@niumd-laptop:/usr/local/nginx$  
        26. 我們透過ps  -ef|grep nginx,如下看到結果:
        27. 注意一條:在啟動時【linux是因為我們設定的#允許最大連線數worker_connections  2048,超過linux預設1024的限制。

        停止:kill -訊號類型pid

        nginx/logs目錄下一個nginx。 pid的文件,此文件記錄了每次執行的pid,也可以透過ps指令查詢。

        訊號類型如下:

        描述USR1重新加載載入日誌USER2平滑升級執行程序WINCH從容關閉工作流程鎜QUQUp 以上就介紹了Nginx+tomcat配置配置,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。
        訊號類型
        RERM.INT
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn