目录
2.Nginx+Tomcat 构筑Web服务器集群的负载均衡
1.代理
代理服务分为反向代理和正向代理
正向代理:用于代理内部网络对 Internet 的连接请求,客户端指定代理服务器,将要给web服务器发送的请求先发送到代理服务器,由代理服务器访问web服务器,web服务器将会应返回给代理,代理将回应返回给客户端。
反向代理:与正向代理相反,代理服务器来接受客户端的连接请求,然后将请求转发给网络上的web服务器
1)反向代理:web服务器调度器
反向代理(Reverse Proxy)方式是指以代理服务器来接受客户端的连接请求,然后将请求转发给网络上的web服务器(可能是apache、nginx、tomcat、iis等)
也可理解为客户端给web服务器提供了一个同一的访问入口,通过反向代理服务把用户的请求发给不同的web服务器
2)反向代理的作用
1.保护网站安全:来自互联网的任何请求都必须经过代理服务器
2.缓存web服务器上的某些静态资源,减轻web服务器的负载压力,当代理服务器没有缓存会到web服务器上拉取数据(穿透缓存)在响应客户端,如代理有缓存则直接响应给客户端(缓存命中)。
3.实现负载均衡:充当负载均衡算法均衡的分发请求到各个集群中的web服务器
2.Nginx+Tomcat 构筑Web服务器集群的负载均衡
1.nginx 核心特点
Nginx是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器
1)跨平台:Nginx 可以在大多数OS编译运行,也有Windows的版本
1)配置简单,易上手
3)非阻塞、高并发连接:依靠于epoll模型,请求的基本过程:建立连接—>接收数据—>发送数据
在系统的底层来说就是读写事件,访问就是读,向web提交数据就是写
非阻塞调用的方式: 如事件没处理完成,进程不会挂起,可以处理其他请求,进程会定时的检查事件处理是否就绪,提高了并发处理,非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程
4)事件驱动:通信机制采用epoll模型事件处理机制,支持更大的并发连接。它是异步非阻塞处理机制。
以epoll模型为例:当事件没有准备好时,就放入epoll(队列)里,当事件就绪就去处理该事件,没就绪的事件则在epoll里面等待。这里的并发请求,是指未处理完的请求。线程只有一个,所以同时能处理的请求只有一个,优势也在于无需创建线程。
通过异步阻塞的事件处理机制,nginx实现由进程循环处理多个准备好的事件,实现高并发和轻量级
5)Master/Worker结构:一个master进程,生成一个或多个worker(工作进程)。
当一个工作进程挂掉,主进程会创建一个工作进程,不会影响所有的请求,降低了风险
6)内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)
7)内置健康检查功能:当某台web服务器宕机了, 不会影响客户端访问,代理就不会给宕机的web服务器发送请求
8)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存
9)稳定性高:用于反向代理,宕机的概率微乎其微
2.Nginx的upstream负载的5中策略
nginx 一般用来做反向代理和负载均衡,将客户端请求发送到后端的tomcat,并将tomcat的响应发送给客户端,用于upstream定义web池里的服务器,实现负载均衡
1.轮询(默认)
轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如某台服务器宕机,故障系统被自动剔除也称(RR算法),使用户访问不受影响。
Weight指定轮询权值 ,Weight值越大,分配到的访问机率越高。也称(WRR)加权轮询,当每个web服务器性能不均的情况下使用,不设置加权轮询默认轮询都是1
2.IP_hash
ip_hash :每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,解决了动态网页存在的session共享问题,如果这个节点不可用了,会发到下个节点,而此时没有session同步的话就注销掉了
3.least_conn
least_conn :请求被发送到当前活跃连接最少的real server上。会考虑weight的值
4.url_hash
url_hash :此方法按访问url的hash结果来分配请求,把一个用户相同访问的请求,分配给一个服务器,可以进一步提高后端缓存服务器的效率
5. fair(第三方)
fair :更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡
根据后端服务器的响应时间来分配请求,响应时间快的优先分配
fair算法是第三方负载均衡策略,nginx本身不支持,须下载Nginx的upstream_fair模块。
3.Nginx部署
当已经有了一台安装nginx服务器,但是缺少某些模块怎么解决:
1.重新安装
2.把要安装的模块编译到nginx中,但不需要执行mkake install,把编译生成的nginx程序替换之前的nginx程序
1)添加模块
nginx的所有模块必须在编译的时候添加,不能再运行的时候动态加载
如果你想在已安装好的nginx上添加第三方模块,依然需要重新编译,但为了不覆盖你原有的配置,请不要make install,而是直接拷贝可执行文件‘
注:
结合proxy和upstream模块实现后端web负载均衡
使用proxy模块实现静态文件缓存
结合nginx默认自带的ngx_http_proxy_module模块 和ngx_http_upstream_module模块实现后端服务器的健康检查,也可以使用第三方模块nginx_upstream_check_module
nginx-sticky-module扩展模块实现会话黏贴(保持会话)
ngx_cache_purge 实现更强大的缓存清除功能
后两个都属于是第三方模块,需提前下好源码,编译时通过--add-moudle=src_path一起安装。
2) 上传 模块并解压
tar zxvf ngx_cache_purge-2.3.tar.gz -C /usr/local/src/
tar zxvf master.tar.gz -C /usr/local/src/
cd /usr/local/src/nginx-1.10.3/
3)编译安装nginx
即使在安装好的nginx编译模块,只是无需make install操作,其他都需操作
删除解压过的nginx源码包,重新解压
rm -rf nginx-1.10.3
tar zxf nginx-1.10.3.tar.gz -C /usr/local/src
cd /usr/local/src/
cd nginx-1.10.3/
查看nginx模块
nginx -V
在此基础上添加新的模块 :
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_realip_module --with-http_ssl_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_flv_module --add-module=../ngx_cache_purge-2.3 --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make编译
[root@web nginx-1.10.3]# make
在objs下编译生成的nginx程序
覆盖原来的nginx程序
注意:停掉nginx服务区
cp objs/nginx /usr/local/nginx/sbin/nginx
启动nginx
没有代理代理缓存的路径,我们创建一个
mkdir -p /var/tmp/nginx/client
在启动nginx查看模块:
部署tomcat
安装jdk
卸载openjdk,安装之前需要查看下系统是否安装了openjdk,如果安装了openjdk,请先卸载,否则安装不了oracle官方的jdk
yum remove java-* -y
上传软件包
解压jdk
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
配置jdk环境变量
vim /etc/profile
JAVA_HOME=/usr/local/jdk1.8.0_171
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH
source /etc/profile #使环境变量生效
查看java环境
java -version
安装tomcat
解压软件包
tar zxvf apache-tomcat-8.5.42.tar.gz -C /usr/local/
重命名目录
cd /usr/local/
mv apache-tomcat-8.5.42/ tomcat
tomcat启动脚本
vim /etc/init.d/tomcat
#!/bin/bash
# Tomcat init script for Linux
# chkconfig: 2345 96 14
# discription: The Apache Tomcat Server/JSP container
JAVA_HOME=/usr/local/jdk1.8.0_171/
CATALINA_HOME=/usr/local/tomcat
start_tomcat=$CATALINA_HOME/bin/startup.sh #tomcat启动文件
stop_tomcat=$CATALINA_HOME/bin/shutdown.sh #tomcat关闭文件
start() {
echo -n "Starting tomcat: "
${start_tomcat}
echo "tomcat start ok."
}
stop() {
echo -n "Shutting down tomcat: "
${stop_tomcat}
echo "tomcat stop ok."
}
# See how we were called
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 10
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
esac
exit 0
启动脚本添加执行权限
chmod +x /etc/init.d/tomcat
建立系统服务文件
vim /lib/systemd/system/tomcat.service
[Unit]
Description=tomcat
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/local/jdk1.8.0_171/
Environment=CATALINA_HOME=/usr/local/tomcat
ExecStart=/etc/init.d/tomcat start
ExecStop=/etc/init.d/tomcat stop
ExecRestart=/etc/init.d/tomcat restart
PrivateTmp=true
[Install]
WantedBy=multi-user.target
启动tomcat
systemctl start tomcat
添加开机自启
systemctl enable tomcat
查看端口和进程
ps -ef | grep tomcat
netstat -anptl | grep 8080
安装mysql-connector
tar -zxvf mysql-connector-java-5.1.47.tar.gz -C /usr/local/src/
cd /usr/local/src/mysql-connector-java-5.1.47/
cp mysql-connector-java-5.1.47-bin.jar /usr/local/tomcat/lib/
systemctl restart tomcat
创建测试页面
echo "tomcat sever2" > /usr/local/tomcat/webapps/ROOT/index.jsp
测试;
配置tomcat第二个参考上面配置
配置ngix负载均衡
配置nginx反向代理:反向代理+负载均衡+健康检测
查看nginx加载模块
nginx -V
nginx version: nginx/1.10.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_realip_module --with-http_ssl_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_flv_module --add-module=../ngx_cache_purge-2.3 --add-module=../nginx-goodies-nginx-sticky-module-ng-08a395c66e42
nginx -sticky-module模块
把来自同一个客户端(浏览器)的请求发送到同一个web服务器上处理请求。不能与ip_hash同时使用
格式;
upstream backend { #定义后端web服务器的名字
server 192.168.1.12:8080 weight=1; #指向 tomcat的IP地址和端口,weight 权重不写默认是1
server 192.168.1.13:8080 weight=1;
sticky; #sticky算法
}
负载均衡与健康检查
nginx自带是没有针对负载均衡后端节点的健康检查,可以通过默认自带的ngx_http_proxy_module模块和ngx_http_upstream_module模块中的相关指令来完成当后端节点出现故障时,自动切换到下一个节点来提供访问
weight:轮询权重,可以用在ip_hash,默认值为1
max_fails=1, 健康检查失败的最大次数
fail_timeout=10s ,设置超时时间,在单位周期为fail_timeout设置的时间,中达到max_fails次数判断节点不可用
proxy_pass http://backend 把代理服务器收到的请求转发给backend 后端池
不加sticky 默认用轮询算法
upstream backend {
server 192.168.30.60:8080 weight=2 max_fails=1 fail_timeout=10s;
server 192.168.30.10:8080 weight=2 max_fails=1 fail_timeout=10s;
}
server {
listen 80;
server_name www.abc.com abc.com;
location / {
proxy_pass http://backend;
}
测试:
第一个访问请求:
第二个访问请求:
为了实验效果两天tomcat显示内容不同
加入sticky同一个客户端的请求只发送到同一个web服务器上
健康检测
模拟服务器当掉
访问代理服务器
在刷新就变成server2了,因为健康检测,检测到server1宕机了, max_fails=1 fail_timeout=10s
在10秒内检测到server1不可用1次,把server1从web池下线了,重启 tomcat 则恢复轮询
nginx的proxy缓存使用
缓存也就是将js、css、image等静态文件从后端服务器缓存到nginx指定的缓存目录下,减轻后端和服务端负担,加快访问速度,需要ngx_cache_purge这个模块来在过期时间未到之前,手动清理缓存。
proxy模块中常用指令时 proxy_pass 和 proxy_cache
nginx的web缓存功能的主要是由proxy_cache、fastcgi_cache指令集和相关指令集完成
proxy_cache 开启反向代理缓存后端服务器的静态内容
fastcgi_cache 开启nginx php动态页面的缓存
$upstream_cache_status 在nginx配置文件访问日志里 记录缓存命中率,出于性能角度讲不开启,高并发会影响 I/O性能
$upstream_cache_status包含以下几种状态:
MISS 未命中,请求被传送到后端
HIT 缓存命中
EXPIRED 缓存已经过期请求被传送到后端
UPDATING 正在更新缓存,将使用旧的应答
STALE 后端将得到过期的应答
access_log logs/access.log main; 指定的一个临时路径
proxy_buffering on; #代理的时候,开启或关闭缓冲后端服务器的响应
proxy_temp_path /usr/local/nginx/proxy_temp; 存放缓存的路径
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m inactive=600m max_size=2g; 存放缓存的路径,levels=1:2 缓存目录下1级子目录和2级子目录 缓存的key名,100m内存大小,在600分钟没有被访问过删除该缓存
#ngx_cache_purge 手动清理缓存,实现缓存清除
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.30.0/24; 匹配30网段的主机,可以执行清理缓存,可以指定IP
deny all; 除指定的 IP 外拒绝所有网段的主机执行proxy_cache_purge my-cache $host$1$is_args$args; 清理缓存区的数据,引用前面定义的缓存区my-cache
proxy_pass http://backend;
proxy_redirect off; 指定是否替换被代理服务器返回的响应头中的location头跟refresh头的信息例如:
假设后端服务器返回的响应头是 “Location: http://localhost:8000/two/some/uri/”,那么指令proxy_redirect http://localhost:8000/two/ http://frontend/one/;将把字符串改写为 “Location: http://frontend/one/some/uri/”
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 让后端获取到客户端真实IP
proxy_ignore_headers Set-Cookie; 让代理服务器的缓存功能缓存带有set-cookie头的信息
proxy_hide_header Set-Cookie;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_cache my-cache;
add_header Nginx-Cache $upstream_cache_status;
proxy_cache_valid 200 304 301 302 8h; 为不同的响应状态码设置不同的缓存时间
proxy_cache_valid 404 1m;
proxy_cache_valid any 1d;
proxy_cache_key $host$uri$is_args$args;
expires 30d; 缓存过期时间proxy_cache_key:定义如何生成缓存的键,设置web缓存的key值,nginx根据key值md5哈希存储缓
修改nginx配置文件:
vim /usr/local/nginx/conf/nginx.conf
user www www;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
error_log logs/error.log;
worker_rlimit_nofile 10240;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 65535;
}
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"'
'"$upstream_cache_status"';
access_log logs/access.log main;
server_tokens off;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_proxied any;
gzip_min_length 1k;
gzip_buffers 16 8k;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_read_timeout 75;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_buffering on;
proxy_temp_path /usr/local/nginx/proxy_temp;
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m max_size=1000m inactive=600m max_size=2g;
upstream backend {
sticky;
server 192.168.30.60:8080 weight=1 max_fails=2 fail_timeout=10s;
server 192.168.30.10:8080 weight=1 max_fails=2 fail_timeout=10s;
}
server {
listen 80;
server_name localhost;
charset utf-8;
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.30.0/24;
deny all;
proxy_cache_purge my-cache $host$1$is_args$args;
}
location / {
index index.jsp index.php index.html index.htm;
proxy_pass http://backend;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_ignore_headers Set-Cookie;
proxy_hide_header Set-Cookie;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
location ~ .*\.(gif|jpg|png|html|htm|css|js|ico|swf|pdf)(.*) {
proxy_pass http://backend;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_cache my-cache;
add_header Nginx-Cache $upstream_cache_status;
proxy_cache_valid 200 304 301 302 8h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1d;
proxy_cache_key $host$uri$is_args$args;
expires 30d;
}
}
}
重载nginx服务
nginx -s reload
测试:
测试缓存功能
在后端tomcat服务器上创建可以缓存的类型文件(如html或jpg类型文件)
[root@tomcat ~]# echo "server1 html" > /usr/local/tomcat/webapps/ROOT/index.html
[root@tomcat2 ~]# echo "server2 html" > /usr/local/tomcat/webapps/ROOT/index.html
缓存已命中
查看代理服务器的启动日志:
cat /usr/local/nginx/logs/access.log
删除缓存:
proxy_cache_purge指令用于方便的清除缓存,但必须安装第三方的ngx_cache_purge模块才能使用
浏览器访问代理服务器清除缓存:
缓存清除成功
purge是ngx_cache_pure模块指令
后端服务器获取客户真实IP
让后端web服务器(tomcat/nginx)日志获取客户端真实的IP,而不是nginx代理服务器的IP
nginx代理服务器的配置
修改nginx的配置文件,在server或location中添加
proxy_set_header X-Forwarded-For $remote_addr;
tomcat作为后端服务器的配置
如果tomcat作为后端web,在tomcat日志中记录客户端的真实ip,修改以下如下:
修改server.xml文件把 pattern 里的参数修改为:
pattern="%{X-FORWARDED-FOR}i %a %l %u %t %r %s %b %D %q %{User-Agent}i" resolveHosts="false"
没有Nginx这一层的时候直接用%a就可以获得客户端IP,现在我们得用%{ X-FORWARDED-FOR }i 来获得真实的IP
重启tomcat查看访问日志
显示客户端的真实IP
pattern配置段,用于指定日志的输出格式。日志参数如下:
%a - 远程IP地址
%A - 本地IP地址
%b - 发送的字节数,不包括HTTP头,或“ - ”如果没有发送字节
%B - 发送的字节数,不包括HTTP头
%h - 远程主机名
%H - 请求协议
%l (小写的L)- 远程逻辑从identd的用户名(总是返回' - ')
%m - 请求方法
%p - 本地端口
%q - 查询字符串(在前面加上一个“?”如果它存在,否则是一个空字符串
%r - 第一行的要求
%s - 响应的HTTP状态代码
%S - 用户会话ID
%t - 日期和时间,在通用日志格式
%u - 远程用户身份验证
%U - 请求的URL路径
%v - 本地服务器名
%D - 处理请求的时间(以毫秒为单位)
%T - 处理请求的时间(以秒为单位)
%I (大写的i) - 当前请求的线程名称
补充说明
负载配置说明
定义负载均衡设备 的IP及状态
upstream tomcat {
server 192.168.1.11:9090 down;
server 192.168.1.12:8080 weight=2;
server 192.168.1.14:7070 backup;
}
ngiinx怎么把请求把转发给后端服务器
proxy_pass http://tomcat;
upstream每个设备状态
down: 表示当前的 server 暂时不参与负载
weight:默认为 1,weight 越大,负载的权重就越大
max_fails:允许请求失败的次数默认为 1,当超过最大次数proxy_next_upstream 模块定义的错误
fail_timeout:max_fails:请求失败。暂停的时间
使用nginx实现静动分离
Nginx的静态处理能力很强,但是动态处理能力不足,tomcat动态处理能力强,但静态处理不足,因此使用静动分离,动静分离技术其实是采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对php、jsp的动静分离。
我们使用三台服务器,tomcat,nginx ,nginx代理服务器
可使用rpm包和源码包安装
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
user www www;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
error_log logs/error.log;
worker_rlimit_nofile 10240;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 65535;
}
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"'
'"$upstream_cache_status"';
access_log logs/access.log main;
server_tokens off;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_comp_level 6;
gzip_http_version 1.1;
gzip_proxied any;
gzip_min_length 1k;
gzip_buffers 16 8k;
gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_buffering off;
proxy_temp_path /usr/local/nginx/proxy_temp;
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=my-cache:100m max_size=1000m inactive=600m max_size=2g;
#配置负载均衡
upstream tomcat_dynamic_pools { # tomcat动态服务器集群
server 192.168.30.60:8080 weight=1 max_fails=2 fail_timeout=10s;
}
upstream static_pools { #静态服务器集群
server 192.168.30.11 weight=1 max_fails=2 fail_timeout=10s;
}
#配置nginx动静分离
server {
listen 80;
server_name www.abc.com; #访问域名需设置host映射
charset utf-8;
location ~ .*\.jsp$ {
proxy_pass http://tomcat_dynamic_pools;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_ignore_headers Set-Cookie;
proxy_hide_header Set-Cookie;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
location / {
proxy_pass http://static_pools;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_cache my-cache;
add_header Nginx-Cache $upstream_cache_status;
proxy_cache_valid 200 304 301 302 8h;
proxy_cache_valid 404 1m;
proxy_cache_valid any 1d;
#proxy_cache_key $host$uri$is_args$args;
expires 30d;
}
}
}
重载nginx:
nginx -s reload
测试:
监控访问日志:
tail -0f /usr/local/tomcat/logs/localhost_access_log.2022-06-07.txt
访问 jsp
tail -0f /var/log/nginx/access.log
访问静态资源 html