面试题

  1. 什么是Nginx ?

    一个轻量、高性能的反向代理和web服务器,具有高并发,事件驱动异步非阻塞的特点。

    事件驱动

    事件驱动是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积。. 在计算机编程、公共关系、经济活动等领域均有应用。

  2. 为什么要用Nginx?

    异步非阻塞,高并发
    配置简单
    处理静态文件有优势,10万并发

  3. 使用反向代理的优势是什么?

    基于域名和目录的路由控制
    通过反向代理的方式实现负载均衡,资源可横向扩展。
    安全:不暴露正式的服务器IP地址,隐藏后端服务器的特征

  4. Nginx优缺点:

    高并发,功能多,配置简单,
    占用内存小
    缺点: 动态处理能力弱

  5. 使用场景

    反向代理
    正向代理
    四层代理-端口转发
    负载均衡
    web服务
    api网关
    邮件服务,缓存服务等

    如何用Nginx解决前端跨域问题?

  • 使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址。

Nginx虚拟主机

  • 基于域名
  • 基于端口
  • 基于IP

location指令的作用是根据用户请求的URI来执行不同的应用
路由

Nginx优化

性能优化:

  1. cpu亲和力

    1. work_process 2;
    2. work_cpu_affinity 10 01;
  2. 高效文件传输模式

  3. worker最大打开文件数目

    1. work_rlimit_nofile 65535;
  4. worker进程连接数 ```nginx ulimit -a|grep “open files”

系统的最大打开文件数>= worker_connections*worker_process

worker_connections 20480;

  1. 5. worker进程数
  2. ```nginx
  3. worker_process 2;
  4. worker_processes数量==cpu核数
  5. 超线程

安全优化:

  1. server_tokens off;
  2. 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 进程信号

  1. kill -QUIT pid
  2. kill -TREM pid
  3. kill -INT pid
  4. kill -9 pid

使用 kill -l 查看Linux系统的信号列表

  1. ~$ kill -l
  2. 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
  3. 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
  4. 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
  5. 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
  6. 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
  7. 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
  8. 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
  9. 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1
  10. 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5
  11. 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9
  12. 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
  13. 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
  14. 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
  15. 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5
  16. 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1
  17. 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有什么特点?

  1. 高性能
  2. 稳定
  3. 开放的生态

    BSD License Tengine
    高度自由的C模块 openrestry

定制化Nginx

源码编译
为什么需要定制化

  1. 默认的不支持http2(gRPC是跑在http2之上的)
  2. 默认的nginx不支持TCP/UDP的负载均衡
  3. 不支持stub模块
  4. 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模块

  1. location / {
  2. autoindex on;
  3. index xx.html;
  4. }

小特性-“////”会压缩成一个

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