【店小二】公告:
新
| | |
日志分割配置
- 在 nginx/openresty 运行过程中,访问日志和错误日志会不断增长,长期运行会导致日志文件过大,影响性能和管理。因此,需要对日志进行 按天分割 或 按大小分割,以便于管理、存储和分析。
- 使用
logrotate
进行日志分割,logrotate
是 Linux 下的日志管理工具,可用于自动分割、压缩和删除旧日志。
步骤 1:创建 logrotate
配置文件
在 /etc/logrotate.d/openresty
中添加以下内容:
# openresty 下的 log
#/usr/local/openresty/nginx/logs/*.log {
# create 0664 # 文件权限
# daily # 按天分割
# rotate 7 # 保留最近 7 天日志
# missingok # 忽略不存在的文件
# notifempty # 如果日志为空,不进行分割
# compress # 使用 gzip 压缩旧日志
# delaycompress # 延迟一天压缩
# postrotate
# /bin/kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid 2>/dev/null` 2>/dev/null || true
# endscript
#}
# # openresty 下的 log, 可直接复制
/usr/local/openresty/nginx/logs/*.log {
create 0664
daily
rotate 7
missingok
notifempty
compress
delaycompress
postrotate
/bin/kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
步骤 2:手动测试 logrotate
logrotate -f /etc/logrotate.d/openresty
location 语法
Location 块通过指定模式来与客户端请求的URI相匹配。 Location基本语法:
匹配 URI 类型,有四种参数可选,当然也可以不带参数。 命名location,用@来标识,类似于定义goto语句块。
location [ = | ~ | ~* | ^~ ] /URI { … }
location @/name/ { … }
参数 | 解释 |
---|---|
空 | location 后没有参数直接跟着 标准 URI,表示前缀匹配,代表跟请求中的 URI 从头开始匹配。 |
= | 用于标准 URI 前,要求请求字符串与其精准匹配,成功则立即处理,nginx停止搜索其他匹配。 |
^~ | 用于标准 URI 前,并要求一旦匹配到就会立即处理,不再去匹配其他的那些个正则 URI,一般用来匹配目录 |
~ | 用于正则 URI 前,表示 URI 包含正则表达式, 区分大小写 |
~* | 用于正则 URI 前, 表示 URI 包含正则表达式, 不区分大小写 |
@ | @ 定义一个命名的 location,@ 定义的locaiton名字一般用在内部定向,例如error_page,try_files命令中。它的功能类似于编程中的goto。 |
匹配顺序
- nginx有两层指令来匹配请求 URI 。第一个层次是
server
指令,它通过域名、ip 和端口来做第一层级匹配,当找到匹配的 server 后就进入此 server 的 location 匹配。 - location 的匹配并不完全按照其在配置文件中出现的顺序来匹配,请求URI 会按如下规则进行匹配
- 以上规则简单总结就是优先级从高到低依次为(序号越小优先级越高)
1. location = # 精准匹配
2. location ^~ # 带参前缀匹配
3. location ~ # 正则匹配(区分大小写)
4. location ~* # 正则匹配(不区分大小写)
5. location /a # 普通前缀匹配,优先级低于带参数前缀匹配。
6. location / # 任何没有匹配成功的,都会匹配这里处理
- 说明:
1-4
匹配到了就停止匹配,5
会匹配最长的
解决跨域问题配置
location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
proxy_pass http://192.168.12.1:8081;
}
if 语法
- 正则表达式匹配:
- ==:等值比较;
- ~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写;
- ~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字符大小写;
- !~:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分字符大小写;
- !~*:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分字符大小写;
- 文件处理
- -f, !-f:判断指定的路径是否为存在且为文件;
- -d, !-d:判断指定的路径是否为存在且为目录;
- -e, !-e:判断指定的路径是否存在,文件或目录均可;
- -x, !-x:判断指定路径的文件是否存在且可执行;
防止其他人刷, 并惩罚
# 防止机器人
if ($request_uri ~* \.(php|txt|sh|sql|tar)) {
rewrite (.*) http://speedtest.tele2.net/50GB.zip permanent;
break;
}