1、nginx使用哪些指令进行负载均衡(upstream七层,stream四层)
upstream aaa{
server 127.0.0.1
server 127.0.0.2
}
stream {
upstream redis{
server 127.0.0.1:6381 max_fails=2 fail_timeout=10s;
server 127.0.0.1:6382 max_fails=2 fail_timeout=10s;
}
server{
listen 6379;
proxy_timeout 3s;
proxy_pass redis;
}
}
2、负载均衡策略
轮询:
upstream back{
server 127.0.0.1
server 127.0.0.2
}
权重:
upstream back{
server 127.0.0.1 weight=5;
server 127.0.0.1 weight=10;
}
ip_hash:
upstream back{
ip_hash;
server 127.0.0.1:88;
server 127.0.0.2:80;
}
fair:后端相应时间长短来分配
url_hash:url哈希,每个url定向到同一个后端,后端有缓存效率高
3、root和alias的区别
location /aaa/{
root /home/www/;
}
访问aaa/匹配对应的是/home/www/aaa/
location /bbb/{
alias /home/www/;
}
访问bbb/匹配对应是路径是/home/www/,结尾必须加斜杠
4、日志中检查前10的ip
cat access.log|awk '{print $1}'|sort|uniq -c|sort -klnr|head -n 10
5、如何保证高并发
异步非阻塞 epoll 一个master 管理、监控多个worker进程
每个请求进入之后,会有一个worker处理,处理到有阻塞的时候(发送请求到后端等待回应),注册标记时间,待可解除阻塞(后端相应)的时候,标记激活继续处理。
6、nginx 为何不用多线程
单线程 采用异步非阻塞处理请求,不必为每个请求创建一个线程,节约资源cpu内存开支,减少cpu的上下文切换。
7、常见优化配置
worker_process 工作进程,一般和cpu核心数对应
worker_connections 最大客户端数,工作进程数*1024,1024为每个核心允许的最大进程数
gzip压缩 gzip on 开启之后减少客户端传输带宽,提高页面加载速度
事件指定模型
events{
use epoll;
worker_connections 51200;
multi_accept on;
}
静态文件缓存
location ~* .(jpg|jpeg|css|js)${
expires 7d;
}
keepalive相关超时时间
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
access_log些缓冲区
access_log /var/log/nginx/access.log main buffer=32k flush=1m
32k缓存区大小,缓冲时间为1分钟
8、502报错
fastcgi 进程是否启动
fastcgi worker 进程数是否不够
fastcgi 执行时间过长
fastcgi buffer 不够(fastcgi_buffer_size 32k;fastcgi_buffers 8 32K)
proxy buffer 不够(proxy_buffer_size 16k;proxy_buffer 4 16K)
php脚本执行时间过长