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
显示如下结果,表示配置文件正确
执行
#重载配置文件
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
显示如下结果,表示配置文件正确
执行
#重载配置文件
sbin/nginx -s reload
我们访问一下nginx服务,然后进入缓存文件夹
cd /data/nginx/cache
ls
显示如下图,表示缓存配置成功了
动态资源和静态资源分离配置
这一步其实也没有太多需要配置的地方,如果使用的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"
显示如下图红框所示,表示gzip配置成功
通过以上几个配置,就完成Nginx基本配置,也可以大幅度的提升网站访问速度和降低tomcat服务器压力,大家可以亲自试试,看看效果如何。