使用Nginx反向代理tomcat服务器

首先给大家推荐一下我老师大神的人工智能教学网站。教学不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵黄段子!点这里可以跳转到网站

Nginx反向代理tomcat服务器配置

这里将直接介绍配置方法,不会再介绍为什么要使用反向代理。

下面是nginx.conf配置文件,文件在默认安装路径的conf下

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#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;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    include /usr/local/nginx/conf/conf.d/*.conf;
}

下面我们在conf目录同级目录中创建文件夹,保存nginx的其他信息,通过include的方式引入,操作如下

mkdir conf.d
cd conf.d
#新建配置子文件
vim tomcat_server.conf

在配置子文件中加入

#负载均衡配置,这里可以添加多个server,weight为权重,如果添加多个,注意分布式session的处理
upstream backend {
        server localhost:8080 weight=1;
}
server {
    listen 80;
    server_name  cc520.me ;
    location / {
        proxy_pass http://backend;   #来自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服务器传
    }
}

完成以上配置Nginx反向代理也就完成了,下面我们测试一下
进入${user.nginx.path}

#检查配置文件
sbin/nginx -t
F4817D51-F817-4F3E-97F4-44FF54CFF421.png

显示如下结果,表示配置文件正确

执行

#重载配置文件
sbin/nginx -s reload

完成以上操作,表示Nginx反向代理Tomcat服务器配置已经完成,可以在浏览器中访问nginx服务器,测试配置正确性。

Nginx缓存配置

Nginx缓存可以吧静态资源缓存在固定目录中,这样下次访问的时候将不会再请求tomcat服务器,直接由nginx返回,节省tomcat服务器资源,下面介绍如何配置nginx缓存:

  • 配置缓存目录
#创建存放nginx缓存目录
mkdir /data/nginx/cache

下面我们把上面Nginx反向代理中创建的tomcat_server.conf进行一些改变,如下所示

#levels设置目录层次 keys_zone设置缓存名字和共享内存大小 inactive在指定时间内没人访则被删除在这里是1天 max_size最大缓存空间
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=cache_one:10m inactive=1d max_size=1G;

upstream backend {
        server localhost:8080 weight=1;
}

server {
    listen 80;
    server_name  cc520.me ;
    location / {
        proxy_pass http://backend;   #来自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 ~* "\.(jpg|jpeg|png|gif|html|css|js|woff2|woff|map)?$" {
        proxy_pass http://backend;
        proxy_cache cache_one;
        proxy_cache_valid 200 24h; #200状态缓存24小时
        proxy_cache_valid 302 10m; #302状态缓存10分钟
        add_header X-Cache-Status $upstream_cache_status; #在http头部增加一个字段显示是否命中缓存
}

完成以上配置Nginx缓存配置也就完成了,下面我们测试一下
进入${user.nginx.path}

#检查配置文件
sbin/nginx -t
F4817D51-F817-4F3E-97F4-44FF54CFF421.png

显示如下结果,表示配置文件正确

执行

#重载配置文件
sbin/nginx -s reload

我们访问一下nginx服务,然后进入缓存文件夹

cd /data/nginx/cache
ls 
942D4C4B-33DE-4D46-9989-DB62B4775A9C.png

显示如下图,表示缓存配置成功了

动态资源和静态资源分离配置

这一步其实也没有太多需要配置的地方,如果使用的SpringMVC,没有后缀名的情况下,只需要使用入上(Nginx缓存配置)的配置文件即可。
如果是以.jsp|.do结尾,需要配置

location / {

}

改为

location ~ "\.(jsp|do)$" { #当请求的是jsp或do文件时直接到tomcat上去取

}

并不需要增加其他配置信息

查看缓存方式是否配置成功,可以查看tomcat访问日志,访问日志中会展现只获取一次静态文件的状态,表示静态资源和动态资源分配成功,如果静态资源还是每次都请求tomcat,表示配置失败,需要检查配置文件是否编写正确。

Nginx gzip配置

配置gzip可以大幅度提升资源加载速度,配置方法如下

#进入下面第一次创建的子配置文件夹
cd ${user.nginx.path}/conf/conf.h
vim gzip.conf

新建如下配置文件

#gzip压缩功能设置
    gzip on; #开启Gzip
    gzip_min_length 1k; #不压缩临界值,大于1K的才压缩,一般不用改
    gzip_buffers    4 16k; #缓冲
    gzip_http_version 1.0; #用了反向代理的话,末端通信是HTTP/1.0,有需求的应该也不用看我这科普文了;有这句的话注释了就行了,默认是HTTP/1.1
    gzip_comp_level 2; #压缩级别,1-10,数字越大压缩的越好,时间也越长,看心情随便改吧
    gzip_types text/plain application/x-javascript text/css application/xml application/javascript application/x-font-woff image/jpeg image/gif image/png;进行压缩的文件类型,缺啥补啥就行了,JavaScript有两种写法,最好都写上吧,总有人抱怨js文件没有压缩,其实多写一种格式就行了
    gzip_vary on;跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding"
    gzip_disable "MSIE [1-6]\.";#IE6对Gzip不怎么友好,不给它Gzip了

这里的配置参考了Nginx开启Gzip压缩大幅提高页面加载速度,详细的地方可以点击查看。
完成了以上配置,还是执行

sbin/nginx -t
sbin/nginx -s reload
#执行配置是否成功
curl -I -H "Accept-Encoding: gzip, deflate" "http://127.0.0.1/resources/blog/js/bootstrap.min.js"
5755098F-220F-45A1-AC13-3856DDB48393.png

显示如下图红框所示,表示gzip配置成功

通过以上几个配置,就完成Nginx基本配置,也可以大幅度的提升网站访问速度和降低tomcat服务器压力,大家可以亲自试试,看看效果如何。

点这里可以跳转到人工智能网站

发表评论