Nginx + Tomcat搭建Java程序運行環(huán)境

2012-03-20 13:26:59來源:Linux Today作者:

Apache對Java的支持很靈活,他們的結(jié)合度也很高,例如Apache+Tomcat和Apache+resin等都可以實現(xiàn)對Java應(yīng)用的支持。Apache一般采用一個內(nèi)置模塊來和Java應(yīng)用服務(wù)器打交道。與Apache相比,Nginx在配合Java應(yīng)用服務(wù)器方

Apache對Java的支持很靈活,他們的結(jié)合度也很高,例如Apache+Tomcat和Apache+resin等都可以實現(xiàn)對Java應(yīng)用的支持。Apache一般采用一個內(nèi)置模塊來和Java應(yīng)用服務(wù)器打交道。與Apache相比,Nginx在配合Java應(yīng)用服務(wù)器方面,耦合度很低,它只能通過自身的反向代理功能來實現(xiàn)與Java應(yīng)用服務(wù)器的支持,這恰恰是Nginx的一個優(yōu)點,耦合度的降低,可以使Nginx與Java服務(wù)器的相互影響降到最低。

接下來通過Nginx+Tomcat的實例來講解Nginx對Java的支持。Tomcat在高并發(fā)環(huán)境下處理動態(tài)請求時性能很低,而在處理靜態(tài)頁面更加脆弱。雖然Tmcat的最新版本支持epoll,但是通過Nginx來處理靜態(tài)頁面要比通過Tomcat處理在性能方面好很多。

  • Nginx可以通過兩種方式來實現(xiàn)與Tomcat的耦合。
  •  將靜態(tài)頁面請求交給Nginx,動態(tài)請求交給后端Tomcat處理。

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

下面通過兩個配置實例分別講述這兩種實現(xiàn)Nginx與Tomcat耦合的方式。

1. 動態(tài)頁面與靜態(tài)頁面分離實例

這里假定Tomcat服務(wù)器的IP地址為192.168.12.130,同時tomcat服務(wù)器開放的服務(wù)端口為8080,Nginx相關(guān)配置代碼如下:

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/目錄下的靜態(tài)文件交給Nginx來完成,最后一個location指令將所有以.jsp、.do結(jié)尾的文件都交給Tomcat服務(wù)器的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負(fù)載均衡實例

這里假定有三臺Tomcat服務(wù)器,分別開放不同的端口,地址分別是:

192.168.12.131:8000 192.168.12.132:8080 192.168.12.133:8090

Nginx的相關(guān)配置代碼如下:

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; } }

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

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

贊助商鏈接: