Nginx

Nginx 知识量:8 - 22 - 84

4.1 代理模块><

反向代理简介- 4.1.1 -

反向代理是一种代理服务器的配置模式,它代表服务器向客户端提供服务。在这种模式下,客户端发送请求到反向代理服务器,然后反向代理服务器将请求转发到后端的真实服务器上,并将响应返回给客户端。简单来说,用户直接访问反向代理服务器就可以获得目标服务器的资源。

Nginx可以作为反向代理服务器完成负载均衡、缓存加速、SSL终端和安全过滤等功能。

  • 在负载均衡方面,Nginx可以通过反向代理实现负载均衡,将请求分发到多个后端服务器上,从而提高系统的并发处理能力和可用性。常见的负载均衡算法有轮询、IP哈希、最少连接等。

  • 在缓存加速方面,Nginx可以缓存静态资源或动态页面,减少后端服务器的负载,提高响应速度。通过设置缓存时间、缓存规则等参数,可以灵活地控制缓存策略。

  • 在SSL终端方面,Nginx可以作为SSL终端,接收HTTPS请求并进行SSL/TLS解密,然后将解密后的请求转发给后端服务器。这样可以减轻后端服务器的负担,提高安全性和性能。

  • 在安全过滤方面,Nginx可以通过反向代理实现安全过滤功能,例如防止恶意请求、DDoS攻击、SQL注入等。通过配置访问控制规则、限制请求频率等方式,可以提高系统的安全性。

Nginx的这些功能都通过其反向代理功能实现。

代理模块中常用的指令- 4.1.2 -

Nginx的代理模块中常用的指令包括:

  • proxy_pass:该指令用于将请求转发到后端服务器。它指定了后端服务器的地址和端口,以及请求的URI。例如,proxy_pass http://backend;会将请求转发到名为“backend”的后端服务器上。

  • proxy_set_header:该指令用于设置或修改请求头信息,以便在转发请求时传递给后端服务器。例如,proxy_set_header Host $host;会将请求头中的“Host”字段设置为原始请求的Host头字段。

  • proxy_cache:该指令用于启用缓存功能,将请求的响应缓存到本地磁盘上,以便后续相同的请求可以直接从缓存中获取响应,而无需再次向后端服务器发送请求。

  • proxy_cache_key:该指令用于指定缓存的键,以便根据键的值将响应存储在缓存中,并在后续的请求中根据键的值从缓存中检索响应。

  • proxy_cache_valid:该指令用于指定缓存的有效期,即缓存的响应在多长时间内仍然有效,可以用于后续的请求。

这些指令可以结合使用,以实现Nginx作为反向代理服务器的各种功能。

upstream模块- 4.1.3 -

Nginx 的 upstream 模块是一个核心模块,用于处理后端服务器组的负载均衡。通过定义一组后端服务器,Nginx 可以根据配置的负载均衡算法将请求分发到不同的服务器上。

在 Nginx 的配置文件中,可以使用 upstream 指令来定义一个或多个后端服务器组。每个组可以包含一个或多个服务器,并且可以指定不同的负载均衡算法。

以下是一个简单的 upstream 配置示例:

upstream backend_servers {    
server backend1.example.com;    
server backend2.example.com;    
server backend3.example.com;    
}

在这个示例中,定义了一个名为 backend_servers 的后端服务器组,包含三个服务器:backend1.example.com、backend2.example.com 和 backend3.example.com。

除了定义服务器组之外,还可以使用其他指令来配置负载均衡算法、后端服务器的权重、持久化等。以下是一些常用的指令:

  • server:指定一个后端服务器,可以包含服务器的 IP 地址、端口号和其他配置选项。

  • weight:为每个后端服务器指定一个权重值,用于根据权重进行负载均衡。权重值越大,该服务器接收的请求越多。

  • backup:将某个服务器标记为备份服务器,只有在其他非备份服务器都不可用时,才会将请求发送给备份服务器。

  • sticky:启用粘性会话,将同一用户的请求分发到同一台服务器上,以实现会话保持。

  • hash、ip_hash、Least_Connection、Round-Robin 等:指定不同的负载均衡算法,用于将请求分发到不同的后端服务器上。

通过合理配置 upstream 模块,可以实现高效、稳定的负载均衡和后端服务器的管理。

保持活动连接- 4.1.4 -

keepalive 是 Nginx 中的一个指令,用于配置长连接的持续时间。长连接是指客户端和服务器之间保持一个持久连接,而不是为每个请求/响应建立一个短暂的连接。这可以提高性能和效率,因为建立和关闭连接的开销被减少了。

在 Nginx 中,keepalive 指令可以用于配置长连接的持续时间和其他相关设置。

以下是 keepalive 指令的一些常见用法:

1. keepalive_timeout

  • 定义一个长连接在空闲状态下保持打开的时间。超过这个时间后,服务器会关闭连接。

  • 示例:keepalive_timeout 65;

2. keepalive_requests

  • 定义一个长连接可以处理的最大请求数。超过这个数后,服务器会关闭连接。

  • 示例:keepalive_requests 100;

3. proxy_http_version 1.1;

  • 当使用 Nginx 作为反向代理时,确保与后端服务器通信的 HTTP 版本为 1.1,以支持长连接。

  • 示例:proxy_http_version 1.1;

4. proxy_http_version 1.0;

  • 如果后端服务器只支持 HTTP/1.0,确保与后端通信的 HTTP 版本为 1.0。在这种情况下,通常不使用长连接,因为 HTTP/1.0 不支持长连接。

  • 示例:proxy_http_version 1.0;

使用长连接时,还需要注意以下几点:

  • 长连接有助于减少服务器的负载和网络拥塞,因为建立和关闭连接的开销减少了。

  • 但是,如果长连接过多或持续时间过长,可能会导致内存使用增加,因为每个长连接都需要在服务器上保留一些状态信息。

  • 在配置长连接时,需要权衡性能和资源消耗之间的平衡。