nginx实现tomcat动静分离详解

nginx实现tomcat动静分离详解1.为什么要实现动静分离1)nginx的处理静态资源能力超强主要是nginx处理静态页面的效率远高于tomcat的处理能力,如果tomcat的请求量为1000次,则nginx的请求量为6000次,tomcat每秒的吞吐量为0.6M,nginx的每秒吞吐量为3.6M,可以说,nginx处理静态资源的能力是tomcat处理能力的6倍,优势可见一斑。2)动态资源和静态资源分开,使服务器结构更

大家好,又见面了,我是你们的朋友全栈君。

nginx实现tomcat动静分离详解

 

1.为什么要实现动静分离

 

1)nginx的处理静态资源能力超强

 

主要是nginx处理静态页面的效率远高于tomcat的处理能力,如果tomcat的请求量为1000次,则nginx的请求量为6000次,tomcat每秒的吞吐量为0.6M,nginx的每秒吞吐量为3.6M,可以说,nginx处理静态资源的能力是tomcat处理能力的6倍,优势可见一斑。

2)动态资源和静态资源分开,使服务器结构更清晰。

 

2.动静分离原理

 

服务端接收来自客户端的请求中,有一部分是静态资源的请求,例如html,css,js和图片资源等等,有一部分是动态数据的请求。因为tomcat处理静态资源的速度比较慢,所以我们可以考虑把所有静态资源独立开来,交给处理静态资源更快的服务器例如nginx处理,而把动态请求交给tomcat处理。
如下图所示,我们在机器上同时安装了nginx和tomcat,把所有的静态资源都放置在nginx的webroot目录下面,把动态请求的程序都放在tomcat的webroot目录下面,当客户端访问服务端的时候,如果是静态资源的请求,就直接到nginx的webroot目录下面获取资源,如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给tomcat进行处理,这样就实现了动静分离,提高了服务器处理请求的性能。

nginx实现tomcat动静分离详解

 

3.动静分离的详细配置

 

1)首先熟悉下nginx的重要配置文件nginx.conf

 

 

user  nginx;
worker_processes  1;
error_log  logs/error.log;
pid       logs/nginx.pid;
events {
    worker_connections  1024;
}
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;
    keepalive_timeout  65;
    #gzip压缩功能设置
    gzip on;
    gzip_min_length 1k;
    gzip_buffers    4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascripttext/css application/xml;
    gzip_vary on;
    server {
        listen       80;
        server_name www.test.com;
        location / {
    #jsp网站程序根目录,一般nginx与tomcat在同一个目录
            root  /usr/local/tomcat/webapps/ROOT;
            index  index.html index.jsp index.html;
        }
        location ~ .*.jsp$ {
        index index.jsp;
        proxy_pass http://127.0.0.1:8080;   #来自jsp请求交给tomcat处理
        proxy_redirect off;
        proxy_set_header Host $host;    #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        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;   #nginx跟后端服务器连接超时时间(代理连接超时)
        proxy_read_timeout 90;      #连接成功后,后端服务器响应时间(代理接收超时)
        proxy_buffer_size 4k;       #设置代理服务器(nginx)保存用户头信息的缓冲区大小
        proxy_buffers 6 32k;        #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
        proxy_busy_buffers_size 64k;#高负荷下缓冲大小(proxy_buffers*2)
        proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
        }
        location ~ .*\.(gif|jpg|png|bmp|swf)$   #由nginx处理静态页面
        {
        expires 30d;   #使用expires缓存模块,缓存到客户端30天
        }
        location ~ .*\.( jsp|js|css)?$
        {
        expires 1d;
        }
        error_page  404              /404.html;   #错误页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

 

 

 

2)配置动静分离

 

 

        #配置Nginx动静分离,定义的静态页面直接从Nginx发布目录读取。
	location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$ {
	    root /webapps/myproject/code/static-resource;
            #expires定义用户浏览器缓存的时间为7天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力
	    expires 1d;
	}
	location ~ ^/(WEB-INF)/ {#这个很重要,不然用户就可以访问了
            deny all;  
        }

这里需要注意,外部静态文件的存放路径,应当与请求中路径一致,以免nginx拼接路径后,由于路径不存在而找不到文件。如果出现js、css等不加载的情况,可以查看nginx的errorlog进行调试修正,日志位于nginx目录下的logs目录内,如下截取一段错误的日志:

 

 

[error] 7195#0: *1693 open() "/home/cms/include/dedeajax2.js" failed (2: No such file or directory), client: 101.226.35.225, server: localhost, request: "GET /cms/include/dedeajax2.js HTTP/1.1"  

可以看到,GET请求是 “ /cms/include/dedeajax2.js ”,这时nginx就会在配置中的 /home 下,寻找这一路径的文件,完整路径为:

 

 

/home/cms/include/dedeajax2.js

 

 

 

报错为 no such file or directory ,就可以在对应的 /home 目录下看文件路径的问题。 
配置成功后,就可以发现静态文件通过nginx处理了,静态文件的请求不再进入tomcat服务器,从而可以打包时,静态文件的目录如js、css等不再打进war包。 

 

The end…
nginx实现tomcat动静分离详解

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135537.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 视觉SLAM技术简述,一文了解视觉SLAM「建议收藏」

    视觉SLAM技术简述,一文了解视觉SLAM「建议收藏」如今科技发展日新月异,随着机器人、AR/VR等人工智能领域的不断发展,视觉SLAM也取得了惊人的发展。本文就视觉SLAM的定义、研究分类、模块、工作原理及应用方向等方面做一个视觉SLAM的技术简述。视觉SLAM是什么?SLAM的英文全称是SimultaneousLocalizationandMapping,中文称作「即时定位与地图创建」,而视觉SLAM就是用摄像头来完成环境的感知工作。当一个自主移动的机器人处在一个未知的环境,它要通过摄像头获取的信息数据对自身以及周围环境进行一个预估.

    2022年10月1日
    0
  • android开机动画包制作工具实现「建议收藏」

    android开机动画包制作工具实现「建议收藏」android开机动画包制作  由于项目的需要,要制作LOGO有光亮的闪烁,网上查了资料,都是介绍 desc.txt文件的格式,但对于每一帧的图片制作没有现成的工具,所以本人试着自己先一个,只要满足自己的需求(logo光来回扫动)就行,其他复杂的情况不考虑。  首先是 desc.txt的实现:  102460016  p00part0  很简单,分辨率,播

    2022年5月14日
    44
  • 291312a_tải nhạc

    291312a_tải nhạc一个序列长度是L,每个位置取1的概率是p,取0的概率是1-p

    2025年5月24日
    1
  • git 删除时报 the branch is not fully merged 这是什么意思

    git 删除时报 the branch is not fully merged 这是什么意思

    2021年10月23日
    108
  • 用python打包exe应用程序-PyInstaller

    1、PyInstaller简介PyInstaller是一个跨平台的Python应用打包工具,支持Windows/Linux/MacOS三大主流平台,能够把Python脚本及其所在的…

    2022年4月6日
    33
  • DeepFake技术–DeepFakes 概述(一)(二)

    DeepFake技术–DeepFakes 概述(一)(二)AI换脸技术——DeepFakes概述(一)编者按:本文由图普科技编译自ExploringDeepFakes。2017年12月,一个名为“DeepFakes”的用户在Reddit上发布了一个“假视频”,视频中的艺人其实是后期加上的,但是看起来几乎毫无破绽。他利用了深度学习和AI新技术,在成人电影中把演员的脸替换成某个艺人的脸,从而制作成了这个看上去以假乱真的视频。从视频发布以后…

    2022年5月26日
    61

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号