面试题
什么是Nginx ?
一个轻量、高性能的反向代理和web服务器,具有高并发,事件驱动异步非阻塞的特点。
事件驱动
事件驱动是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积。. 在计算机编程、公共关系、经济活动等领域均有应用。
为什么要用Nginx?
异步非阻塞,高并发
配置简单
处理静态文件有优势,10万并发使用反向代理的优势是什么?
基于域名和目录的路由控制
通过反向代理的方式实现负载均衡,资源可横向扩展。
安全:不暴露正式的服务器IP地址,隐藏后端服务器的特征Nginx优缺点:
高并发,功能多,配置简单,
占用内存小
缺点: 动态处理能力弱使用场景
反向代理
正向代理
四层代理-端口转发
负载均衡
web服务
api网关
邮件服务,缓存服务等如何用Nginx解决前端跨域问题?
- 使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址。
Nginx虚拟主机
- 基于域名
- 基于端口
- 基于IP
location指令的作用是根据用户请求的URI来执行不同的应用
路由
Nginx优化
性能优化:
cpu亲和力
work_process 2;
work_cpu_affinity 10 01;
高效文件传输模式
worker最大打开文件数目
work_rlimit_nofile 65535;
worker进程连接数 ```nginx ulimit -a|grep “open files”
系统的最大打开文件数>= worker_connections*worker_process
worker_connections 20480;
5. worker进程数
```nginx
worker_process 2;
worker_processes数量==cpu核数
超线程
安全优化:
server_tokens off;
http, server, location
Nginx rewrite之四种flag
nginx的rewrite命令,可以实现URL的重写,在nginx配置文件的server、location、if块使用,对于rewrite指令有四种不同的flag:
redirect:返回302临时重定向,浏览器地址栏会显示跳转后的URL地址,爬虫不会更新URL
permanent:返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫会更新URL
break:停止处理后续rewrite指令集,不会跳出location作用域,不再进行重新查找,终止匹配,URL地址不变
last:停止处理后续rewrite指令集,跳出location作用域,并开始搜索与更改后的URI相匹配的location,URL地址不变
Nginx 进程信号
kill -QUIT pid
kill -TREM pid
kill -INT pid
kill -9 pid
使用 kill -l 查看Linux系统的信号列表
~$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1
36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5
40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9
44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5
60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1
64) SIGRTMAX
1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号。编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)
https://blog.csdn.net/baobao8505/article/details/1115820
Nginx核心100讲-陶辉
conf怎么用?
conf的语法格式?
Nginx是什么?
Web场景的高性能解决方案
CDN
正向代理
反向代理
API网关
Waf防火墙
Haproxy
Nginx 7层负载均衡很强
Nginx有什么特点?
- 高性能
- 稳定
开放的生态
BSD License Tengine
高度自由的C模块 openrestry
定制化Nginx
源码编译
为什么需要定制化
- 默认的不支持http2(gRPC是跑在http2之上的)
- 默认的nginx不支持TCP/UDP的负载均衡
- 不支持stub模块
- TLS/SSL协议
选择Nginx版本
看changes nginx -V
怎么编译安装Nginx
nginx -V核实
configure步骤
Linux中的epoll windows的iocp
目录结构
auto configure要做的事在auto里面
contrib vim是我们要关注的
vim显示语法
mkdir ~/.vim
cp contrib/vim/* ~/.vim/
PCRE 正则表达式
OpenSSL HTTPS
zlib 压缩gzip 用nginx的话推荐用brotli压缩
nginx生成火焰图 configure -g参数
问答?
tcp_reuse 3.9内核以上
cpu 100%火焰图 perf工具 4条命令 SVG 可交互 javascript google_perf_tool
oncpu nginx
offcpu java
SSL 10万 -> 1万 很耗cpu 但是值得 ECC椭圆曲线
E5 cpu处理很快
用好nginx access.log日志
access_log
log_format
pip install ngxtop
分析日志的4种方法
—with-threads
cp name.conf name.nginx nginx -t测试语法格式
autoindex模块
location / {
autoindex on;
index xx.html;
}
小特性-“////”会压缩成一个
proxy_pass 和 uwsgi_pass有什么区别?fastcgi_pass
完全一样 uwsgi是C语言写的一个网关
增加跨域头一定要在proxy_pass之后?
不用,nginx之间的指令没有顺序。
proxy_pass 控制content阶段
应用端如何实时控制Nginx?
构建知识体系!
验证!在Nginx上配一下就知道真相是怎样的。
5个HTTP头部:
X-Accel-Expires
X-Accel-Redirct
X-Accel-Limit-Rate
X-Accel-Buffering
X-Accel-Charset
HTTP1.1 语意
红黑树
upstream策略
roundrobin(默认)
least_conn
error timeout