1. 程式人生 > >搭建 nginx+tomcat+Java的負載均衡環境

搭建 nginx+tomcat+Java的負載均衡環境

Nginx可以通過以下兩種方式來實現與Tomcat的耦合:

將靜態頁面請求交給Nginx,動態請求交給後端Tomcat處理。

將所有請求都交給後端的Tomcat伺服器處理,同時利用Nginx自身的負載均衡功能進行多臺Tomcat伺服器的負載均衡。

下面通過兩個配置例項分別講述這兩種實現

一、動態頁面和靜態頁面分離的例項

這裡假定Tomcat伺服器的IP地址為192.168.12.130,同時Tomcat伺服器開放的伺服器埠為8080。Nginx相關配置程式碼如下:

server {   
   listen 80;    
   server_name www.ixdba.net;    
   root /web/www/html;    
    
   location /img/ {    
      alias /web/www/html/img/;    
   }    
    
   location ~ (\.jsp)|(\.do)$ {    
     proxy_pass http://192.168.12.130:8080;    
     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 90;    
     proxy_send_timeout 90;    
     proxy_read_timeout 90;    
     proxy_buffer_size 4k;    
     proxy_buffers 4 32k;    
     proxy_busy_buffers_size 64k;    
     proxy_temp_file_write_size 64k;    
   }     
}  

 在這個例項中,首先定義了一個虛擬主機www.ixdba.net,然後通過location指令將/web/www/html/img/目錄下的靜態檔案交給Nginx來完成。最後一個location指令將所有以.jsp、.do結尾的檔案都交給Tomcat伺服器的8080埠來處理,即http://192.168.12.130:8080

需要特別注意的是,在location指令中使用正則表示式後,proxy_pass後面的代理路徑不能含有地址連結,也就是不能寫成http://192.168.12.130:8080/,或者類似http://192.168.12.130:8080/jsp的形式。在location指令不使用正則表示式時,沒有此限制。

2、多個tomcat負載均衡的例項

Nginx的相關配置程式碼如下:

upstream mytomcats {  
      server 192.168.12.131:8000;  
      server 192.168.12.132:8080;  
      server 192.168.12.133:8090;  
}  
  
server {  
      listen 80;  
      server_name www.ixdba.net;  
  
location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {  
       root /web/www/html/;  
}  
  
location / {  
          proxy_pass http://mytomcats;  
          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 90;  
          proxy_send_timeout 90;  
          proxy_read_timeout 90;  
          proxy_buffer_size 4k;  
          proxy_buffers 4 32k;  
          proxy_busy_buffers_size 64k;  
          proxy_temp_file_write_size 64k;  
}