当前位置: 首页 » 中职教育 » Nginx常见笔试题

1、Nginx实现HTTP及TCP负载均衡的模块?
HTTP就是工作在七层协议
TCP工作在四层协议

Nginx七层负载:
七层通过虚拟的URL或主机名接收请求
在server里面配置location反向代理给真实服务器。

Nginx四层负载:
四层就是基于IP+端口的负载均衡
可以定义stream,它和server平等级,可以定义多个端口,然后再pare_pass
反向代理到真实服务器。

2、Nginx中的模块分类及常见核心模块有哪些?
Nginx的架构
Master:
只负载任务分发调度,加载conf配置文件和调度worker。
worker:
只负责处理Master分发的请求,可以在全局配置里面配置多个进程数量。

Standard HTTP modules标准的http模块
Optional HTTP modules可选的http模块
Mail modules邮件模块
Stream modules:流模块,传输层代理,4层tcp和udp代理,传输层代理
3rd party modules第三方模块

3、Nginx负载均衡中常见的算法及原理有哪些?
常见的算法有
轮询,加权轮询:
轮询是一定时间给每台服务器分配数量差不多的请求。
加权轮询是根据服务器的性能分配,权重越大分配请求越多。
ip_hash:
客户端绑定请求,每次请求就在绑定的服务器在处理
least_conn:
哪个服务器的闲置资源多,请求就多往哪个服务器发送。
fail:
根据请求响应时间,智能分配请求数量
url_hash:
根据urlhash分配请求

4、Nginx实现负载均衡集群的主要配置参数要哪些?
比如http的负载均衡,Nginx作为反向代理
配置upstream参数为真实服务器名称(跟server同级)
然后在server配置里面配置location判断什么页面
通过proey_pass 代理到处理什么页面的服务器。

5、Nginx负载均衡中常用的server配置参数有哪些?
upstream:定义一组真实服务器
proxy_pass:反向代理
weight:轮询权值
least_conn:资源服务器哪个资源占用少请求多往那个发
fair:根据服务器响应时间分配请求
url_hash:根据urlhash分配请求

6、Nginx负载均衡中通过哪些参数实现对节点的健康状态检查?
max_fails=3 fail_timeout=10s;
如果某服务器请求失败次数超过三次,nginx会把他踢出群聊,恢复又重新加入。
location /status
查看nginx访问状态

7、Nginx负载均衡的指令有哪些?
weight:轮询权值
fair:根据服务器响应时间分配请求
least_conn:根据服务器资源分配请求
url_hash:根据urlhash分配请求
默认:轮询
location /status:查看状态

8、Nginx如何实现TCP四层转发,用到的模块是?
stream模块

9、Apache实现Tomcat负载均衡的方式?
主要是配置proxy
在里面加入想要负载均衡的机器,以及配置负载均衡的算法
比如:loadfactor 权值调整,设置均衡分配请求,指定超时等。

https://blog.csdn.net/weixin_42480196/article/details/101022767

10、描述DDOS、CC、爬虫等攻击手段,描述Nginx如何进行防护?
需要讲解

11、描述Apache、Nginx、Lighttpd、IIS等WEB服务器的特点?
Apache:
兼容性强,和php无缝结合,稳定性强,处理动态模块效率较高。
Nginx:
内存资源占用少,处理静态网页效率高,一般是企业中间件反向代理的首选,异步处理扛高并发请求。
Lighttpd:

12、描述WEB服务器中的select和epoll模型的特点?
都是多路复用io
select:
单个进程可以同时处理多个io请求,但是连接上这些请求,其他所有请求就被阻塞了,
然后内核就会检查select负责的fd(文件描述符),之后再把它负责到缓冲区。

epoll:
epoll模型打开的fd的数量没有限制,大概一G打开十万,而且它不用内核检查再复制,而是直接
在打开注册的时候就复制到了内核。

所以select效率是没有epoll高的。

13、描述Nginx服务控制信号有哪些?描述Nginx服务器启动脚本的编写思路?
HUP: 这个是重新加载nginx配置文件
QUIT:杀死nginx进程
USR1:切换日志文件
USR2:平滑升级发送信号
首先定义pid和定义日志路径,之后创建日志文件,再判断nginx pid文件是否存在
也就是判断nginx关闭还是打开,是打开就mv把日志移动到指定位置,然后再USR1新生成一个日志文件

14、描述Nginx中worker_processes、worker_cpu_affinity、worker_rlimit_nofile、worker_connections配置项含义?
worker_processes:nginx工作进程数量
worker_cpu_affinity:cpu个数
worker_rlimit_nofile:一个nginx工作进程数量打开文件数量限制
worker_connections:每个进程连接最大数量

15、描述Nginx中$remote_addr、$status、$http_referer、$http_user_agent等变量的含义?
$http_user_agent:
判断客户端手机什么型号或者浏览器什么类型,可以给指定的型号给定不同的页面。
$http_referer:访问控制返回状态码
$status:查看网站的访问状态等信息,比如连接多少,多少次握手,响应多少请求,

$remote_addr:可以在后面指定ip,如果匹配到这个ip可以通过port_pass代理到
自定义的机器组。

16、如何查看Nginx用户的访问状态?
可以在nginx主配置文件nginx.conf 开启用户日志,log_format
路径位于:/nginx/logs/access.log
#log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
# ‘$status $body_bytes_sent “$http_referer” ‘
# ‘”$http_user_agent” “$http_x_forwarded_for”‘;

#access_log logs/access.log main;

17、描述Nginx支持PHP页面的解析的两种方式?
一:nginx将php请求转向别的lamp服务器
二:nginx调用php-fpm模块处理php页面

18、描述Nginx调用FPM时,配置优化项有哪些?
proxy_pass角度:反向代理请求,更多的是优化nginx负载均衡算法,使其请求
更合理的分配给其他节点服务器。

FPM角度:从fpm角度,更多的是优化php-fpm.conf文件参数,比如优化启动创建进程数量
,设置最大空闲进程数量和设置最小空闲进程数量。

PHP角度:
在php.ini配置文件配置 ZendGuardLoader.so 加速模块,
使nginx和php在同一台机器,这样通信就减少网络占用。

19、什么是正向代理?什么是反向代理?
正向代理:指的是客户端想去一个不能去的网站,从而把请求交给别的代理服务器
然后代理服务器帮用户取回来内容。

反向代理:用户发送一个请求,然后到了某台服务器,这台服务器是反向代理
接着反向代理服务器把用户的请求转发给真正用户要去的服务器,再取回数据,
由反向代理返回数据给用户。

20、描述LAMP及LNMP的对比?
LAMP:apache和php的结合,lamp结合的更加紧密,而lnmp需要fpm来连接nginx和php。
lamp相比于lnmp更加稳定。
lnmp占用内存较少,高并发配置比较方便。
lamp相对占用内存资源多,适用于较小型的网站。

21、描述Nginx优化的常见方式(10种)
隐藏版本号,网页的缓存,nginx脚本定时切割,设置防盗链,反向代理算法,设置基准认证
网页的压缩,设置资源防盗链,nginx的热升级,nginx的长链接,nginx的进程和cpu配置
加入epoll模型

22、描述Nginx如何分离PC端和手机端的页面访问?
先默认访问的是pc端网页
然后使用 location 的http_user_agent判断是不是手机客户端。

23、描述Nginx实现平滑升级的过程?
先下载新版本的nginx,然后make编译,之后把老版本的nginx配置文件改名字,
把新版本的nginx配置文件放入老版本配置文件,然后给主进程发信号,新旧进程一起
起来,然后主进程会关闭工作进程,然后再关闭主进程。

24、描述Nginx实现日志切割脚本的编写思路?
先创建pid和log存放目录变量,之后创建保存log的文件,然后判断pip是否存在,
存在就mv把数据转移到存放日志的目录,再kill -USR1 产生新日志文件。

25、描述Nginx实现防盗链的实现思路?
先设置信任网站valid_referers,然后none判断请求头是不是为空,为空就直接访问
blocked ,不以hhtp://和https://开头
然后 $invalid_referer参数判断是不是信任域名,不是的话rewrite重定向到一个空页面。

26、如何查看CPU的型号、核心数、线程数?
cat /proc/cpuinfo | grep ‘model name’ |uniq //查看cup型号
cat /proc/cpuinfo | grep “cpu cores” | uniq //查看cpu核心数
grep ‘processor’ /proc/cpuinfo | sort -u | wc -l //cpu线程数

27、Nginx实现网站静动分离的配置思路?
静态一般指的是html页面,动态一般是jsp,php
可以用一组nginx服务器做反向代理
然后判断是静态页面就往真实nginx服务器放
判断是jsp,就往tomcat服务器放请求。

28、Nginx location匹配规则方式及匹配优先级?
location = 》》 location 全路径 》》 localtion ^~ 》》 location 正则 》》
location 部分路径 》》 location / 通用匹配

29、Nginx生产环境中location匹配配置实际建议?
最少要有通用匹配,和对静态页面处理,动态页面处理

30、Nginx Rewrite语法及标志位有哪些?

1、语法:rewrite regex(表达式) replacement(替换项) flag(标志位)。

http://www.sbc.com/qwe/s/1.html
if ( $http_user ~ Chrom ) {
rewrite ^(.*)$ /sssss/$1 break;
}

^(.*)$匹配/qwe/s/1.html部分,把http://www.sbc.com/qwe/s/1.html
访问路径改为:http://www.sbc.com/sssss/qwe/s/1.html

31、什么是301、什么是302?
301:永久重定向
302:暂时重定向

32、通过rewrite实现所有对www.360buy.com的访问rewrite到www.jd.com

用 if判断 ($host “www.source.com”) 输入的主机是不是 www.source.com
如果是 再拿rewrite重定向到 www.jd.com

if ($host = “www.360buy.com”) {
rewrite (.*) http://www.jd.com;