搭建nginx+java環境

《高性能Linux服務器構建實戰:運維監控、性能調優與集羣應用》第1章輕量級HTTP服務器Nginx,本章主要介紹了對高性能HTTP服務器Nginx的安裝、配置、管理和使用,以及Nginx在性能優化方面的一些經驗和技巧,並通過實例分別演示了NginxPHP整合,NginxJavaPerl整合的過程。本節爲大家介紹搭建Nginx+Java環境。

AD

1.8.4 搭建Nginx+Java環境

ApacheJava的支持很靈活,它們的結合度也很高,例如Apache+TomcatApache+resin等都可以實現對Java應用的支持。Apache一般採用一個內置模塊來和Java應用服務器打交道。與Apache相比,Nginx在配合Java應用服務器方面,耦合度很低,它只能通過自身的反向代理功能來實現與Java應用服務器的支持。但這恰恰是Nginx的一個優點,耦合度的降低,可以使NginxJava服務器的相互影響降到最低。

接下來通過Nginx+Tomcat的實例來講解NginxJava的支持。Tomcat在高併發環境下處理動態請求時性能很低,而在處理靜態頁面更加脆弱。雖然Tomcat的最新版本支持epoll,但是通過Nginx來處理靜態頁面要比通過Tomcat處理在性能方面好很多。

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

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

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

下面通過兩個配置實例分別講述這兩種實現NginxTomcat耦合的方式。

1.動態頁面與靜態頁面分離的實例

這裏假定Tomcat服務器的IP地址爲192.168.12.130,同時Tomcat服務器開放的服務器端口爲8080Nginx相關配置代碼如下:

  1. server {  

  2.       listen 80;      

  3.       server_name www.ixdba.net;      

  4.       root /web/www/html;      

  5.  

  6. location /img/ {      

  7.       alias /web/www/html/img/;      

  8. }  

  9.  

  10. location ~ (\.jsp)|(\.do)$ {      

  11.      proxy_pass http://192.168.12.130:8080;      

  12.      proxy_redirect off;      

  13.      proxy_set_header Host $host;      

  14.      proxy_set_header X-Real-IP $remote_addr;      

  15.      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;      

  16.      client_max_body_size 10m;      

  17.      client_body_buffer_size 128k;      

  18.      proxy_connect_timeout 90;      

  19.      proxy_send_timeout 90;      

  20.      proxy_read_timeout 90;      

  21.      proxy_buffer_size 4k;      

  22.      proxy_buffers 4 32k;      

  23.      proxy_busy_buffers_size 64k;      

  24.      proxy_temp_file_write_size 64k;      

  25. }  

  26.  

 

在這個實例中,首先定義了一個虛擬主機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負載均衡的實例

這裏假定有3Tomcat服務器,分別開放不同的端口,地址如下:

  1. 192.168.12.131:8000      

  2. 192.168.12.132:8080      

  3. 192.168.12.133:8090 

 

Nginx的相關配置代碼如下:

  1. upstream mytomcats {      

  2.       server 192.168.12.131:8000;      

  3.       server 192.168.12.132:8080;      

  4.       server 192.168.12.133:8090;      

  5. }  

  6.  

  7. server {  

  8.       listen 80;      

  9.       server_name www.ixdba.net;      

  10.  

  11. location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {      

  12.        root /web/www/html/;      

  13. }  

  14.  

  15. location / {      

  16.           proxy_pass http://mytomcats;      

  17.           proxy_redirect off;      

  18.           proxy_set_header Host $host;      

  19.           proxy_set_header X-Real-IP $remote_addr;      

  20.           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;      

  21.           client_max_body_size 10m;      

  22.           client_body_buffer_size 128k;      

  23.           proxy_connect_timeout 90;      

  24.           proxy_send_timeout 90;      

  25.           proxy_read_timeout 90;      

  26.           proxy_buffer_size 4k;      

  27.           proxy_buffers 4 32k;      

  28.           proxy_busy_buffers_size 64k;      

  29.           proxy_temp_file_write_size 64k;      

  30. }  

  31.  

在這個實例中,先通過upstream定義一個負載均衡組,組名爲mytomcats,組的成員就是上面指定的3Tomcat服務器;接着通過server指令定義一個www.ixdba.net的虛擬主機;然後通過location指令以正則表達式的方式將指定類型的文件全部交給Nginx去處理;最後將其他所有請求全部交給負載均衡組來處理。

這裏還有一點需要注意,如果在location指令使用正則表達式後再用alias指令,Nginx是不支持的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章