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;
}