GO在线工具集
首页
搜索
致Boss
【店小二】公告:

速查Nginx配置
13  |   |   |  0

日志分割配置

  • 在 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 语法

    1. 正则表达式匹配:
    2. ==:等值比较;
    3. ~:与指定正则表达式模式匹配时返回“真”,判断匹配与否时区分字符大小写;
    4. ~*:与指定正则表达式模式匹配时返回“真”,判断匹配与否时不区分字符大小写;
    5. !~:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时区分字符大小写;
    6. !~*:与指定正则表达式模式不匹配时返回“真”,判断匹配与否时不区分字符大小写;
    1. 文件处理
    2. -f, !-f:判断指定的路径是否为存在且为文件;
    3. -d, !-d:判断指定的路径是否为存在且为目录;
    4. -e, !-e:判断指定的路径是否存在,文件或目录均可;
    5. -x, !-x:判断指定路径的文件是否存在且可执行;

防止其他人刷, 并惩罚

# 防止机器人
if ($request_uri ~* \.(php|txt|sh|sql|tar)) {
    rewrite (.*)  http://speedtest.tele2.net/50GB.zip permanent;
    break;
}