0


23道Nginx面试题带你全面了解Nginx!

文章目录

问题1:什么是Nginx?

答案:
Nginx 是一个高性能的 HTTP 和反向代理服务器,它以轻量级和高并发处理能力而闻名。Nginx 的设计注重于高效率和稳定性,它能够处理大量的并发连接,而系统资源消耗相对较小。Nginx 的核心是基于事件驱动架构,这使得它在处理大量并发连接时表现出色。此外,Nginx 还提供了邮件代理、通用 TCP/UDP 代理服务器的功能,以及强大的负载均衡和缓存机制。它的模块化设计也使得它能够灵活地适应不同的应用场景。

Nginx 的反向代理功能允许它作为前端服务器,接收客户端的请求并将它们转发到后端服务器,这样可以隐藏后端服务器的细节,提高安全性。同时,Nginx 也能够作为负载均衡器,将流量分配到多个后端服务器,这样可以提高网站的可用性和扩展性。Nginx 还支持静态文件服务,由于其高效的文件处理能力,它经常被用来作为静态资源的服务器,如图片、CSS 和 JavaScript 文件等。

问题2:为什么要用Nginx?

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

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

使用 Nginx 可以显著提高网站的性能和可靠性,同时降低运维成本。

问题3:为什么Nginx性能这么高?

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

  1. 异步非阻塞事件处理机制:Nginx 使用了 epoll(在 Linux 上)模型,这是一种异步非阻塞的事件处理机制,它可以有效地处理大量的并发连接,而不会因为等待 I/O 操作而阻塞。
  2. 轻量级进程/线程模型:Nginx 使用了轻量级的进程/线程模型,这使得它能够在有限的系统资源下处理大量的并发连接。
  3. 高效的内存管理:Nginx 在内存管理上非常高效,它使用了自己的内存分配器,这减少了内存碎片和内存泄露的风险。
  4. 模块化设计:Nginx 的模块化设计使得它能够灵活地添加或移除功能,这样可以确保只有需要的功能被加载,从而减少了资源的消耗。
  5. 静态文件处理优化:Nginx 对静态文件的处理进行了优化,它能够快速地提供静态资源,而不需要后端服务器的参与。

这些设计使得 Nginx 在处理高并发请求时表现出色,同时保持了低资源消耗。

问题4:Nginx怎么处理请求的?

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

  1. 接收请求:当客户端发送一个 HTTP 请求到 Nginx 时,Nginx 的工作进程或线程会接收这个请求。
  2. 匹配 Server 和 Location:Nginx 会根据请求的域名和 URI 匹配相应的 server 块和 location 块。这是通过 listenserver_name 指令匹配 server 模块,再匹配 server 模块里的 location 实现的。
  3. 处理请求:一旦匹配到相应的 location 块,Nginx 就会根据该块中的配置处理请求。这可能涉及到静态文件服务、代理请求到后端服务器、重定向、返回错误页面等操作。
  4. 响应客户端:处理完请求后,Nginx 会生成一个响应并发送回客户端。

Nginx 的请求处理流程是高效且灵活的,它支持多种请求处理方式,如静态文件服务、反向代理、负载均衡等。通过配置不同的

location

块,Nginx 可以对不同的请求路径执行不同的处理逻辑。

问题5:什么是正向代理和反向代理?

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

正向代理

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

反向代理

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

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

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

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

使用反向代理服务器可以提高网站的安全性、性能和可扩展性。

问题7:Nginx的优缺点?

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

优点

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

缺点

  1. 动态处理能力:Nginx 在处理动态内容方面相对较弱,它更适合作为静态资源的服务器和反向代理。对于需要复杂动态处理的应用,可能需要与其他应用服务器(如 PHP、Node.js)配合使用。
  2. 配置复杂性:虽然 Nginx 的配置相对简单,但对于复杂的负载均衡和缓存策略,配置可能会变得复杂。

总的来说,Nginx 在处理静态内容、反向代理和负载均衡方面表现出色,但在动态内容处理方面可能需要额外的配置和优化。

问题8:Nginx应用场景?

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

  1. HTTP 服务器:Nginx 可以作为 HTTP 服务器独立提供 HTTP 服务,适用于静态网站托管。
  2. 虚拟主机:Nginx 支持虚拟主机功能,可以在一台服务器上托管多个网站,这对于托管提供商来说非常有用。
  3. 反向代理和负载均衡:Nginx 可以作为反向代理服务器,将请求转发到后端服务器,并支持负载均衡,这对于高流量网站和应用来说非常重要。
  4. API 网关:Nginx 可以配置为 API 网关,对每个接口服务进行拦截和路由,提供额外的安全层和流量控制。
  5. 媒体流服务:Nginx 支持媒体流服务,可以用于视频点播和直播服务。
  6. 邮件代理:Nginx 还可以作为邮件代理服务器,处理邮件传输。
  7. 缓存服务器:Nginx 可以设置为缓存服务器,缓存静态内容和动态内容,减少后端服务器的负载,提高响应速度。
  8. 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 的步骤:

  1. serverlocation 块中,使用 add_header 指令添加 Access-Control-Allow-Origin 头部,指定允许访问的源。
  2. 如果需要,还可以添加 Access-Control-Allow-Methods 头部,指定允许的 HTTP 方法。
  3. 对于需要凭证的请求,可以添加 Access-Control-Allow-Credentials 头部。

例如,以下配置允许所有源访问所有资源,并且允许携带凭证:

server {
    listen 80;
    server_name example.com;
    
    location / {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
        
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain charset=UTF-8';
            add_header 'Content-Length' 0;
            return 204;
        }
    }
}

通过这种方式,Nginx 可以作为代理服务器,将前端的跨域请求转发到目标服务器,同时添加必要的 CORS 头部,从而解决跨域问题。

问题13:Nginx虚拟主机怎么配置?

答案:
在 Nginx 中配置虚拟主机主要涉及

server

块的设置。以下是配置虚拟主机的步骤:

  1. 定义 server 块:每个 server 块定义了一个虚拟主机的配置。
  2. 设置监听端口:使用 listen 指令设置服务器监听的端口,通常是 80(HTTP)和 443(HTTPS)。
  3. 设置服务器名称:使用 server_name 指令设置虚拟主机的域名。
  4. 定义 location 块:在 server 块内部定义 location 块,设置请求的处理规则。
  5. 设置根目录:使用 root 指令设置网站内容的根目录。
  6. 设置默认首页:使用 index 指令设置默认首页文件。

例如,以下配置定义了两个基于域名的虚拟主机:

server {
    listen 80;
    server_name www.example.com;
    root /data/www/example;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
}

server {
    listen 80;
    server_name bbs.example.com;
    root /data/www/bbs;
    index index.html index.htm;
    
    location / {
        try_files $uri $uri/ =404;
    }
}

通过这种方式,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

模块,该模块提供了基于漏桶算法的限流机制。以下是限流的几种方式:

  1. 正常限制访问频率:通过 limit_req_zone 指令定义限流维度,并使用 limit_req 指令绑定限流维度和速率。例如,以下配置限制每个客户端每分钟最多发起一个请求:
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
server {
    location / {
        limit_req zone=one;
        proxy_pass http://backend;
    }
}
  1. 突发限制访问频率:通过 burst 参数和 nodelay 参数处理突发流量。burst 参数允许在短时间内处理超过限流速率的请求,而 nodelay 参数确保这些额外的请求立即被处理。
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
server {
    location / {
        limit_req zone=one burst=5 nodelay;
        proxy_pass http://backend;
    }
}
  1. 限制并发连接数:通过 ngx_http_limit_conn_module 模块限制并发连接数。使用 limit_conn_zone
limit_conn_zone $binary_remote_addr zone=myip:10m;
server {
    location / {
        limit_conn myip 10;
        proxy_pass http://backend;
    }
}

这些配置允许 Nginx 限制客户端的请求速率和并发连接数,从而保护后端服务器不受过多请求的冲击。

问题16:漏桶流算法和令牌桶算法知道?

答案:
漏桶算法和令牌桶算法是两种常用的流量整形和速率限制算法,它们在网络中用于控制数据的传输速率。

漏桶算法
漏桶算法通过一个固定容量的桶和漏水龙头来控制数据流。数据以任意速率进入桶中,然后以固定的速率从桶中流出。如果桶满了,额外的数据将被丢弃。这种机制可以平滑突发流量,确保数据以固定的速率被处理,防止网络拥塞。

令牌桶算法
令牌桶算法使用一个令牌桶,桶中会以固定的速率生成令牌。每个数据包的发送需要消耗一个令牌。如果桶中没有令牌,数据包将被延迟发送,直到桶中有令牌可用。这种算法允许数据以峰值速率发送,直到令牌耗尽,然后数据发送速率将降至平均速率。

令牌桶算法更适合需要突发传输的应用,因为它允许在令牌充足时快速发送数据。而漏桶算法则更适合于那些需要持续、均匀速率发送数据的应用。

问题17:为什么要做动静分离?

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

  1. 性能优化:静态资源如图片、CSS、JavaScript 文件等不经常变化,可以由 Nginx 直接提供,这样可以减少后端应用服务器的负载,提高响应速度。
  2. 缓存策略:静态资源适合设置较长的缓存时间,而动态内容通常需要实时处理,动静分离后可以针对静态资源设置更有效的缓存策略。
  3. 扩展性:在高流量的情况下,可以通过增加静态资源服务器的数量来提高服务能力,而不用担心影响动态内容的处理。
  4. 安全性:静态资源通常不需要访问后端数据库或其他安全敏感的服务,将它们与动态内容分离可以减少安全风险。

通过动静分离,可以提高网站的整体性能和可扩展性,同时降低运维成本。

问题18:Nginx怎么做的动静分离?

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

  1. 配置静态资源服务:为静态资源创建专门的 location 块,并设置 rootalias 指令指向静态资源的存放目录。
  2. 配置动态资源代理:为动态资源设置不同的 location 块,并使用 proxy_pass 指令将请求代理到后端的应用服务器。
  3. 优化静态资源的缓存:通过设置缓存控制头部,如 expirescache-control,来控制静态资源的缓存时间。

例如,以下配置展示了动静分离的基本设置:

server {
    listen 80;
    server_name example.com;
    
    # 静态资源配置
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        root /data/www/static;
        expires 30d;
    }
    
    # 动态资源配置
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

通过这种方式,Nginx 可以高效地处理静态资源,同时将动态请求转发到后端服务器,实现动静分离。

问题19:Nginx负载均衡的算法怎么实现的?策略有哪些?

答案:
Nginx 实现负载均衡主要通过

upstream

模块,该模块允许定义一个后端服务器组,并根据特定的策略将请求分发到这些服务器。以下是 Nginx 支持的一些负载均衡策略:

  1. 轮询(round-robin):默认策略,将请求按顺序轮流分配给每个服务器。
  2. 权重(weight):通过给每个服务器设置权重来控制流量分配的比例。
  3. IP绑定(ip_hash):通过请求来源的 IP 地址进行哈希,确保同一 IP 的请求总是被分配到同一个服务器。
  4. 公平(fair):需要第三方模块支持,根据服务器的响应时间来分配请求,响应时间越短的服务器将接收更多的请求。
  5. URL哈希(url_hash):需要第三方模块支持,根据请求的 URL 进行哈希,确保相同的 URL 请求总是被分配到同一个服务器。

以下是一个使用轮询和权重策略的示例配置:

upstream backend {
    server server1 weight=3;
    server server2 weight=2;
    server server3;
}

server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://backend;
    }
}

在这个配置中,

server1

将接收大约 38.46% 的流量,

server2

将接收大约 25.93% 的流量,而

server3

将接收大约 35.71% 的流量。通过这种方式,Nginx 可以有效地将流量分配到多个后端服务器,提高系统的可用性和扩展性。

问题20:Nginx配置高可用性怎么配置?

答案:
配置 Nginx 以实现高可用性主要涉及确保 Nginx 能够处理后端服务器的故障,并在必要时将流量重定向到健康的服务器。以下是一些关键的配置步骤:

  1. 定义多个后端服务器:在 upstream 块中定义多个服务器,以便在一个服务器失败时有备用服务器可用。
  2. 设置超时参数:配置 proxy_connect_timeoutproxy_send_timeoutproxy_read_timeout 指令,以便在后端服务器无响应时及时失败转移。
  3. 使用 max_fails 和 fail_timeout:配置 max_fails 指令来设置在多长时间内允许多少次失败,以及 fail_timeout 指令来设置服务器失败后应该被排除在外的时间。

以下是一个示例配置:

upstream backend {
    server server1;
    server server2;
    server server3;
    
    max_fails=3;
    fail_timeout=30s;
}

server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://backend;
        proxy_connect_timeout 1s;
        proxy_send_timeout 1s;
        proxy_read_timeout 1s;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    }
}

在这个配置中,如果后端服务器在 30 秒内失败超过 3 次,它将被认为不可用,并从轮询中排除 30 秒。同时,如果 Nginx 遇到超时或指定的 HTTP 状态码,它将尝试将请求代理到另一个健康的服务器。

问题21:Nginx怎么判断别IP不可访问?

答案:
Nginx 可以通过检查请求的来源 IP 地址,并将其与预定义的不可访问 IP 列表进行比较,来判断一个 IP 是否不可访问。这可以通过

geo

模块或

map

指令来实现。

以下是一个使用

geo

模块的示例配置:

geo $block_ip {
    default 0;
    192.168.1.100 1;
    192.168.1.101 1;
}

server {
    listen 80;
    server_name example.com;
    
    location / {
        if ($block_ip) {
            return 403;
        }
        proxy_pass http://backend;
    }
}

在这个配置中,如果请求的来源 IP 地址是

192.168.1.100

192.168.1.101

,那么

$block_ip

变量将被设置为

1

,并且请求将被返回

403

状态码,表示禁止访问。

问题22:怎么限制浏览器访问?

答案:
Nginx 可以通过检查请求的

User-Agent

头部来判断请求是否来自特定的浏览器,并据此允许或拒绝请求。这可以通过

if

指令在

location

块中实现。

以下是一个示例配置,限制来自 Google Chrome 浏览器的访问:

server {
    listen 80;
    server_name example.com;
    
    location / {
        if ($http_user_agent ~ Chrome) {
            return 500;
        }
        proxy_pass http://backend;
    }
}

在这个配置中,如果请求的

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:客户端请求的动作,通常为 GETPOST
  • $remote_addr:客户端的 IP 地址。
  • $remote_port:客户端的端口号。
  • $remote_user:已经通过 Auth Basic Module 验证的用户名。
  • $request_filename:由 rootalias 指令与 URI 请求生成的当前请求的文件路径。
  • $scheme:HTTP 方法,如 httphttps
  • $server_protocol:请求使用的协议,通常是 HTTP/1.0HTTP/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:

server {
    listen 80;
    server_name example.com;
    
    location / {
        rewrite ^(.*)$ http://anotherdomain.com$1 permanent;
    }
    
    location /blocked {
        if ($remote_addr = 192.168.1.100) {
            return 403;
        }
    }
}

当前 URI,

$uri

不包含主机名,例如

"/foo/bar.html"

这些变量可以在

rewrite

规则中使用,以实现基于请求信息的重写逻辑。例如,可以使用

$remote_addr

变量来限制特定 IP 地址的访问,或者使用

$http_user_agent

变量来针对特定浏览器进行重定向。

以下是一个使用

rewrite

规则的示例配置,用于将来自特定 IP 地址的请求重定向到另一个 URI:

server {
    listen 80;
    server_name example.com;
    
    location / {
        rewrite ^(.*)$ http://anotherdomain.com$1 permanent;
    }
    
    location /blocked {
        if ($remote_addr = 192.168.1.100) {
            return 403;
        }
    }
}

在这个配置中,如果请求的 IP 地址是

192.168.1.100

,则请求将被返回

403

状态码。而其他所有请求将被重写并永久重定向到

http://anotherdomain.com

标签: nginx 运维

本文转载自: https://blog.csdn.net/weixin_51146329/article/details/142963853
版权归原作者 起名方面没有灵感 所有, 如有侵权,请联系我们删除。

“23道Nginx面试题带你全面了解Nginx!”的评论:

还没有评论