ToB企服应用市场:ToB评测及商务社交产业平台

标题: 23道Nginx面试题带你全面相识Nginx! [打印本页]

作者: 立聪堂德州十三局店    时间: 2024-12-4 20:41
标题: 23道Nginx面试题带你全面相识Nginx!
题目1:什么是Nginx?

答案:
Nginx 是一个高性能的 HTTP 和反向代理服务器,它以轻量级和高并发处理本事而闻名。Nginx 的设计注重于高效率和稳定性,它能够处理大量的并发毗连,而体系资源消耗相对较小。Nginx 的核心是基于变乱驱动架构,这使得它在处理大量并发毗连时体现精彩。此外,Nginx 还提供了邮件代理、通用 TCP/UDP 代理服务器的功能,以及强大的负载均衡和缓存机制。它的模块化设计也使得它能够机动地适应不同的应用场景。
Nginx 的反向代理功能允许它作为前端服务器,吸取客户端的请求并将它们转发到后端服务器,这样可以隐蔽后端服务器的细节,进步安全性。同时,Nginx 也能够作为负载均衡器,将流量分配到多个后端服务器,这样可以进步网站的可用性和扩展性。Nginx 还支持静态文件服务,由于其高效的文件处理本事,它常常被用来作为静态资源的服务器,如图片、CSS 和 JavaScript 文件等。
题目2:为什么要用Nginx?

答案:
利用 Nginx 主要基于以下几个原因:
利用 Nginx 可以显著进步网站的性能和可靠性,同时低落运维成本。
题目3:为什么Nginx性能这么高?

答案:
Nginx 的高性能主要得益于以下几个方面:
这些设计使得 Nginx 在处理高并发请求时体现精彩,同时保持了低资源消耗。
题目4:Nginx怎么处理请求的?

答案:
Nginx 处理请求的过程大抵如下:
Nginx 的请求处理流程是高效且机动的,它支持多种请求处理方式,如静态文件服务、反向代理、负载均衡等。通过设置不同的 location 块,Nginx 可以对不同的请求路径实验不同的处理逻辑。
题目5:什么是正向代理和反向代理?

答案:
正向代理和反向代理是网络代理服务器的两种类型,它们的主要区别在于代理服务器和客户端的相对位置以及它们怎样处理请求。
正向代理

反向代理

题目6:利用“反向代理服务器”的优点是什么?

答案:
利用反向代理服务器可以带来以下优点:
利用反向代理服务器可以进步网站的安全性、性能和可扩展性。
题目7:Nginx的优缺点?

答案:
Nginx 作为一种流行的 Web 服务器和反向代理,具有以下优点和缺点:
优点
缺点
总的来说,Nginx 在处理静态内容、反向代理和负载均衡方面体现精彩,但在动态内容处理方面可能需要额外的设置和优化。
题目8:Nginx应用场景?

答案:
Nginx 由于其高性能和机动性,可以应用于多种场景:
Nginx 的应用场景非常广泛,从简朴的静态网站托管到复杂的微服务架构,都能见到 Nginx 的身影。
题目9:Nginx目录结构有哪些?

答案:
Nginx 的目录结构通常包罗以下几个主要部分:

这些目录在 Nginx 的运行过程中饰演偏重要的脚色,公道设置和管理这些目录可以进步 Nginx 的性能和稳定性。
题目10:Nginx设置文件nginx.conf有哪些属性模块?

答案:
Nginx 的主设置文件 nginx.conf 包罗了多个模块和指令,用于设置 Nginx 的行为和功能。以下是一些主要的模块和属性:

此外,nginx.conf 文件中还可以包罗其他设置文件,如 mime.types、fastcgi.conf、scgi_params 和 uwsgi_params 等,这些文件定义了特定类型的处理模块和参数。
题目11:Nginx静态资源?

答案:
在 Nginx 中,静态资源通常指的是不常常变化的文件,如图片、CSS、JavaScript 文件等。Nginx 提供了高效的静态资源服务本事,可以通过以下方式设置静态资源:

通过公道设置,Nginx 可以快速地提供静态资源,减少后端应用服务器的负载,进步团体性能。
题目12:怎样用Nginx办理前端跨域题目?

答案:
Nginx 可以通过设置 CORS(跨源资源共享)头部来办理前端跨域题目。以下是设置 CORS 的步调:
比方,以下设置允许所有源访问所有资源,而且允许携带凭据:
  1. server {
  2.     listen 80;
  3.     server_name example.com;
  4.    
  5.     location / {
  6.         add_header 'Access-Control-Allow-Origin' '*';
  7.         add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
  8.         add_header 'Access-Control-Allow-Credentials' 'true';
  9.         add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
  10.         
  11.         if ($request_method = 'OPTIONS') {
  12.             add_header 'Access-Control-Max-Age' 1728000;
  13.             add_header 'Content-Type' 'text/plain charset=UTF-8';
  14.             add_header 'Content-Length' 0;
  15.             return 204;
  16.         }
  17.     }
  18. }
复制代码
通过这种方式,Nginx 可以作为代理服务器,将前端的跨域请求转发到目标服务器,同时添加必要的 CORS 头部,从而办理跨域题目。
题目13:Nginx虚拟主机怎么设置?

答案:
在 Nginx 中设置虚拟主机主要涉及 server 块的设置。以下是设置虚拟主机的步调:
比方,以下设置定义了两个基于域名的虚拟主机:
  1. server {
  2.     listen 80;
  3.     server_name www.example.com;
  4.     root /data/www/example;
  5.     index index.html index.htm;
  6.    
  7.     location / {
  8.         try_files $uri $uri/ =404;
  9.     }
  10. }
  11. server {
  12.     listen 80;
  13.     server_name bbs.example.com;
  14.     root /data/www/bbs;
  15.     index index.html index.htm;
  16.    
  17.     location / {
  18.         try_files $uri $uri/ =404;
  19.     }
  20. }
复制代码
通过这种方式,Nginx 可以根据请求的域名和 URI 将请求路由到不同的虚拟主机。
题目14:location的作用是什么?

**答案:
location 指令在 Nginx 设置中饰演着核心脚色,它定义了怎样处理进入 Nginx 的 HTTP 请求。location 块可以匹配不同的 URI、正则表达式或指定的字符串,从而允许对特定的请求路径应用不同的处理规则。

location 块可以包罗多种指令,如 proxy_pass、root、try_files 等,用于定义请求的处理方式,比方代理到后端服务器、提供静态文件服务或重定向。
题目15:限流怎么做的?

答案:
Nginx 实现限流主要通过 ngx_http_limit_req_module 模块,该模块提供了基于漏桶算法的限流机制。以下是限流的几种方式:
  1. limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
  2. server {
  3.     location / {
  4.         limit_req zone=one;
  5.         proxy_pass http://backend;
  6.     }
  7. }
复制代码
  1. limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
  2. server {
  3.     location / {
  4.         limit_req zone=one burst=5 nodelay;
  5.         proxy_pass http://backend;
  6.     }
  7. }
复制代码
  1. limit_conn_zone $binary_remote_addr zone=myip:10m;
  2. server {
  3.     location / {
  4.         limit_conn myip 10;
  5.         proxy_pass http://backend;
  6.     }
  7. }
复制代码
这些设置允许 Nginx 限定客户端的请求速率和并发毗连数,从而掩护后端服务器不受过多请求的冲击。
题目16:漏桶流算法和令牌桶算法知道?

答案:
漏桶算法和令牌桶算法是两种常用的流量整形和速率限定算法,它们在网络中用于控制数据的传输速率。
漏桶算法
漏桶算法通过一个固定容量的桶和漏水龙头来控制数据流。数据以恣意速率进入桶中,然后以固定的速率从桶中流出。如果桶满了,额外的数据将被丢弃。这种机制可以平滑突发流量,确保数据以固定的速率被处理,防止网络拥塞。
令牌桶算法
令牌桶算法利用一个令牌桶,桶中会以固定的速率生成令牌。每个数据包的发送需要消耗一个令牌。如果桶中没有令牌,数据包将被耽误发送,直到桶中有令牌可用。这种算法允许数据以峰值速率发送,直到令牌耗尽,然后数据发送速率将降至平均速率。
令牌桶算法更得当需要突发传输的应用,因为它允许在令牌充足时快速发送数据。而漏桶算法则更得当于那些需要连续、匀称速率发送数据的应用。
题目17:为什么要做动静分离?

答案:
动静分离是指将动态内容和静态内容分开处理和存储,这样做的原因包罗:
通过动静分离,可以进步网站的团体性能和可扩展性,同时低落运维成本。
题目18:Nginx怎么做的动静分离?

答案:
在 Nginx 中实现动静分离通常涉及以下步调:
比方,以下设置展示了动静分离的基本设置:
  1. server {
  2.     listen 80;
  3.     server_name example.com;
  4.    
  5.     # 静态资源配置
  6.     location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
  7.         root /data/www/static;
  8.         expires 30d;
  9.     }
  10.    
  11.     # 动态资源配置
  12.     location / {
  13.         proxy_pass http://backend;
  14.         proxy_set_header Host $host;
  15.         proxy_set_header X-Real-IP $remote_addr;
  16.         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  17.         proxy_set_header X-Forwarded-Proto $scheme;
  18.     }
  19. }
复制代码
通过这种方式,Nginx 可以高效地处理静态资源,同时将动态请求转发到后端服务器,实现动静分离。
题目19:Nginx负载均衡的算法怎么实现的?策略有哪些?

答案:
Nginx 实现负载均衡主要通过 upstream 模块,该模块允许定义一个后端服务器组,并根据特定的策略将请求分发到这些服务器。以下是 Nginx 支持的一些负载均衡策略:
以下是一个利用轮询和权重策略的示例设置:
  1. upstream backend {
  2.     server server1 weight=3;
  3.     server server2 weight=2;
  4.     server server3;
  5. }
  6. server {
  7.     listen 80;
  8.     server_name example.com;
  9.    
  10.     location / {
  11.         proxy_pass http://backend;
  12.     }
  13. }
复制代码
在这个设置中,server1 将吸取大约 38.46% 的流量,server2 将吸取大约 25.93% 的流量,而 server3 将吸取大约 35.71% 的流量。通过这种方式,Nginx 可以有用地将流量分配到多个后端服务器,进步体系的可用性和扩展性。
题目20:Nginx设置高可用性怎么设置?

答案:
设置 Nginx 以实现高可用性主要涉及确保 Nginx 能够处理后端服务器的故障,并在必要时将流量重定向到康健的服务器。以下是一些关键的设置步调:
以下是一个示例设置:
  1. upstream backend {
  2.     server server1;
  3.     server server2;
  4.     server server3;
  5.    
  6.     max_fails=3;
  7.     fail_timeout=30s;
  8. }
  9. server {
  10.     listen 80;
  11.     server_name example.com;
  12.    
  13.     location / {
  14.         proxy_pass http://backend;
  15.         proxy_connect_timeout 1s;
  16.         proxy_send_timeout 1s;
  17.         proxy_read_timeout 1s;
  18.         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  19.     }
  20. }
复制代码
在这个设置中,如果后端服务器在 30 秒内失败超过 3 次,它将被以为不可用,并从轮询中排除 30 秒。同时,如果 Nginx 遇到超时或指定的 HTTP 状态码,它将尝试将请求代理到另一个康健的服务器。
题目21:Nginx怎么判定别IP不可访问?

答案:
Nginx 可以通过检查请求的泉源 IP 地址,并将其与预定义的不可访问 IP 列表进行比较,来判定一个 IP 是否不可访问。这可以通过 geo 模块或 map 指令来实现。
以下是一个利用 geo 模块的示例设置:
  1. geo $block_ip {
  2.     default 0;
  3.     192.168.1.100 1;
  4.     192.168.1.101 1;
  5. }
  6. server {
  7.     listen 80;
  8.     server_name example.com;
  9.    
  10.     location / {
  11.         if ($block_ip) {
  12.             return 403;
  13.         }
  14.         proxy_pass http://backend;
  15.     }
  16. }
复制代码
在这个设置中,如果请求的泉源 IP 地址是 192.168.1.100 或 192.168.1.101,那么 $block_ip 变量将被设置为 1,而且请求将被返回 403 状态码,表示禁止访问。
题目22:怎么限定欣赏器访问?

答案:
Nginx 可以通过检查请求的 User-Agent 头部来判定请求是否来自特定的欣赏器,并据此允许或拒绝请求。这可以通过 if 指令在 location 块中实现。
以下是一个示例设置,限定来自 Google Chrome 欣赏器的访问:
  1. server {
  2.     listen 80;
  3.     server_name example.com;
  4.    
  5.     location / {
  6.         if ($http_user_agent ~ Chrome) {
  7.             return 500;
  8.         }
  9.         proxy_pass http://backend;
  10.     }
  11. }
复制代码
在这个设置中,如果请求的 User-Agent 头部包罗 “Chrome”,则请求将被返回 500 状态码,表示内部服务器错误,从而阻止 Chrome 欣赏器访问。
题目23:Rewrite全局变量是什么?

答案:
在 Nginx 的 rewrite 模块中,全局变量用于存储请求的各种信息,可以在 rewrite 规则中利用这些变量来实现复杂的重写逻辑。以下是一些常用的全局
变量及其含义:

这些变量可以在 rewrite 规则中利用,以实现基于请求信息的重写逻辑。比方,可以利用 $remote_addr 变量来限定特定 IP 地址的访问,或者利用 $http_user_agent 变量来针对特定欣赏器进行重定向。
以下是一个利用 rewrite 规则的示例设置,用于将来自特定 IP 地址的请求重定向到另一个 URI:
  1. server {
  2.     listen 80;
  3.     server_name example.com;
  4.    
  5.     location / {
  6.         rewrite ^(.*)$ http://anotherdomain.com$1 permanent;
  7.     }
  8.    
  9.     location /blocked {
  10.         if ($remote_addr = 192.168.1.100) {
  11.             return 403;
  12.         }
  13.     }
  14. }
复制代码
当前 URI,$uri 不包罗主机名,比方 "/foo/bar.html"。
这些变量可以在 rewrite 规则中利用,以实现基于请求信息的重写逻辑。比方,可以利用 $remote_addr 变量来限定特定 IP 地址的访问,或者利用 $http_user_agent 变量来针对特定欣赏器进行重定向。
以下是一个利用 rewrite 规则的示例设置,用于将来自特定 IP 地址的请求重定向到另一个 URI:
  1. server {
  2.     listen 80;
  3.     server_name example.com;
  4.    
  5.     location / {
  6.         rewrite ^(.*)$ http://anotherdomain.com$1 permanent;
  7.     }
  8.    
  9.     location /blocked {
  10.         if ($remote_addr = 192.168.1.100) {
  11.             return 403;
  12.         }
  13.     }
  14. }
复制代码
在这个设置中,如果请求的 IP 地址是 192.168.1.100,则请求将被返回 403 状态码。而其他所有请求将被重写并永久重定向到 http://anotherdomain.com。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4