健康检查

健康检测略 网上资料很多


常用模块说明

buffer模块说明

buffer优化模块 网络吞吐量的优化说明
client_body_buffer_size 请求主体的缓冲区大小,默认32位8K,64位16K
client_body_max_size 请求主体的大小,常用作上传upload上传文件大小限制,若超出则报403
client_header_buffer_size 请求头部的缓冲区大小
large_client_header_buffers 最大请求头部的缓冲区最大数量和大小
client_body_tmpe_path 请求正文的临时文件位置
client_body_in_file_only 请求主体仅缓存到文件中,这样第一个模块就不可用了
client_body_in_single_buffer 将请求主体完整缓存在单个缓冲区内


proxy模块说明

http proxy 模 块 相 关 参 数 说明
proxy_set_header 设置http请求header项传给后端服务器节点,如:可实现让代理后端的服务器节点获取访问客户端用户的真实IP地址
proxy_connect_timeout 表示反向代理与后端节点服务器连接的超时时间,即发起握手等候响应的超时时间
proxy_send_timeout 表示代理后端服务器的数据回传时间,即在规定时间内后端服务器必须传完所有数据,否则nginx将断开连接
proxy_read_timeout 设置nginx从代理的后端服务器获取信息的时间,表示建立连接成功后,nginx等待后端服务器响应时间,此时nginx已经进入后端的排队等候处理之中
proxy_buffer_size 设置缓冲区大小,默认该缓冲区大小等于指令proxy_buffers设置大小
proxy_buffers 设置缓冲区的数量和大小。nginx从大量的后端服务器获取的响应信息,会放置到缓冲区。
proxy_buzy_buffers_size 设置系统繁忙时可用proxy_buffers大小,推荐2倍buffers
proxy_temp_file_write_size 指定proxy缓冲临时文件大小
proxy_set_header 即允许重新定义或添加字段传递给代理服务器的请求头。该值可以包含文本、变量和它们的组合。


proxy_set_header

一个不会变化的“Host”头请求字段可通过如下方式被传递:
proxy_set_header Host $http_host;

当字段不在请求头中就无法传递了,在这种情况下,可通过设置Host变量,将需传递值赋给Host变量
proxy_set_header Host $host;

此外,服务器名称和端口一起通过代理服务器传递
proxy_set_header Host $host:$proxy_port;

如果请求头的存在空的字段将不会通过代理服务器传递出去
proxy_set_header Accept-Encoding “”;

简而言之,proxy_set_header 就是可设置请求头-并将头信息传递到服务器端,不属于请求头的参数中也需要传递时,重定义下即可!


proxy_set_header中$proxy_host,$host,$http_host的区别
在使用Nginx做反向代理的时候,proxy_set_header功能可以设置反向代理后的http header中的host//$http_host//$proxy_host,那么这几个有什么区别呢?

Nginx的官网文档中说下面这两条是做反代时默认的,所以$proxy_host 自然是 proxy_pass后面跟着的host了
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;

如果客户端发过来的请求的header中有’HOST’这个字段时,
$http_host和$host都是原始的’HOST’字段

比如请求的时候HOST的值是www.csdn.net 那么反代后还是www.csdn.net

如果客户端发过来的请求的header中没有有’HOST’这个字段时,
建议使用$host,这表示请求中的server name。

所以个人感觉$host更适用多场景下的

更多proxy_set_header信息查看地址:https://cloud.tencent.com/developer/article/1027567


缓存配置指南

插曲,添加proxy_cache_purge模块的时候,十分繁琐,研究了一天,其实只要按照https://www.cnblogs.com/Eivll0m/p/4921829.html这么做就行,但是注意了,不要为了省事吧重新编译后的nginx目录删掉或者用原有的进行覆盖,因为编译后的目录底下有编译的东西,如果想省事,只需要吧nginx.conf和html目录给覆盖就行了


开启简单的缓存配置,只需要两个指令:proxy_cache_path和proxy_cache。
proxy_cache_path 配置缓存的存放地址和其他的一些常用配置
proxy_cache 指令是为了启动缓存
proxy_cache_purge 配置是清理缓存用的
参考地址:
https://www.cnblogs.com/biglittleant/p/8979895.html 有测试的
https://blog.whsir.com/post-3173.html 具体配置解释的
https://blog.csdn.net/qq756684177/article/details/81518853 CSDN的地址
https://github.com/Tinywan/Lua-Nginx-Redis/blob/master/Nginx/Nginx-Web/Nginx-8-proxy_cache.md GitHub地址


配置参数说明
proxy_cache_path:定义缓存存储位置
levels=1:2:设置缓存目录深度,最多能创建3层
keys_zone=my_cache:10m:定义缓存区域名称和内存缓存空间大小
max_size=10g:磁盘缓存空间最大使用值,达到配额后删除最少使用的缓存文件
inactive=60m:设置缓存时间,60分钟内没有被访问过就删除
use_temp_path=off:不使用temp_path指定的临时存储路径,直接将缓存文件写入指定的cache文件中,建议off

proxy_cache my_cache:缓存区域名称,要和keys_zone定义的名称一致
proxy_cache_valid 200 302 304 60m:设置状态码为200 302 304过期时间为60分钟
proxy_cache_key $host$uri$is_args$args:设置缓存的key,这里是以域名、URI、参数组成web缓存的key值,根据key值哈希存储缓存内容到二级缓存目录内
expires 3d:缓存时间3天

location ~ /purge(/.) :用于手动清除缓存,allow表示只允许指定的IP才可以清除URL缓存
location ~ .
.(jsp|php)?$:扩展名以jsp或php结尾的不做缓存


proxy_cache_path /path/to/cache levels=1:2 keys_zone=mycache:10m max_size=10g inactive=60m use_temp_path=off;
server {
# …
location / {
proxy_cache mycache;
proxy_pass http://my_upstream;
或者是
location / {
#这部分是配置缓存的设置
proxy_cache mycache; #定义缓存区域,与上zone要相同
proxy_cache_valid 200 302 304 60m; #针对不同状态码的缓存时间
proxy_cache_valid 404 500 1m;
proxy_cache_key $host$uri$is_args$args; #WEB缓存的Key值域名、URI、参数组成
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
add_header Nginx-Cache “$upstream_cache_status”; #显示缓存的状态
proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie; #可以禁用一个或多个响应头字段的处理 [Nginx不缓存,可以添加语句]
proxy_pass http://127.0.0.1:8080;
expires 3d;
}
location ~ /purge(/.) {
#这部分是做清理的设置
allow 127.0.0.1;
allow 192.168.50.0/24;
deny all;
proxy_cache_purge *mycache
$host$1$is_args$args;
access_log logs/cache.log cache; # 增加清理输出日志
}
或者是
location /tmp-test/ {
allow 127.0.0.1; //只允许本机访问
deny all; //禁止其他所有ip
proxy_cache_purge tmp-test $uri; //清理缓存
}
}


日志部分需添加日志记录的缓存命中率字段
‘“$upstream_cache_status”‘

命中率统计方法:用HIT的数量除以日志总量得出缓存命中率
awk ‘{if($NF==””HIT””) hit++} END {printf “%.2f%”,hit/NR}’ access.log


后端日志信息中添加$upstream_cache_status表示资源缓存的状态

可以用rm-rf删缓存目录或proxy_cache_purge + $key_zone +$proxy_cache_key配置手动清理缓存


upstream_cache_status包含以下几种状态:
MISS 未命中,请求被传送到后端
HIT 缓存命中
EXPIRED 缓存已经过期请求被传送到后端
UPDATING 正在更新缓存,将使用旧的应答
STALE 后端将得到过期的应答
BYPASS 缓存被绕过了


inactive和expires的区别
inactive:未被访问文件在缓存中保留时间,本配置中如果60分钟未被访问则不论状态是否为expired,缓存控制程序会删掉文件。inactive默认是10分钟。需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件
expires:只是设置在其下的缓存周期,过期时间
例如:在过期时间为3d内,如果有60m没有被访问过一次,那天就会被删除,否则会一直存在,直到3d后状态过期,需要重新呗缓存一下


相关配置说明如下:
/path/to/cache 本地路径,用来设置Nginx缓存资源的存放地址
levels 默认所有缓存文件都放在同一个/path/to/cache下,但是会影响缓存的性能,因此通常会在/path/to/cache下面建立子目录用来分别存放不同的文件。假设levels=1:2,Nginx为将要缓存的资源生成的key为f4cd0fbc769e94925ec5540b6a4136d0,那么key的最后一位0,以及倒数第2-3位6d作为两级的子目录,也就是该资源最终会被缓存到/path/to/cache/0/6d目录中
key_zone 在共享内存中设置一块存储区域来存放缓存的key和metadata(类似使用次数),这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key
max_size 最大cache空间,如果不指定,会使用掉所有disk space,当达到配额后,会删除最少使用的cache文件
inactive 未被访问文件在缓存中保留时间,本配置中如果60分钟未被访问则不论状态是否为expired 缓存控制程序会删掉文件。inactive默认是10分钟。需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除inactive是删除指定时间内未被访问的缓存文件
use_temp_path 如果为off,则nginx会将缓存文件直接写入指定的cache文件中,而不是使用temp_path存储,official建议为off,避免文件在不同文件系统中不必要的拷贝
proxy_cache 启用proxy cache,并指定key_zone。另外,如果proxy_cache off表示关闭掉缓存。

针对缓存部分,这里做一些参数的解释
proxy_cache_path: 定义缓存存储位置
levels=1:2: 设置缓存目录深度,最多能创建3层。
keys_zone=my_cache:10m:定义缓存区域名称和内存缓存空间大小。
max_size=10g: 磁盘缓存空间最大使用值,达到配额后删除最少使用的缓存文件。
inactive=60m: 设置缓存时间,60分钟内没有被访问过就删除。
use_temp_path=off: 不使用temp_path指定的临时存储路径,直接将缓存文件写入指定的cache文件中,建议off。
proxy_cache my_cache: 缓存区域名称,要和keys_zone定义的名称一致
proxy_cache_valid 200 302 304 60m:设置状态码为200 302 304过期时间为60分钟
proxy_cache_key $host$uri$is_args$args:设置缓存的key,这里是以域名、URI、参数组成web缓存的key值,根据key值哈希存储缓存内容到二级缓存目录内
expires 3d: 缓存时间3天

location ~ /purge(/.) : 用于手动清除缓存,allow表示只允许指定的IP才可以清除URL缓存
location ~ .
.(jsp|php)?$: 扩展名以jsp或php结尾的不做缓存

访问html的时候,不走缓存。
第一次访问图片的时候,cache是miss的状态。
第二次访问图片的时候,cache是hit的状态

有proxy_cache就有fastcgi_cache
proxy_cache是缓存后端服务器的静态内容
fastcgi_cache是缓存动态内容

其他proxy_cache相关指令地址:
https://www.cnblogs.com/bdhk/p/9198499.html
https://www.cnblogs.com/lovelinux199075/p/9064431.html