返回

从零理解,Nginx 代理负载均衡与缓存实战指南

后端

为什么使用 Nginx?

Nginx 是一款开源、高性能的 HTTP 和反向代理服务器,以其稳定性和高并发处理能力而著称。它可以作为 Web 服务器、反向代理服务器、负载均衡器或缓存服务器使用。

Nginx 代理

代理服务器是一种位于客户端和服务器之间的中间服务器。代理服务器可以为客户端提供多种服务,例如:

  • 负载均衡: 代理服务器可以将客户端的请求分发到不同的服务器上,从而实现负载均衡。
  • 缓存: 代理服务器可以将经常被请求的资源缓存在本地,从而提高网站的访问速度。
  • 安全: 代理服务器可以对客户端的请求进行过滤,防止恶意请求访问服务器。

Nginx 负载均衡

负载均衡是指将客户端的请求分发到不同的服务器上,以提高网站的性能和可用性。Nginx 可以通过多种方式实现负载均衡,例如:

  • 轮询: Nginx 可以根据服务器的权重进行轮询,将客户端的请求均匀地分发到不同的服务器上。
  • 最少连接: Nginx 可以根据服务器上的连接数进行选择,将客户端的请求分发到连接数最少的服务器上。
  • 响应时间: Nginx 可以根据服务器的响应时间进行选择,将客户端的请求分发到响应时间最短的服务器上。

Nginx 缓存

缓存是指将经常被请求的资源缓存在本地,以提高网站的访问速度。Nginx 可以通过多种方式实现缓存,例如:

  • 文件缓存: Nginx 可以将静态文件缓存在本地,从而减少服务器对文件的访问次数。
  • 反向代理缓存: Nginx 可以将上游服务器的响应缓存起来,从而减少上游服务器的压力。
  • 动态缓存: Nginx 可以将动态生成的页面缓存在本地,从而提高网站的性能。

实战案例

我们以一个实际案例为例,演示如何使用 Nginx 实现代理、负载均衡和缓存。

假设我们有一个网站,由两台服务器组成,分别是 www.example.com 和 www2.example.com。我们希望使用 Nginx 将客户端的请求分发到这两台服务器上,并对静态文件进行缓存。

Nginx 配置

首先,我们需要在 Nginx 的配置文件中进行如下配置:

upstream backend {
  server www.example.com;
  server www2.example.com;
}

server {
  listen 80;

  location / {
    proxy_pass http://backend;
  }

  location /static/ {
    proxy_cache_path /tmp/nginx-cache levels=1:2 keys_zone=static_cache:10m;
    proxy_cache_key "$scheme://$host$request_uri";
    proxy_cache_valid 200 302 1h;
    proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
  }
}

配置说明

  • upstream 块定义了上游服务器的列表。
  • server 块定义了 Nginx 监听的端口和处理请求的规则。
  • location 块定义了 Nginx 如何处理不同的请求。
  • / 块定义了 Nginx 如何处理所有请求。
  • proxy_pass 指令将客户端的请求分发到上游服务器。
  • /static/ 块定义了 Nginx 如何处理静态文件请求。
  • proxy_cache_path 指令定义了缓存的路径。
  • proxy_cache_key 指令定义了缓存的键。
  • proxy_cache_valid 指令定义了缓存的有效期。
  • proxy_cache_use_stale 指令定义了在缓存过期时如何处理请求。

测试

我们可以在浏览器中访问网站,并使用工具查看请求是否被缓存。

curl -v http://www.example.com/static/style.css

如果看到如下输出,则表示请求被缓存了:

HTTP/1.1 304 Not Modified

总结

Nginx 是一款功能强大、用途广泛的服务器软件。通过合理配置 Nginx,我们可以提高网站的性能、可用性和安全性。在本文中,我们详细介绍了 Nginx 的代理、负载均衡和缓存功能,并通过实际案例演示了如何使用 Nginx 实现这些功能。希望本文对您有所帮助。