设置 Nginx 反向代理

2023-10-27

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

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

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

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

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

先决条件#

我们假设您已经安装了 NginxUbuntu , CentOS , or Debian server.

使用 Nginx 作为反向代理#

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

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

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

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

上面的配置告诉 Nginx 将所有请求传递给/app代理服务器的位置http://127.0.0.1:8080.

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

为了更好地说明如何location and proxy_pass指令有效,让我们看下面的例子:

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

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

如果有访客访问http://example.com/blog/my-post, Nginx 会将这个请求代理到http://node1.com:8000/wordpress/my-post.

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

传递请求标头#

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

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

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

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

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

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

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

  • fastcgi_pass- FastCGI 服务器的反向代理。
  • uwsgi_pass- 反向代理到 uwsgi 服务器。
  • scgi_pass- SCGI 服务器的反向代理。
  • memcached_pass- 反向代理到内存缓存 server.

最常见的示例之一是使用 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 和keepalive连接需要使用1.1版本。
  • proxy_cache_bypass $http_upgrade- 设置不从缓存中获取响应的条件。
  • Upgrade $http_upgrade and Connection "upgrade"- 如果您的应用程序使用 Websockets,则需要这些标头字段。
  • Host $host - The $host变量按以下优先顺序包含:来自请求行的主机名,或来自请求行的主机名Host请求标头字段,或与请求匹配的服务器名称。
  • 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- 定义客户端请求的原始端口。

如果您没有现有的 SSL/TLS 证书,请使用 certbot 在您的设备上获取免费的 Let’s Encrypt SSL 证书乌班图18.04 , CentOS 7 , or Debian server.

结论#

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

如果您有任何问题或反馈,请随时发表评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置 Nginx 反向代理 的相关文章

随机推荐

  • 如何在 Ubuntu 20.04 上安装 Google Cloud SDK

    谷歌云SDK 软件开发套件 提供了一组用于管理 Google Cloud Platform GCP 上托管的资源的工具 SDK 提供 gcloud gsutil 和 nd bq 命令 能够通过终端访问 Google Cloud Cloud
  • 如何在 Fedora 上安装 Apache Solr

    Apache Solr 是一个基于名为 Lucene 的 Java 库构建的开源搜索平台 Solr 是一个流行的网站搜索平台 因为它可以索引和搜索多个网站 并根据搜索查询的分类返回相关内容的推荐 本指南将引导您完成在 Fedora 系统上安
  • 如何在Linux中使用zip命令

    The zipLinux 中的命令是一个实用程序 用于将一组文件打包到 zip 存档中 zip 命令还可以用于压缩文件 从而减少它们在计算机硬盘上占用的空间 此外 zip命令可用于加密文件 使未经授权的用户更难以访问zip存档的内容 要解压
  • 如何在 Django 中设置环境变量

    Django 是基于 Python 构建的强大 Web 框架 提供开箱即用的强大功能 它最重要但有时被忽视的功能之一是它能够使用环境变量处理配置 环境变量提供了一种在代码库之外设置配置的方法 从而提供更好的安全性和灵活性 本文旨在简化 Dj
  • Linux 中的 dig 命令及有用示例

    dig 代表 Domain Information Groper 是一个用于收集域名服务器信息的命令行网络工具 dig 命令是另一个强大的工具 类似于nslookup用于诊断 dns 相关问题 我们可以使用 dig 命令查询各种 dns 服
  • 在 Apache 中启用 .htaccess 的综合指南:配置、最佳实践和用例

    htaccess 文件是一个功能强大的配置工具 允许您控制和自定义 Apache Web 服务器上网站行为的各个方面 本指南将介绍如何在 Apache 中启用 htaccess 讨论最佳实践并提供常见用例示例 以帮助您充分利用此功能 1 了
  • 如何在 cPanel/WHM 中全局启用 Gzip 压缩

    Apache mod deflate模块负责 DEFLATE 输出过滤器 允许服务器的输出在通过网络发送到客户端之前进行压缩 mod deflate是替代mod gzip它与旧版本的 Apache 一起使用 仅具有 cPanel 访问权限的
  • JavaScript 中 var、let 和 const 有什么区别?

    变量声明只是告诉计算机变量存在以及它应该以什么值开始 与其他编程语言类似 JavaScript 也允许声明变量 JavaScript 中可以使用三个关键字来声明变量 let var 和 const 每个关键字对于如何使用它们创建的变量都有不
  • 升级 Fedora:分步教程

    如果您是 Fedora 的新用户 您可能不知道它有不同的版本 Fedora 的最新版本称为 主 版本 也称为 当前 版本 这意味着开发人员发布了以前的版本 用户可以从较低版本升级到该版本 在本文中 我们将了解如何升级 Fedora 版本 继
  • 如何在 Windows 上创建可启动 CentOS U 盘

    本教程将引导您完成在 Windows 上创建可启动 CentOS USB 记忆棒的过程 您可以使用此 USB 记忆棒在任何支持从 USB 启动的计算机上启动并测试或安装 CentOS 先决条件 8GB 或更大的 USB 记忆棒驱动器 Mic
  • 如何在 Ubuntu 20.04 上安装 Go

    Go 通常被称为golang是由 Google 创建的现代开源编程语言 可让您构建可靠且高效的应用程序 Go 是一种编译语言 这意味着您需要编译源代码以创建用于运行软件的可执行文件 许多流行的应用程序 例如 Kubernetes Docke
  • 如何在 Ubuntu 20.04 上安装 Atom 文本编辑器

    Atom是由 GitHub 开发的开源 跨平台代码编辑器 它有一个内置的包管理器 嵌入Git控制 智能自动完成 语法突出显示和多个窗格 从本质上讲 Atom 是一个基于 Electron 构建的桌面应用程序 使用 HTML JavaScri
  • 创建 Linux 交换文件

    交换空间是磁盘上的空间 当物理 RAM 内存已满时使用 当 Linux 系统耗尽 RAM 时 非活动页面将从 RAM 移至交换空间 交换空间可以采用专用交换分区或交换文件的形式 大多数情况下 在虚拟机上运行 Linux 时 不存在交换分区
  • 如何在 Vim / Vi 中删除行

    Vim 或其前身 Vi 预装在大多数 Linux 发行版和 macOS 上 如果您是系统管理员或普通 Linux 用户 了解 Vim 的基础知识非常重要 很多时候 在处理文本文件时 您需要删除一行或多行 本文介绍如何在 Vim Vi 中删除
  • 如何使用 Linux 命令行文本编辑器 Nano

    使用命令行时 您经常需要创建或编辑文本文件 Vim 和 Emacs 是两个最强大和流行的命令行编辑器 它们都有一个陡峭的学习曲线 可能会让新用户感到害怕 对于那些需要简单编辑器的人来说 有 nano GNU nano 是一款适用于 Unix
  • Bash 等待命令

    wait是等待给定作业完成并返回的命令退出状态等待的命令 自从wait命令影响当前 shell 执行环境 它在大多数 shell 中作为内置命令实现 在本文中 我们将探讨 Bash 内置功能wait命令 Bash wait命令 的一般语法w
  • 如何在 Ubuntu 18.04 上安装 Nginx

    Nginx 发音为 engine x 是一个免费 开源 高性能的 HTTP 和反向代理服务器 负责处理互联网上一些最大网站的负载 Nginx 可以用作独立的 Web 服务器 也可以用作反向代理 for Apache和其他网络服务器 与 Ap
  • 如何在 Linux 中列出 Cron 作业

    Cron 是一个调度守护程序 允许您安排按指定时间间隔执行任务 这些任务称为 cron 作业 可以安排按分钟 小时 每月的某一天 每月 每周的某一天或这些的任意组合运行 Cron 作业通常用于执行系统维护操作 例如 可以设置 cron 作业
  • 如何在 Ubuntu 18.04 上安装 Eclipse IDE

    Eclipse是使用最广泛的Java集成开发环境 IDE 它可以通过插件进行扩展 也可以用于其他编程语言的开发 例如 C JavaScript 和PHP Ubuntu 存储库中提供的 Eclipse 安装包 版本 3 8 1 已过时 最简单
  • 设置 Nginx 反向代理

    反向代理是一种接受客户端请求 将请求发送到一个或多个代理服务器 获取响应并将服务器的响应传递给客户端的服务 由于其性能和可扩展性 NGINX 通常用作 HTTP 和非 HTTP 服务器的反向代理 典型的反向代理配置是将Nginx放在前面No