nginx个人总结面试题!
1、nginx的最新版本
nginx的最新版本是1.24.0
正向代理的过程隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替请求。
反向代理的过程隐藏了真实的服务器,客户不知道真正提供服务的人是谁,客户端请求的服务都被代理服务器处理。反向代理代理的是响应方,也就是服务端;
正向代理(Forward Proxy)通常位于客户端和互联网之间,为客户端请求提供代理服务。它将客户端的请求转发到其他服务器上,并将从服务器接收到的响应返回给客户端。正向代理隐藏了客户端的真实IP地址并负责安全过滤,保护了客户端的隐私和网络安全。
反向代理(Reverse Proxy)通常位于服务器和互联网之间,为后端服务器请求提供代理服务。它可以缓存静态资源、负载均衡多个后端服务器、提供安全过滤等功能,在Web访问中发挥着重要的作用。反向代理隐藏了后端服务器的真实IP地址和拓扑结构,提高了后端服务器的安全性和可伸缩性。
2、介绍一下nginx
nginx是一款轻量级、高性能、稳定性高、并发性好的http和反向代理服务器(支持https),同时也是一款负载均衡软件,可以做7层和四层负载均衡。可以做动静分离,nginx解析静态页面的效率非常高,但是动态请求很鸡肋。nginx功能非常强大,常用的比如地址重写,防盗链,会话保持,访问控制流量控制等
3、nginx、haproxy、lvs的区别
lvs基于系统内核实现软负载均衡,而haproxy和nginx是基于第三方应用实现的软负载均衡。
haproxy是基于四层和七层的转发,是专业的负载均衡软件
nginx既是web服务器、缓存服务器、又是反向代理服务器,可以做七层和四层的转发
lvs是基于四层的负载均衡,所以做不了基于url和目录的转发
4、什么时候用haproxy什么时候用nginx什么时候用lvs
在并发量大得时候可以用lvs,中小型公司可用nginx或者haproxy,如果只是单纯的负载均衡可以用haproxy,但如果是web服务器的话,建议使用nginx,这也是nginx用的多的原因。还用一种情况可以使用lvs和haproxy,比如RabbitMQ集群,有三台RabbitMQ,我们都知道RabbitMQ镜像模式使用还是比较多的,每个节点都提供服务,但我们总不能给开发提供三个RabbitMQ的节点吧,也不能只提供一个节点的ip,所以就可以使用lvs或者haproxy给三个RabbitMQ提供一个VIP,这样开发老铁可以用这个vip写进前端的配置中。不至于所有数据都往一个RabbitMQ上发送。
5、apache和nginx的区别,为什么不用apache
nginx比apache 占用更少的内存及资源 ,抗并发能力更强,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
apache的rewrite重写功能比nginx强大,模块也更多,两者相比nginx的bug要稍多一点。
一般情况下对性能要求高的话可以使用nginx,如果只要求稳定不要求性能的话可以使用apache
6、动静分离的目的
将网站静态资源与后台应用分开部署,提高用户访问静态网页的速度,降低对后台应用的访问。动静分离的做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则将静态请求全部请求到nginx服务器,动态资源请求全部请求到tomcat,达到动静分离的目的。
7、四层七层负载均衡的区别
四层负载均衡是基于ip+端口进行转发的,复杂度低,传输效率高,因为不需要解析具体的消息内容,但是安全性比较低,七层负载均衡是基于url或者主机ip进行转发的,复杂度高,传输效率相比四层比较低,但是安全性高,功能也比较丰富,比如会话保持、图片压缩等。对比来看两者最大的区别就是效率和功能的区别。四层负载均衡架构设计比较简单,无需解析具体消息内容,在网络吞吐量和处理能力上相对比较高,而七层负载均衡的优势则体现在功能多控制灵活强大
8、nginx的性能调优
系统层面:增大文件句柄打开数。临时修改 ulimit –SHn 永久生效vim /etc/security/limits.conf
服务层面:每个进程的最大文件打开数设置的高一点。worker_rlimit_nofile
cpu的亲和设置,把nginx的进程绑定到不同的cpu,减少进程频繁切换cpu带来的资源损耗。worker_processes 8 最多开启8个,8个以上性能不在提升,稳定性也会变差。1.9版本之后可以设置为auto
选择epoll模型,io多路复用,将worker_connections 10240
设置keepalive_timeout会话保持时间
开启GZIP压缩
设置proxy超时时间
配置日志。方便排错
访问控制,流量控制
开启高效传输 sendfile on tcp_nopush on tcp_nodelay on
内核参数优化
9、nginx的跨域
server {
listen 8080;
server_name localhost;
root html;
location / {
#index index.html index.htm;
#解决vue去掉#号问题,将vue打包的dist文件下文件放到html目录
try_files $uri $uri/ /index.html;
}
#请求http://localhost:8080/api,将该请求转发到百度api,则保证请求在同一个域,解决跨域问题
location /api {
proxy_pass http://api.baidu.com/api;
}
}
server {
listen 8080;
server_name localhost;
root html;
location / {
#vue运行dev在8088端口
proxy_pass http://localhost:8088;
}
#请求http://localhost:8080/api,将该请求转发到百度api,则保证请求在同一个域,解决跨域问题
location /api {
proxy_pass http://api.baidu.com/api;
}
}
10、nginx的会话保持
使用第三方模块nginx-sticky-module-ng,使用ip_hash、url_hash
11、nginx怎么做反向代理
12、nginx怎么做七层负载均衡
upstream、server、location、proxy_pass
13、nginx如何获取客户端的地址
在nginx的配置文件中添加,proxy_set_hearder X-Forwarded-For $remode_addr
14、nginx如何隐藏版本信息
在配置文件http模块中添加server_tokens off;
15、nginx防盗链怎么做
需要使用一个模块ngx_http_referer_module,并在server块中添加Vaild_referers none
16、nginx的缺点
处理不了动态请求,单进程多线程模式,进程死掉会影响很多用户
————————————————