如何在 Linux 中设置 Nginx 作为反向代理

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程全面介绍了如何在 Linux 环境中使用 Nginx 作为反向代理。你将学习如何配置 Nginx 以充当反向代理,并探索 Nginx 反向代理对你的 Web 应用程序有益的实际用例。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/BasicFileOperationsGroup -.-> linux/more("File Scrolling") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/TextProcessingGroup -.-> linux/sed("Stream Editing") linux/TextProcessingGroup -.-> linux/awk("Text Processing") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") linux/PackagesandSoftwaresGroup -.-> linux/curl("URL Data Transferring") subgraph Lab Skills linux/echo -.-> lab-417915{{"如何在 Linux 中设置 Nginx 作为反向代理"}} linux/cat -.-> lab-417915{{"如何在 Linux 中设置 Nginx 作为反向代理"}} linux/less -.-> lab-417915{{"如何在 Linux 中设置 Nginx 作为反向代理"}} linux/more -.-> lab-417915{{"如何在 Linux 中设置 Nginx 作为反向代理"}} linux/grep -.-> lab-417915{{"如何在 Linux 中设置 Nginx 作为反向代理"}} linux/sed -.-> lab-417915{{"如何在 Linux 中设置 Nginx 作为反向代理"}} linux/awk -.-> lab-417915{{"如何在 Linux 中设置 Nginx 作为反向代理"}} linux/service -.-> lab-417915{{"如何在 Linux 中设置 Nginx 作为反向代理"}} linux/curl -.-> lab-417915{{"如何在 Linux 中设置 Nginx 作为反向代理"}} end

Nginx 反向代理简介

Nginx 是一款广受欢迎的开源 Web 服务器和反向代理服务器,在 Web 开发和部署行业中被广泛使用。反向代理服务器是一种代理服务器,它代表客户端从一个或多个服务器检索资源。在这种情况下,Nginx 可用作反向代理,以提高 Web 应用程序的性能、安全性和可扩展性。

Nginx 作为反向代理的主要用例之一是负载均衡。Nginx 可以将传入流量分布到多个后端服务器,确保没有单个服务器过载,并为 Web 应用程序提供高可用性。这对于处理大量流量或跨多个服务器扩展应用程序特别有用。

Nginx 作为反向代理的另一个常见用例是 SSL/TLS 终止。Nginx 可以处理 SSL/TLS 握手以及 HTTPS 流量的加密/解密,将这项资源密集型任务从后端服务器卸载,从而提高整体性能。

Nginx 还可用于缓存,通过直接从缓存中提供频繁请求的内容,而不是从后端服务器获取,这可以显著提高 Web 应用程序的响应时间。这对于静态内容(如图像、CSS 和 JavaScript 文件)尤其有益。

graph LR Client --> Nginx Nginx --> Backend1 Nginx --> Backend2 Nginx --> Backend3

上图展示了一个典型的 Nginx 反向代理设置,客户端将请求发送到 Nginx 服务器,然后 Nginx 根据配置的负载均衡策略将请求转发到可用的后端服务器之一。

server {
    listen 80;
    server_name example.com;

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

上面的 Nginx 配置文件展示了反向代理的基本设置。server 块在端口 80 上监听传入的 HTTP 请求,并将它们转发到后端服务器的 backend_servers 组。proxy_set_header 指令确保后端服务器接收到正确的主机和客户端 IP 信息。

将 Nginx 配置为反向代理

要将 Nginx 配置为反向代理,你需要了解关键的配置指令以及如何设置必要的组件。

代理转发与上游服务器组

proxy_pass 指令用于指定 Nginx 应将请求转发到的后端服务器的 URL。upstream 指令用于定义一组可进行负载均衡的后端服务器。

upstream backend_servers {
    server 192.168.1.100:8080;
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass
    }
}

在上述示例中,Nginx 被配置为将请求转发到 backend_servers 上游服务器组中定义的三个后端服务器。

负载均衡

Nginx 支持多种负载均衡算法,如轮询、最少连接和 IP 哈希。你可以使用 upstream 指令配置负载均衡策略。

upstream backend_servers {
    least_conn;
    server 192.168.1.100:8080;
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}

在此示例中,Nginx 将使用最少连接负载均衡算法在三个后端服务器之间分配请求。

SSL/TLS 终止

Nginx 可以配置为处理 SSL/TLS 终止,将加密/解密过程从后端服务器卸载。

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/ssl/certificate;
    ssl_certificate_key /path/to/ssl/private_key;

    location / {
        proxy_pass
    }
}

上述配置设置 Nginx 在端口 443 上监听 HTTPS 请求,并在处理 SSL/TLS 握手后将请求转发到后端服务器。

缓存

Nginx 可以配置为缓存频繁访问的内容,从而提高 Web 应用程序的响应时间。

server {
    listen 80;
    server_name example.com;

    location ~* \.(jpg|jpeg|png|css|js)$ {
        proxy_pass
        expires 30d;
        add_header Cache-Control "public";
    }

    location / {
        proxy_pass
    }
}

在此示例中,Nginx 被配置为将静态资产(图像、CSS 和 JavaScript 文件)缓存 30 天,同时将所有其他请求转发到后端服务器。

Nginx 反向代理的实际用例

Nginx 反向代理可用于各种实际场景,以提高 Web 应用程序的性能、安全性和可扩展性。

Web 应用托管

Nginx 反向代理最常见的用例之一是在 Web 应用托管中。Nginx 可用于将传入流量分布到运行 Web 应用程序的多个后端服务器,提供负载均衡和高可用性。这对于处理大量流量或跨多个服务器扩展应用程序特别有用。

upstream backend_servers {
    server 192.168.1.100:8080;
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass
    }
}

微服务架构

在微服务架构中,Nginx 可用作反向代理,将请求路由到相应的微服务。这样可以实现更好的可扩展性,因为各个微服务可以独立扩展,同时还能提高安全性,因为反向代理可以处理诸如身份验证和授权等任务。

upstream auth_service {
    server 192.168.1.100:8081;
}

upstream product_service {
    server 192.168.1.101:8082;
}

server {
    listen 80;
    server_name example.com;

    location /auth/ {
        proxy_pass
    }

    location /products/ {
        proxy_pass
    }
}

内容分发网络 (CDN)

Nginx 可用作反向代理,以实现用于提供静态内容(如图像、CSS 和 JavaScript 文件)的内容分发网络 (CDN)。通过在 Nginx 反向代理上缓存频繁访问的内容,可以显著提高这些资产的响应时间,从而提升整体用户体验。

server {
    listen 80;
    server_name cdn.example.com;

    location ~* \.(jpg|jpeg|png|css|js)$ {
        root /var/www/cdn;
        expires 30d;
        add_header Cache-Control "public";
    }
}

安全与访问控制

Nginx 反向代理可用于通过提供诸如 SSL/TLS 终止、基于 IP 的访问控制和速率限制等功能来增强 Web 应用程序的安全性。这将这些与安全相关的任务从后端服务器卸载,从而改善应用程序的整体安全态势。

server {
    listen 80;
    server_name example.com;

    ## SSL/TLS 终止
    listen 443 ssl;
    ssl_certificate /path/to/ssl/certificate;
    ssl_certificate_key /path/to/ssl/private_key;

    ## 基于 IP 的访问控制
    allow 192.168.1.0/24;
    deny all;

    ## 速率限制
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
    limit_req zone=req_limit burst=5 nodelay;

    location / {
        proxy_pass
    }
}

总结

Nginx 是一款强大的开源 Web 服务器和反向代理,它可以显著提高你的 Web 应用程序的性能、安全性和可扩展性。通过将 Nginx 配置为反向代理,你可以利用负载均衡、SSL/TLS 终止和缓存等功能来优化你的 Web 基础设施。本教程涵盖了 Nginx 反向代理的关键概念和实际用例,使你具备在基于 Linux 的 Web 开发和部署工作流程中有效部署和使用这项技术的知识。