如何将 Nginx 配置为反向代理

本指南将介绍如何将 Nginx 配置为反向代理,内容涵盖安装、服务器块设置、将请求代理至后端服务器、头部管理,以及为提升安全性和性能而进行的可选 SSL/TLS 配置。

Intermediate

Nginx 是一款功能强大的 Web 服务器,同时也能有效地充当反向代理。将其配置为反向代理后,它将部署在应用服务器之前,负责处理传入的客户端请求,并将其转发至相应的后端服务器。这种配置可以提升性能、安全性及可扩展性。

将 Nginx 用作反向代理的优势

  • 负载均衡:将传入的流量分配到多个后端服务器上。
  • 增强安全性:隐藏内部网络结构和后端服务器,防止客户端直接访问。
  • SSL/TLS 终止:处理 HTTPS 加密与解密,从而减轻后端应用程序的负担。
  • 缓存:缓存静态和动态内容,以减轻服务器负载并提高响应速度。
  • 压缩:压缩响应内容以加快传输速度。
  • 静态内容服务:高效直接提供静态文件,不增加应用服务器的负担。

1. 安装 Nginx

如果您的服务器上尚未安装 Nginx,可以使用发行版的包管理器进行安装。

  • 针对 Ubuntu/Debian: bash sudo apt update sudo apt install nginx
  • 对于 CentOS/RHEL/Fedora: bash sudo dnf install nginx # or yum for older versions

安装完成后,启动 Nginx 服务并设置为开机自启:

sudo systemctl start nginx
sudo systemctl enable nginx

您可以通过在浏览器中访问 http://localhost 来验证 Nginx 是否正在运行。

2. 查找 Nginx 配置文件

Nginx 配置文件通常位于 /etc/nginx/目录下。主配置文件通常为 nginx.conf。您通常会发现一个 sites-available 目录,其中包含各个网站的配置文件,这些文件随后会通过符号链接指向 sites-enabled 以启用它们。

3. 配置服务器块

您需要在 Nginx 配置中创建或修改一个服务器块。该块定义了 Nginx 如何处理针对特定域名或 IP 地址的请求。

反向代理的基本服务器块如下所示:

server {
    listen 80; # Nginx listens on port 80 for incoming HTTP requests
    server_name your_domain.com www.your_domain.com; # Replace with your domain name

    location / {
        proxy_pass http://backend_server_ip:port; # Forward requests to your 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;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

指令说明:

  • listen 80;: Nginx 将监听端口 80 上的传入 HTTP 请求。
  • server_name: 指定此服务器块应响应的域名。
  • location /: 此块定义了如何处理匹配根路径 (/)的请求将如何处理。您可以为不同的路径创建更具体的 location 服务器块(例如: location /api/).
  • proxy_pass: 这是反向代理的核心指令。它指示 Nginx 将请求转发至指定的后端服务器 IP 地址和端口。
  • proxy_set_header: 这些指令对于将原始客户端信息(如 IP 地址和主机名)传递给后端服务器至关重要,这对日志记录和应用程序逻辑非常有用。

4. 启用配置

如果您已在 sites-available/中创建了新的配置文件,则需通过创建指向 sites-enabled/:

sudo ln -s /etc/nginx/sites-available/my_reverse_proxy /etc/nginx/sites-enabled/

5. 测试 Nginx 配置

在重启 Nginx 之前,请务必检查配置文件是否存在语法错误:

sudo nginx -t

如果测试通过,您将看到一条消息,表明语法正确且测试成功。

6. 重新加载 Nginx

要应用新配置,请重载 Nginx:

sudo systemctl reload nginx

7. 测试反向代理

打开网页浏览器,访问 http://your_domain.com (若未设置域名,请输入服务器的 IP 地址)。此时 Nginx 应已将请求转发至后端服务器,您应能看到后端应用程序提供的内容。

此基础配置为将 Nginx 用作反向代理奠定了基础。您可以通过 SSL/TLS 终止、负载均衡、缓存以及更高级的路由规则等功能进一步进行自定义。