preface
公司部分應用跑得的tomcat,眾所周知,tcomat高並發性能很弱,所以在處理靜態請求的時候,我們就把他拋給Nginx處理,而Tomcat專門處理動態請求。所以在這里說說Nginx+tomcat的結合方式。
Nginx和Tomcat結合方式
- 將所有靜態頁面交給nginx,動態請求交給后端tomcat處理。
- 將所有請求交給后端tomcat服務器處理,只是利用Nginx自身的負載均衡功能進行多台tomcat服務器調度流量
動靜分離
我們假設127.0.0.1:8080是tomcat。
那么nginx配置文件如下:
server {
listen 80;
server_name web1.test.com;
charset utf8;
access_log /var/log/nginx/access.log main;
location / {
root /var/www/html;
index index.html index.htm;
}
location /img/ {
root /var/www/html/img;
index index.html index.htm;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.(php|do)$ {
proxy_pass http://127.0.0.1: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 16k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 64k;
}
}
在上面的實例中,首先定義了一個虛擬主機的servername ( web1.test.com),然后凡是首頁的和、img下面的都給nginx完成,而所有jsp,do結尾的交給tomcat處理。
需要注意的是,在location指令中使用正則表達式后,proxy_pass后面的代理路徑不能包含地址連接,也就是不能寫成http://192.168.12.130:8080 ,或者類似http://192.168.12.130:8080/jsp的形式,在location指令不使用正則表達式時,沒有此限制。
對Tomcat負載均衡
Nginx負載均衡配置:
upstream mytomcats {
server 192.168.12.131:8080;
server 192.168.12.132:8080;
server 192.168.12.133:8080;
}
server {
listen 80;
server_name www.baidu.com;
}
location ~* \.(jpg|gif|png|flv|swf|wma|wmv|asf)$ {
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_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
定義了一個upstream負載均衡組,組名為mytomcats,組的成員就是指定的192.168.12.131-192.168.12.133,通過location指令以正則表達式的方式將指定類型的文件全部交給Nginx去處理。其他的所有交給tomcat處理。