设置 Nginx 反向代理

反向代理是一种服务,它接受客户端请求,将请求发送到一个或多个代理服务器,获取响应,并将服务器的响应传递给客户端。

设置 Nginx 反向代理

由于其性能和可扩展性,NGINX通常被用作HTTP和非HTTP服务器的反向代理。典型的反向代理配置是将 Nginx 放在 Node.js、Python 或 Java 应用程序的前面。

使用Nginx作为反向代理可以为您带来一些额外的好处:

  • 负载均衡 - Nginx可以执行负载均衡,在代理服务器之间分配客户端的请求,从而提高性能,可扩展性和可靠性。
  • 缓存 - 使用 Nginx 作为反向代理,您可以缓存页面的预呈现版本以加快页面加载时间。它的工作原理是从代理服务器的响应中接收的内容,并使用它来响应客户端,而无需每次都联系代理服务器以获取相同的内容。
  • SSL终止 - Nginx可以充当与客户端连接的SSL端点。它将处理和解密传入的 SSL 连接,并加密代理服务器的响应。
  • 压缩 - 如果代理服务器不发送压缩响应,则可以将 Nginx 配置为在将响应发送到客户端之前对其进行压缩。
  • 缓解 DDoS 攻击 - 您可以将每个 IP 地址的传入请求和连接数限制为普通用户的典型值。Nginx还允许您根据客户端位置以及请求标头的值(例如“User-Agent”和“Referer”)阻止或限制访问。

本文概述了将 Nginx 配置为反向代理所需的步骤。

先决条件

我们假设你需要在 Ubuntu 18.04CentOS 8Debian 10 服务器上安装了 Nginx。

使用 nginx 作为反向代理

要将 Nginx 配置为 HTTP 服务器的反向代理,请打开域的服务器块配置文件并指定位置和其中的代理服务器:

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

    location /app {
       proxy_pass http://127.0.0.1:8080;
    }
}

代理服务器 URL 是使用指令设置的,可以使用 or 作为协议、域名或 IP 地址,以及可选的端口和 URI 作为地址。proxy_passHTTPHTTPS

上面的配置告诉 Nginx 将所有请求传递到该位置的代理服务器。/apphttp://127.0.0.1:8080

在基于 Ubuntu 和 Debian 的发行版上,服务器块文件存储在目录中,而在 CentOS 上存储在目录中。/etc/nginx/sites-available/etc/nginx/conf.d

为了更好地说明 和 指令的工作原理,让我们举一个例子:locationproxy_pass

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

    location /blog {
       proxy_pass http://node1.com:8000/wordpress/;
    }
}

如果有访问者访问,Nginx会将此请求代理给。http://example.com/blog/my-posthttp://node1.com:8000/wordpress/my-post

当代理服务器的地址包含 URI () 时,传递给代理服务器的请求 URI 将替换为指令中指定的 URI。如果在指定代理服务器的地址时没有 URI,则完整的请求 URI 将传递到代理服务器。/wordpress/

传递请求标头

当 Nginx 代理请求时,它会自动在来自客户端的代理请求中定义两个标头字段,并删除空标头。 设置为变量,并设置为关闭。HostConnectionHost$proxy_hostConnection

若要调整或设置代理连接的标头,请使用指令,后跟标头值。您可以在此处找到所有可用请求标头及其允许值的列表。如果要防止将标头传递到代理服务器,请将其设置为空字符串。proxy_set_header""

在下面的示例中,我们将标头字段的值更改为 标题字段,并通过将其值设置为空字符串来删除标头字段。Host$hostAccept-Encoding

location / {
    proxy_set_header Host $host;
    proxy_set_header Accept-Encoding "";
    proxy_pass http://localhost:3000;
}

每当修改配置文件时,都必须重新启动 Nginx 服务才能使更改生效。

将 nginx 配置为非 HTTP 代理服务器的反向代理

要将 Nginx 配置为非 HTTP 代理服务器的反向代理,可以使用以下指令:

  • fastcgi_pass- 反向代理到快速CGI服务器。
  • uwsgi_pass- 反向代理到 UWSGI 服务器。
  • scgi_pass- 反向代理到 SCGI 服务器。
  • memcached_pass- 反向代理到内存缓存服务器。

最常见的例子之一是使用 Nginx 作为 PHP-FPM 的反向代理:

server {

    # ... other directives

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }
}

常见的 nginx 反向代理选项

如今,通过HTTPS提供内容已成为标准。在本节中,我们将为您提供HTTPS Nginx反向代理配置的示例,包括推荐的Nginx代理参数和标头。

  location/ {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version  1.1;
    proxy_cache_bypass  $http_upgrade;

    proxy_set_header Upgrade           $http_upgrade;
    proxy_set_header Connection        "upgrade";
    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;
    proxy_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;
  }
  • proxy_http_version 1.1- 定义代理的 HTTP 协议版本,默认情况下设置为 1.0。对于 Websocket 和连接,您需要使用版本 1.1。keepalive
  • proxy_cache_bypass $http_upgrade- 设置不从缓存中获取响应的条件。
  • Upgrade $http_upgrade和 - 如果应用程序使用 Websocket,则这些标头字段是必需的。Connection "upgrade"
  • Host $host- 按以下优先级顺序排列的变量包含:请求行中的主机名、请求标头字段中的主机名或与请求匹配的服务器名称。$hostHost
  • X-Real-IP $remote_addr- 将真实的访问者远程 IP 地址转发到代理服务器。
  • X-Forwarded-For $proxy_add_x_forwarded_for- 包含客户端代理的每个服务器的 IP 地址的列表。
  • X-Forwarded-Proto $scheme- 在 HTTPS 服务器块中使用时,来自代理服务器的每个 HTTP 响应都会重写为 HTTPS。
  • X-Forwarded-Host $host- 定义客户端请求的原始主机。
  • X-Forwarded-Port $server_port- 定义客户端请求的原始端口。

结论

您已经学会了如何使用Nginx作为反向代理。我们还向您展示了如何将其他参数传递给服务器,以及如何在代理请求中修改和设置不同的标头字段。

溫馨提示:

文章標題:设置 Nginx 反向代理

文章連結:https://www.wuyanshuo.cn/5597.html

更新時間:2023年6月1日

1、本站所有資源均不添加推廣檔案或浮水印,壓縮包內若有廣告檔案和浮水印請勿輕易相信。

2、本站資源均為兩層壓縮,第一層7z(尾碼若為wys,請自行修改為7z)有解壓密碼; 第二層zip或cbz,無解壓密碼,可直接使用漫畫類軟件程式查看; 詳情可參攷解壓教程

3、本站大部分內容均收集於網絡! 若內容侵犯到您的權益,請發送郵件至:admin#wysacg.top我們將第一時間處理! 資源所需價格並非資源售賣價格,是收集、整理、編輯詳情以及本站運營的適當補貼,並且本站不提供任何免費技術支援。 所有資源僅限於參攷和學習,版權歸原作者所有!

给TA打赏
共{{data.count}}人
人已打赏
服务运维

如何在 Ubuntu 18.04 上安装 Apache

2023-6-1 11:56:25

服务运维

你应该知道的 nginx 命令

2023-6-1 14:04:27

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索