Nginx +Tomcat架构的必要性与应用示例

一、Nginx +Tomcat整合的必要性

|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Tomcat在高并发环境下处理动态请求时性能很低,而在处理静态页面更加脆弱。虽然Tomcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很多。 Nginx可以通过如下两种方式来实现与Tomcat的耦合。 ||
| 序号 | 说明 |
| 1 | 【将静态页面请求交给Nginx,动态请求交给后端Tomcat处理】。 即:请求来临之后,先全部到达Nginx服务器,Nginx服务器会对请求进行过滤(通过location实现判断请求URL的静态与动态): 《1》若判断请求时静态则Nginx服务器自己找到静态资源处理后直接返回给客户端; 《2》若判断请求时动态则Nginx服务器会把请求转发给Tomcat服务器,Tomcat服务器处理完成后将结果返回给Nginx,Nginx在返回给客户端。具体情况如下图所示: |
| 2 | 【将所有请都交给后端的Tomcat服务器处理,同时利用Nginx自身的负载均衡功能,进行多台Tomcat服务器的负载均衡】。 即:请求先到达Nginx服务器,Nginx服务器通过负载均衡策略将请求分发到后端的Tomcat服务器上,Tomcat服务器与数据库交互处理完成业务功能后返回结果给Nginx服务器,Nginx服务器再将结果返回给客户端。 《1》若想使Nginx与Tomcat的效率更高,可以将静态的资源放置在Nginx服务器中,直接让Nginx服务器处理返回给客户端;对于动态的资源内容通过Nginx的负载均衡策略传递给Tomcat处理后返回结果给Nginx服务器,Nginx服务器再将结果返回给客户端。. 《2》若访问量十分巨大(如每天有几百万、上千万的访问),首先要做的就是扩展Tomcat服务器;其次静态资源内容就不能只放在Nginx服务器上了,还需要将这些静态资源放到CDN中。 |
[Nginx+Tomcat整合的必要性]

二、Nginx +Tomcat动静分离配置示例

2.1、Nginx+Tomcat动静分离配置示例

bash 复制代码
#Nginx +Tomcat动静分离配置示例
server { 
	listen 80; 
	server_name www.ixdba.net; 
	root /web/www/html;

    #这是Nginx处理的静态资源(即:url带/img/的请求都是到【/web/www/html/img/】路径下查找资源返回) 
    location /img/ { 
	    alias /web/www/html/img/; 
    }

    #这是Nginx将动态内容(以.jsp和.do结尾的文件都反向代理给后端的Tomcat处理,且配置了一些反向代理的优化配置)
    location ~ (\.jsp)|(\.do)$ { 
		proxy_pass http://192.168.1.16: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;
    } 
} 

2.2、root与alias的区别

|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| alias指令和root指令的区别是: 《1》【alias指定的目录是当前目录】; 《2》【root指定的是根目录】; 一般况下,建议在【location / 】中通过【root指令来配置根目录】,而在【其它目录匹配的位置使用alias指令】。 ||
| 序号 | 说明 |
| 1 | bash location /i { # www.a.com/i/123.gif root /var/www/html/images/; #/var/www/html/images/i/123.gif } 这个location段配置中,如果url请求【/i/logo.gif】,那么Nginx将会在服务器上查找【/var/www/html/images/i/logo.gif】文件。 |
| 2 | bash location /i { #www.a.com/i/123.gif alias /var/www/html/images/; #/var/www/html/images/123.gif } 在这个location段配置中,如果url请求【/i/logo.gif】,那么Nginx将会在服务器上查找【/var/www/html/images/logo.gif】文件,也就是说请求的url中location后面的部分会被追加到alias指定的目录后面,而location后面的【 /i 】路径将被自动丢弃。 |
[root与alias的区别]

三、Nginx +Tomcat多tomcat负载均衡配置示例

假设有三台Tomcat服务器,分别开放不同的端口,地址分别是:

【主机192.168.12.131开放8000端口】【主机192.168.12.132开放8080端口】【主机192.168.12.133开放8090端口】对应的Nginx配置文件中相关配置代码如下:

bash 复制代码
#Nginx+Tomcat负载均衡配置示例
http {

    include       mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  logs/access.log  main;
 
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay    on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
    server_names_hash_bucket_size 128;
    client_max_body_size 20m;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
 
    gzip  on;
    gzip_min_length 1k;
    gzip_buffers    4    16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;


    upstream  mytomcats { 
	    server 192.168.1.131:8000 max_fails=3 fail_timeout=20s; 
	    server 192.168.1.132:8080 max_fails=3 fail_timeout=20s;
	    server 192.168.1.133:8090 max_fails=3 fail_timeout=20s;
	    ip_hash;
    } 
    server { 
	    listen 80; 
	    server_name www.ck.net; 
        access_log logs/ck.access.log main;

        #当客户端请求的是以(.jpg .gif .png .swf .flv .wma .wmv .asf .mp3 .mmf .zip .rar)结尾的这类静态资源文件时,Nginx直接从Nginx服务器本机的【/web/www.html/】路径下查找返回给客户端
        location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { 
	        root /web/www/html/; 
        }

        #当客户端的请求处理上面提到的静态资源外全部都走这个反向代理到后端的Tomcat进行处理,Tomcat处理完成后将结果返回给Nginx服务器,Nginx服务器再将结果返回给客户端
        location / {
           proxy_pass http://mytomcats; 
           include    /usr/local/nginx/conf/proxy.conf;
        } 

} 
bash 复制代码
#这是【/usr/local/nginx/conf/proxy.conf】文件的内容
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;
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;
相关推荐
Linlichaoblms4 小时前
Nginx性能调优:参数详解与压测对比
java·spring boot·nginx
feifeigo1237 小时前
在Ubuntu上配置Nginx实现开机自启功能
数据库·nginx·ubuntu
startdrift11069 小时前
docker run 命令,不接it选项,run一个centos没有显示在运行,而run一个nginx却可以呢?
nginx·docker·centos
DN金猿9 小时前
学习nginx location ~ .*.(js|css)?$语法规则
nginx
fendouweiqian1 天前
nginx 反向代理使用变量的坑
运维·nginx
W-GEO1 天前
Nginx 高性能调优指南:从配置到原理
运维·nginx
爱隐身的官人1 天前
新后端漏洞(上)- Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)
java·tomcat·ajp
群联云防护小杜1 天前
服务器异常磁盘写排查手册 · 已删除文件句柄篇
运维·服务器·nginx·开源·lua