跳到主要内容

Nginx 代理案例

Nginx 是一个高性能的 HTTP 服务器和反向代理服务器。它不仅可以作为 Web 服务器直接提供静态内容,还可以作为代理服务器,将客户端的请求转发到后端服务器。本文将介绍 Nginx 作为代理服务器的基本概念,并通过实际案例展示其应用场景。

什么是Nginx代理?

Nginx 代理是指 Nginx 作为中间层,接收客户端的请求并将其转发到后端服务器。代理服务器可以隐藏后端服务器的真实 IP 地址,提供负载均衡、缓存、SSL 终止等功能。Nginx 支持两种主要的代理模式:

  1. 正向代理:客户端通过 Nginx 访问外部资源,Nginx 代表客户端向外部服务器发送请求。
  2. 反向代理:客户端通过 Nginx 访问内部资源,Nginx 将请求转发到内部服务器,并将响应返回给客户端。

本文将重点介绍反向代理的应用。

基本配置

Nginx 的代理功能主要通过 proxy_pass 指令实现。以下是一个简单的反向代理配置示例:

nginx
server {
listen 80;
server_name example.com;

location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

在这个配置中:

  • listen 80; 表示 Nginx 监听 80 端口。
  • server_name example.com; 指定了服务器的域名。
  • location / {} 块定义了如何处理根路径的请求。
  • proxy_pass http://backend_server; 将请求转发到 backend_server
  • proxy_set_header 指令用于设置请求头,确保后端服务器能够正确识别客户端信息。

实际案例

案例1:负载均衡

假设你有三台后端服务器,分别运行在不同的端口上。你可以使用 Nginx 作为反向代理,将请求均匀地分发到这些服务器上,从而实现负载均衡。

nginx
upstream backend {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}

server {
listen 80;
server_name example.com;

location / {
proxy_pass http://backend;
}
}

在这个配置中:

  • upstream backend {} 定义了一个名为 backend 的上游服务器组,包含三台服务器。
  • proxy_pass http://backend; 将请求转发到 backend 服务器组。

Nginx 默认使用轮询算法进行负载均衡,你也可以通过 weight 参数为每台服务器设置不同的权重。

案例2:SSL 终止

Nginx 可以作为 SSL 终止代理,处理客户端的 HTTPS 请求,并将解密后的请求转发到后端服务器。这样可以减轻后端服务器的 SSL 处理负担。

nginx
server {
listen 443 ssl;
server_name example.com;

ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;

location / {
proxy_pass http://backend_server;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

在这个配置中:

  • listen 443 ssl; 表示 Nginx 监听 443 端口并启用 SSL。
  • ssl_certificatessl_certificate_key 指定了 SSL 证书和私钥的路径。
  • proxy_pass 将解密后的请求转发到后端服务器。

案例3:缓存静态内容

Nginx 可以缓存静态内容,减少后端服务器的负载并提高响应速度。

nginx
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;

server {
listen 80;
server_name example.com;

location / {
proxy_cache my_cache;
proxy_pass http://backend_server;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
}
}

在这个配置中:

  • proxy_cache_path 定义了缓存路径和大小。
  • proxy_cache 启用了缓存功能。
  • proxy_cache_valid 指定了不同响应状态码的缓存时间。

总结

Nginx 作为代理服务器,可以用于负载均衡、SSL 终止、缓存等多种场景。通过合理的配置,Nginx 可以显著提高系统的性能和可靠性。本文介绍了 Nginx 代理的基本概念和几个实际案例,希望能帮助你更好地理解和使用 Nginx。

附加资源

练习

  1. 配置一个 Nginx 反向代理,将请求转发到本地的两个不同端口。
  2. 尝试为你的 Nginx 配置 SSL 终止,并使用自签名证书进行测试。
  3. 研究 Nginx 的缓存机制,并尝试为静态内容配置缓存。
提示

在配置 Nginx 时,建议使用 nginx -t 命令测试配置文件的正确性,避免因配置错误导致服务不可用。