跳转至

nginx中的accessLog

针对nginx中的accessLog日志文件,里面可以提供一些很多有价值的信息,比如请求的客户端的IP,请求的接口,接口响应耗时等

针对日志文件中的内容进行提取可以使用awk命令

有了一个思路:根据accesslog中的请求情况搭建一个简易版的性能监控平台(期间会较多的用到awk命令),后续可继续接入后端服务性能检测,比如接口响应时间,sql执行时间,服务器内存、磁盘使用情况等

nginx中通过upstream配置负载均衡策略

其中lbs指代的是对应的服务

upstream backend_servers {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}
location / {
            proxy_pass http://backend_servers; // 配置请求走backend_servers转发策略

            # 设置转发头信息--存放用户的真实ip
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
}

常见的负载均衡策略:

节点轮询(默认)

  • 每个请求按顺序分配到不同的后端服务器
  • 会造成可靠性低和负载分配不均衡,适合静态服务器

weight权重配置

  • weight和访问比例成正比,数字越大,分配得到的流量越高
  • 服务器性能差异大的时候使用
upstream backend_servers {
    server 127.0.0.1:8080 weight=5;
    server 127.0.0.1:8081 weight=10;
}

inhash(固定分发)

  • 根据请求的按访问的ip的hash结果分配,这样每个用户可以固定的访问一个后端服务器
  • 场景:业务分区,业务缓存,session需要单点的情况
upstream backend_servers {
    inhash
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
}

nginx进行后端服务探活

upstream backend_servers {
    server 127.0.0.1:8080 max_fails=2 fails_timeout=60s; //最大尝试次数2,最长尝试持续时间60s
    server 127.0.0.1:8081 max_fails=2 fails_timeout=60s;
}

nginx进行全局异常信息处理

location / {
    proxy_pass http://backend_servers; // 配置请求走backend_servers转发策略

    # 设置转发头信息--存放用户的真实ip
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    // 开启错误拦截配置
   proxy_intercept_errors on;
}
// 将错误的状态码全部转为200并且转到default_api路径下
error_page 404 500 502 503 504 =200 /default_api;
location = /default_api {
    default_type application/json;
    return 200 '{"code":"-1","msg":"wrong"}'
} 

nginx中进行IP封禁

放在http模块下就是全局进行封禁,放在server模块下就是针对端口进行封禁

可通过创建.conf配置文件将需要封禁的IP写在里面,在nginx.conf文件中引入即可,blackList.conf需与nginx.conf在同一文件夹下

touch blackList.conf;

// blackList.conf文件中的内容
deny 127.0.0.2;
deny 127.0.0.3;


// nginx.conf
http{
    include blackList.conf;
}

server {
    include blackList.conf;
}

自动化封禁IP思路

  • 编写shell脚本
  • AWK统计access.log,记录每秒访问超过60次的IP,然后配合nginx或者iptables进行封禁
  • crontab定时跑脚本

nginx中的location匹配规则(常用)

  • location = /url:精确匹配,只有完全匹配上才能生效 优先级最高
  • location /url:不带任何修饰符表示前缀匹配
  • location ^~/url/:匹配任何以/url/开头的任何查询并且停止搜索
  • location /:通用匹配,任何未匹配到其他location的请求都会匹配到
  • 正则匹配

nginx中的rewrite指令-重定向

    location / {
        rewrite ^/(.*) https:/xdclass.net/$1 permanent; // 重定向到其他网站
            root   html;
            index  index.html index.htm;
        }