23道Nginx面试题带你全面相识Nginx!

打印 上一主题 下一主题

主题 801|帖子 801|积分 2403

题目1:什么是Nginx?

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

答案:
利用 Nginx 主要基于以下几个原因:

  • 高性能和高并发:Nginx 能够处理大量的并发毗连,而内存消耗相对较小。这使得它成为处理高流量网站的理想选择。
  • 内存消耗小:与其他服务器相比,Nginx 在开启多个进程时,内存消耗仍然很低,这对于资源有限的情况非常有用。
  • 静态文件处理:Nginx 在处理静态文件方面非常高效,它能够快速地提供图片、CSS、JavaScript 等静态资源。
  • 负载均衡:Nginx 可以作为负载均衡器,将流量分配到多个后端服务器,这样可以进步网站的可用性和扩展性。
  • 模块化和机动性:Nginx 的模块化设计使得它能够机动地适应不同的应用场景,如作为邮件代理、通用 TCP/UDP 代理服务器等。
  • 安全性:Nginx 提供了多种安全特性,如防止 DDoS 攻击、限定请求频率等,这有助于进步网站的安全性。
利用 Nginx 可以显著进步网站的性能和可靠性,同时低落运维成本。
题目3:为什么Nginx性能这么高?

答案:
Nginx 的高性能主要得益于以下几个方面:

  • 异步非阻塞变乱处理机制:Nginx 利用了 epoll(在 Linux 上)模子,这是一种异步非阻塞的变乱处理机制,它可以有用地处理大量的并发毗连,而不会因为等候 I/O 操作而阻塞。
  • 轻量级进程/线程模子:Nginx 利用了轻量级的进程/线程模子,这使得它能够在有限的体系资源下处理大量的并发毗连。
  • 高效的内存管理:Nginx 在内存管理上非常高效,它利用了本身的内存分配器,这减少了内存碎片和内存泄漏的风险。
  • 模块化设计:Nginx 的模块化设计使得它能够机动地添加或移除功能,这样可以确保只有需要的功能被加载,从而减少了资源的消耗。
  • 静态文件处理优化:Nginx 对静态文件的处理进行了优化,它能够快速地提供静态资源,而不需要后端服务器的参与。
这些设计使得 Nginx 在处理高并发请求时体现精彩,同时保持了低资源消耗。
题目4:Nginx怎么处理请求的?

答案:
Nginx 处理请求的过程大抵如下:

  • 吸取请求:当客户端发送一个 HTTP 请求到 Nginx 时,Nginx 的工作进程或线程会吸取这个请求。
  • 匹配 Server 和 Location:Nginx 会根据请求的域名和 URI 匹配相应的 server 块和 location 块。这是通过 listen 和 server_name 指令匹配 server 模块,再匹配 server 模块里的 location 实现的。
  • 处理请求:一旦匹配到相应的 location 块,Nginx 就会根据该块中的设置处理请求。这可能涉及到静态文件服务、代理请求到后端服务器、重定向、返回错误页面等操作。
  • 响应客户端:处理完请求后,Nginx 会生成一个响应并发送回客户端。
Nginx 的请求处理流程是高效且机动的,它支持多种请求处理方式,如静态文件服务、反向代理、负载均衡等。通过设置不同的 location 块,Nginx 可以对不同的请求路径实验不同的处理逻辑。
题目5:什么是正向代理和反向代理?

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


  • 正向代理位于客户端和目标服务器之间。
  • 客户端通过代理服务器向目标服务器发送请求。
  • 目标服务器只能看到代理服务器的 IP 地址,而看不到客户端的真实 IP 地址。
  • 正向代理通常用于客户端访问互联网时,通过代理服务器来访问外部资源,这可以进步安全性和隐私掩护。
反向代理


  • 反向代理位于客户端和目标服务器之间,但与正向代理不同,客户端通常不知道反向代理的存在。
  • 客户端向反向代理服务器发送请求,然后反向代理服务器将请求转发到一个或多个后端服务器。
  • 后端服务器处理请求并将响应返回给反向代理服务器,反向代理服务器再将响应返回给客户端。
  • 反向代理可以进步网站的可用性和扩展性,同时也可以提供缓存、负载均衡和 SSL 终端等功能。
题目6:利用“反向代理服务器”的优点是什么?

答案:
利用反向代理服务器可以带来以下优点:

  • 隐蔽服务器:反向代理服务器可以隐蔽后端服务器的存在和特征,这有助于进步安全性,因为外部用户无法直接访问后端服务器。
  • 负载均衡:反向代理可以作为负载均衡器,将流量分配到多个后端服务器,这样可以进步网站的可用性和扩展性。
  • 缓存静态内容:反向代理服务器可以缓存静态内容,如图片、CSS 和 JavaScript 文件等,这样可以减少后端服务器的负载并进步响应速度。
  • SSL 终端:反向代理服务器可以处理 SSL/TLS 加密,这样可以减轻后端服务器的加密负担。
  • 压缩和优化:反向代理服务器可以在将内容发送到客户端之前对其进行压缩和优化,这样可以减少带宽消耗并进步响应速度。
  • 提供额外的安全层:反向代理服务器可以提供额外的安全层,如防火墙、DDoS 防护等。
利用反向代理服务器可以进步网站的安全性、性能和可扩展性。
题目7:Nginx的优缺点?

答案:
Nginx 作为一种流行的 Web 服务器和反向代理,具有以下优点和缺点:
优点

  • 高性能和高并发:Nginx 能够处理大量的并发毗连,而内存消耗相对较小,这使得它在高流量场景下体现精彩。
  • 内存消耗小:Nginx 在开启多个进程时,内存消耗仍然很低,这对于资源有限的情况非常有用。
  • 静态文件处理:Nginx 在处理静态文件方面非常高效,它能够快速地提供图片、CSS、JavaScript 等静态资源。
  • 负载均衡:Nginx 可以作为负载均衡器,将流量分配到多个后端服务器,这样可以进步网站的可用性和扩展性。
  • 模块化和机动性:Nginx 的模块化设计使得它能够机动地适应不同的应用场景,如作为邮件代理、通用 TCP/UDP 代理服务器等。
缺点

  • 动态处理本事:Nginx 在处理动态内容方面相对较弱,它更适互助为静态资源的服务器和反向代理。对于需要复杂动态处理的应用,可能需要与其他应用服务器(如 PHP、Node.js)共同利用。
  • 设置复杂性:虽然 Nginx 的设置相对简朴,但对于复杂的负载均衡和缓存策略,设置可能会变得复杂。
总的来说,Nginx 在处理静态内容、反向代理和负载均衡方面体现精彩,但在动态内容处理方面可能需要额外的设置和优化。
题目8:Nginx应用场景?

答案:
Nginx 由于其高性能和机动性,可以应用于多种场景:

  • HTTP 服务器:Nginx 可以作为 HTTP 服务器独立提供 HTTP 服务,适用于静态网站托管。
  • 虚拟主机:Nginx 支持虚拟主机功能,可以在一台服务器上托管多个网站,这对于托管提供商来说非常有用。
  • 反向代理和负载均衡:Nginx 可以作为反向代理服务器,将请求转发到后端服务器,并支持负载均衡,这对于高流量网站和应用来说非常重要。
  • API 网关:Nginx 可以设置为 API 网关,对每个接口服务进行拦截和路由,提供额外的安全层和流量控制。
  • 媒体流服务:Nginx 支持媒体流服务,可以用于视频点播和直播服务。
  • 邮件代理:Nginx 还可以作为邮件代理服务器,处理邮件传输。
  • 缓存服务器:Nginx 可以设置为缓存服务器,缓存静态内容和动态内容,减少后端服务器的负载,进步响应速度。
  • SSL 终端:Nginx 可以处理 SSL/TLS 加密,提供 HTTPS 服务,增强数据传输的安全性。
Nginx 的应用场景非常广泛,从简朴的静态网站托管到复杂的微服务架构,都能见到 Nginx 的身影。
题目9:Nginx目录结构有哪些?

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


  • client_body_temp:用于存储客户端请求的临时文件。
  • conf:存放 Nginx 的设置文件,包罗 nginx.conf 主设置文件和其他设置文件。
  • fastcgi_temp:用于存储 FastCGI 进程的临时文件。
  • html:默认的站点目录,通常用于存放静态文件,如 HTML、CSS、JavaScript 文件等。
  • logs:存放 Nginx 的日志文件,包罗访问日志 access.log、错误日志 error.log 和进程 ID 文件 nginx.pid。
  • proxy_temp:用于存储代理服务器的临时文件。
  • sbin:存放 Nginx 的可实验文件,如 nginx 下令。
  • scgi_temp:用于存储 SCGI 进程的临时文件。
  • uwsgi_temp:用于存储 uWSGI 进程的临时文件。
这些目录在 Nginx 的运行过程中饰演偏重要的脚色,公道设置和管理这些目录可以进步 Nginx 的性能和稳定性。
题目10:Nginx设置文件nginx.conf有哪些属性模块?

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


  • http:定义了 HTTP 服务器的设置,包罗文件类型、默认类型、毗连超时等。
  • server:定义了虚拟主机的设置,可以包罗多个 server 块,每个块定义了一个虚拟主机的设置。
  • location:定义了请求的匹配和处理规则,可以根据 URI、正则表达式等匹配请求,并指定处理方式。
  • upstream:定义了负载均衡的设置,可以指定多个后端服务器,并设置负载均衡策略。
  • events:定义了变乱处理的设置,如工作毗连数 worker_connections。
  • mail:如果 Nginx 用于邮件代理,这个模块用于设置邮件服务的相关参数。
此外,nginx.conf 文件中还可以包罗其他设置文件,如 mime.types、fastcgi.conf、scgi_params 和 uwsgi_params 等,这些文件定义了特定类型的处理模块和参数。
题目11:Nginx静态资源?

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


  • root 指令:指定文件体系上的根目录,用于查找静态资源。
  • alias 指令:为静态资源定义一个别名,方便管理和引用。
  • autoindex 指令:当请求的 URI 以斜杠 / 结尾时,启用目录索引功能,列出目录下的所有文件。
  • sendfile 指令:开启高效传输模式,允许 Nginx 直接在内核空间将文件发送给客户端,进步文件传输效率。
通过公道设置,Nginx 可以快速地提供静态资源,减少后端应用服务器的负载,进步团体性能。
题目12:怎样用Nginx办理前端跨域题目?

答案:
Nginx 可以通过设置 CORS(跨源资源共享)头部来办理前端跨域题目。以下是设置 CORS 的步调:

  • 在 server 或 location 块中,利用 add_header 指令添加 Access-Control-Allow-Origin 头部,指定允许访问的源。
  • 如果需要,还可以添加 Access-Control-Allow-Methods 头部,指定允许的 HTTP 方法。
  • 对于需要凭据的请求,可以添加 Access-Control-Allow-Credentials 头部。
比方,以下设置允许所有源访问所有资源,而且允许携带凭据:
  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 块的设置。以下是设置虚拟主机的步调:

  • 定义 server 块:每个 server 块定义了一个虚拟主机的设置。
  • 设置监听端口:利用 listen 指令设置服务器监听的端口,通常是 80(HTTP)和 443(HTTPS)。
  • 设置服务器名称:利用 server_name 指令设置虚拟主机的域名。
  • 定义 location 块:在 server 块内部定义 location 块,设置请求的处理规则。
  • 设置根目录:利用 root 指令设置网站内容的根目录。
  • 设置默认首页:利用 index 指令设置默认首页文件。
比方,以下设置定义了两个基于域名的虚拟主机:
  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 = / 匹配根路径。
  • 字符串开头匹配:利用 ^~ 符号匹配以特定字符串开头的 URI。
  • 正则表达式匹配:利用 ~ 或 ~* 符号进行正则表达式匹配,其中 ~ 是区分大小写的,而 ~* 是不区分大小写的。
  • 通用匹配:利用 / 符号进行通用匹配,作为最后的选择,如果其他匹配都未成功,请求将被这个 location 块处理。
location 块可以包罗多种指令,如 proxy_pass、root、try_files 等,用于定义请求的处理方式,比方代理到后端服务器、提供静态文件服务或重定向。
题目15:限流怎么做的?

答案:
Nginx 实现限流主要通过 ngx_http_limit_req_module 模块,该模块提供了基于漏桶算法的限流机制。以下是限流的几种方式:

  • 正常限定访问频率:通过 limit_req_zone 指令定义限流维度,并利用 limit_req 指令绑定限流维度和速率。比方,以下设置限定每个客户端每分钟最多发起一个请求:
  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. }
复制代码

  • 突发限定访问频率:通过 burst 参数和 nodelay 参数处理突发流量。burst 参数允许在短时间内处理超过限流速率的请求,而 nodelay 参数确保这些额外的请求立即被处理。
  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. }
复制代码

  • 限定并发毗连数:通过 ngx_http_limit_conn_module 模块限定并发毗连数。利用 limit_conn_zone
  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:为什么要做动静分离?

答案:
动静分离是指将动态内容和静态内容分开处理和存储,这样做的原因包罗:

  • 性能优化:静态资源如图片、CSS、JavaScript 文件等不常常变化,可以由 Nginx 直接提供,这样可以减少后端应用服务器的负载,进步响应速度。
  • 缓存策略:静态资源得当设置较长的缓存时间,而动态内容通常需要实时处理,动静分离后可以针对静态资源设置更有用的缓存策略。
  • 扩展性:在高流量的情况下,可以通过增长静态资源服务器的数量来进步服务本事,而不用担心影响动态内容的处理。
  • 安全性:静态资源通常不需要访问后端数据库或其他安全敏感的服务,将它们与动态内容分离可以减少安全风险。
通过动静分离,可以进步网站的团体性能和可扩展性,同时低落运维成本。
题目18:Nginx怎么做的动静分离?

答案:
在 Nginx 中实现动静分离通常涉及以下步调:

  • 设置静态资源服务:为静态资源创建专门的 location 块,并设置 root 或 alias 指令指向静态资源的存放目录。
  • 设置动态资源代理:为动态资源设置不同的 location 块,并利用 proxy_pass 指令将请求代理到后端的应用服务器。
  • 优化静态资源的缓存:通过设置缓存控制头部,如 expires 或 cache-control,来控制静态资源的缓存时间。
比方,以下设置展示了动静分离的基本设置:
  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 支持的一些负载均衡策略:

  • 轮询(round-robin):默认策略,将请求按顺序轮流分配给每个服务器。
  • 权重(weight):通过给每个服务器设置权重来控制流量分配的比例。
  • IP绑定(ip_hash):通过请求泉源的 IP 地址进行哈希,确保同一 IP 的请求总是被分配到同一个服务器。
  • 公平(fair):需要第三方模块支持,根据服务器的响应时间来分配请求,响应时间越短的服务器将吸取更多的请求。
  • URL哈希(url_hash):需要第三方模块支持,根据请求的 URL 进行哈希,确保雷同的 URL 请求总是被分配到同一个服务器。
以下是一个利用轮询和权重策略的示例设置:
  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 能够处理后端服务器的故障,并在必要时将流量重定向到康健的服务器。以下是一些关键的设置步调:

  • 定义多个后端服务器:在 upstream 块中定义多个服务器,以便在一个服务器失败时有备用服务器可用。
  • 设置超时参数:设置 proxy_connect_timeout、proxy_send_timeout 和 proxy_read_timeout 指令,以便在后端服务器无响应时及时失败转移。
  • 利用 max_fails 和 fail_timeout:设置 max_fails 指令来设置在多长时间内允许多少次失败,以及 fail_timeout 指令来设置服务器失败后应该被排除在外的时间。
以下是一个示例设置:
  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 规则中利用这些变量来实现复杂的重写逻辑。以下是一些常用的全局
变量及其含义:


  • **                                        a                            r                            g                            s                            ∗                            ∗                            :请求行中的参数,等同于                            ‘                                  args**:请求行中的参数,等同于 `                     args∗∗:请求行中的参数,等同于‘query_string`。
  • $content_length:请求头中的 Content-length 字段。
  • $content_type:请求头中的 Content-Type 字段。
  • $document_root:当前请求在 root 指令中指定的值。
  • $host:请求的主机头字段,如果未指定,则为服务器名称。
  • $http_user_agent:客户端的 User-Agent 字符串。
  • $http_cookie:客户端的 Cookie 信息。
  • $limit_rate:用于限定毗连速率。
  • $request_method:客户端请求的动作,通常为 GET 或 POST。
  • $remote_addr:客户端的 IP 地址。
  • $remote_port:客户端的端口号。
  • $remote_user:已经通过 Auth Basic Module 验证的用户名。
  • $request_filename:由 root 或 alias 指令与 URI 请求生成的当前请求的文件路径。
  • $scheme:HTTP 方法,如 http 或 https。
  • $server_protocol:请求利用的协议,通常是 HTTP/1.0 或 HTTP/1.1。
  • $server_addr:服务器地址,在完成一次体系调用后可以确定这个值。
  • $server_name:服务器名称。
  • $server_port:请求到达服务器的端口号。
  • $request_uri:包罗请求参数的原始 URI,不包罗主机名,比方 "/foo/bar.php?arg=baz"。
  • **                                        u                            r                            i                            ∗                            ∗                            :不带请求参数的当前                            U                            R                            I                            ,                            ‘                                  uri**:不带请求参数的当前 URI,`                     uri∗∗:不带请求参数的当前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. }
复制代码
当前 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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表