教程:在AWS中将NGINX和NGINX Plus设置为Web服务器和反向代理

NGINX | 2021年11月12日

自15多年前推出以来,NGINX日益普及,如今已成为广受欢迎的Web服务器,为超过[ngx_snippet name=’number-sites’]个网站提供支持。在这种情况下,顺应趋势是明智之选:使用NGINX满足各种Web服务需求,同时充分利用其作为反向代理、内容缓存、负载均衡器、API网关等方面的功能。

本博文将指导您通过一种简单易用且不影响个人计算机设置的方式,在Amazon Web Services(AWS)的Ubuntu 20.04上部署并运行NGINX。内容涵盖NGINX和NGINX Plus;后者是提供商业支持的版本,并具备更多企业级功能。

完成此处所述步骤后,可以继续参加为期一天的NGINX Core培训(讲师授课或点播课程),学习如何配置、管理和维护NGINX。该课程还可帮助您为参加其他讲师授课和自主学习的高级主题课程做好准备。

本教程包含以下任务的操作说明:

访问终端

在本教程中,需要使用终端连接到您的Amazon Elastic Compute Cloud(EC2)实例。Mac内置终端,而Windows用户需要下载PuTTY或同类工具。如果您希望使用自己的本地终端设置NGINX或NGINX Plus并提供Web内容,可以直接跳至“设置AWS”。

在macOS上访问终端

在Mac上,可以使用内置的terminal工具完成本教程中的所有操作。

  1. 点击屏幕顶部栏右端的放大镜图标。
  2. 在弹出框中输入“terminal”,然后按Enter键。此时会打开一个单独的终端窗口。

在Windows上访问终端

Windows未内置终端,因此需要从互联网下载。我们与AWS一样推荐PuTTY,这是一款在全球广泛使用的ssh客户端。

  1. 访问PUTTY下载页面。
  2. 将文件下载并安装到所选位置,然后打开。完成“设置 AWS”中的步骤后,才能访问实际的终端。

设置 AWS

本教程假设您已有一个Amazon Virtual Private Cloud(VPC),并可直接使用大多数账户创建时生成的默认VPC配置。本节将介绍如何创建并连接EC2实例,以设置AWS部署。

注意:以下创建EC2实例的步骤和屏幕截图在撰写本文时已经过验证,但AWS可能会对其进行更改。请根据需要调整操作说明。

  1. 在AWS主页上,登录(AWS Management)控制台;如有需要,请先创建新账户。
  2. 在控制台标题栏中单击 Services,然后在 Compute 部分中单击 EC2。
    显示在AWS“Services”页面上选择“EC2”的屏幕截图
  3. 在打开的EC2 Dashboard页面上,单击“Launch Instance”按钮。
  4. 在步骤 1页面的Ubuntu Server 20.04 LTS (HVM),SSD 卷类型行中,单击“选择”按钮,并保留默认的 64 位 (x86) 架构选项。
    Amazon EC2实例创建向导中“步骤1”页面的屏幕截图
  5. 在步骤 2页面上,选择t2.micro实例类型。截至本文撰写时,该实例类型标记为“符合免费套餐条件”,并且默认处于选中状态。单击“下一步:配置实例详细信息”按钮。
    Amazon EC2实例创建向导中“Step 2”页面的屏幕截图
  6. 在步骤 3页面,确保已在网络字段中选择要使用的VPC,并将自动分配公有IP字段设置为默认的“使用子网设置(启用)”或“启用”。其余设置保留默认值。
    Amazon EC2 实例创建向导中“Step 3”页面的屏幕截图
  7. 单击页面顶部的“6. Configure Security Group”。
  8. 在第 6 步页面上,执行以下操作以允许传入的 HTTP 和 HTTPS 流量(默认情况下,EC2 实例仅接受 SSH 流量):
    Amazon EC2实例创建向导中“第6步”页面的屏幕截图
    • 单击表格下方的“Add Rule”按钮,然后从“Type”列的下拉菜单中选择HTTP。在本教程中,我们允许从任何IP地址访问(“Source”列中的值为Anywhere 0.0.0.0/0, ::/0)。对于生产环境,建议遵循页面上的警告要求,使用安全组控制访问。
    • 对HTTPS重复上一步操作。
    • 单击页面底部的“Review and Launch”按钮。
  9. 在第 7 步页面中,点击底部的“启动”按钮。
  10. 在弹出的对话框中,创建一个新密钥对:
    Amazon EC2“选择现有密钥对或创建新密钥对”弹出窗口的屏幕截图
    • 从上方的下拉菜单中选择“Create a new key pair”。
    • 选择密钥对类型。本教程选择RSA。
    • 在“密钥对名称”字段中输入名称,例如 NGINX_key。
    • 单击“Download Key Pair”按钮。
    • 如下方动态截图所示,复选框将取代“Download Key Pair”按钮。单击该复选框,确认您可以访问私钥。
    • 单击“Launch Instances”按钮。
  11. 在文件管理器中,将下载的 .pem文件(本教程中为NGINX_key.pem)移至安全位置。本教程将其放在/Desktop/NGINX目录中。
  12. 如果使用Windows终端,请按照AWS说明下载PuTTYgen实用工具,并将.pem文件转换为.ppk文件。
  13. 在启动状态页面上,单击底部的“查看实例”按钮。
  14. 在打开的Instances页面中,新实例会显示在表格中。为其命名:
    Amazon EC2“Instances”页面的屏幕截图,显示正在编辑实例名称
    • 点击“名称”列中的铅笔图标。
    • 在编辑名称弹出框中输入名称,然后单击“保存”按钮。
  15. 点击屏幕顶部的“Connect”按钮。随后会弹出如下所示的窗口。打开SSH客户端选项卡,并按照说明连接到实例。如果使用Windows,请在命令中将“.ppk”替换为“.pem”。
    Amazon EC2“连接到实例”弹出窗口的屏幕截图

安装NGINX软件

AWS环境现已设置完毕,接下来可以安装NGINX Open Source或NGINX Plus,后者可免费试用30天。本教程同时适用于这两个选项。如果希望进一步探索NGINX Plus的高级功能,请申请免费试用。

安装 NGINX Open Source

大多数Linux发行版和BSD变体的标准软件包仓库都提供NGINX Open Source,但通常不是最新版本。建议直接从nginx.org下载NGINX Open Source。只需再执行几个步骤,即可将NGINX软件包仓库添加到Ubuntu软件包管理器(apt)中。

要安装NGINX Open Source,请按以下步骤操作:

  1. 打开终端。
  2. 下载NGINX签名密钥:
$ sudo wget http://nginx.org/keys/nginx_signing.key
  1. 添加密钥:
$ sudo apt-key add nginx_signing.key
  1. 切换到目录“/etc/apt”。
$ cd /etc/apt
  1. 编辑sources.list文件,并在末尾追加以下文本:
deb http://nginx.org/packages/ubuntu focal nginx
deb-src http://nginx.org/packages/ubuntu focal nginx
  1. 注意:这些行中的focal关键字对应Ubuntu 20.04。如果使用其他版本的Ubuntu,请将其替换为该版本发布代号的第一个单词(例如,Ubuntu 18.04对应bionic)。
  2. 更新NGINX软件:
$ sudo apt-get update
  1. 安装NGINX:
$ sudo apt-get install nginx
  1. 出现提示时,输入“Y”。
  2. 启动NGINX:
$ sudo systemctl start nginx.service
  1. 检查其状态:
$ sudo systemctl status nginx.service
  1. 继续阅读打开您的网页。

安装 NGINX Plus

  1. 如果尚未使用NGINX Plus,注册即可免费试用30天。
  2. 收到试用订阅已可用的电子邮件通知后,请按照其中的说明下载安全证书、私钥和JWT,然后安装NGINX Plus。
  3. 安装完成且NGINX Plus正在运行后,继续执行打开网页。

打开网页

现在,您已启动NGINX软件。在配置NGINX和NGINX Plus以交付网站内容之前,请先查看它们默认提供的网页。请按以下步骤操作:

  1. 如果尚未进入EC2控制面板的实例选项卡,请前往该选项卡。(一种方法是依次点击控制台顶部导航栏中的“服务”、计算部分中的“EC2”,以及左侧导航栏中的“实例”。)
  2. 在表格中向右滚动,直到在“公有 IPv4 地址”列中看到该实例的公有 IP 地址(截图中为 3.22.51.xxx)。选择该地址并将其复制到剪贴板。
    Amazon EC2“Instances”页面的屏幕截图,其中显示了某个实例的“Public IPv4 address”字段
  3. 打开一个新的浏览器标签页,将该地址粘贴到地址栏中。随后会显示默认的 Welcome to nginx! 页面,表明 NGINX 已安装并正在运行,但尚未配置。
    欢迎页面确认NGINX反向代理和Web服务器已启动并正在运行

设置示例文件

安装好可正常运行的NGINX或NGINX Plus后,就可以开始使用了。首先设置一些文件和目录。

  1. 如果当前不在主目录中,请切换到主目录。在以下说明中,主目录为/home/ubuntu。
  2. 创建一个名为“public_html”的目录,然后进入该目录。
  3. 在public_html目录中,创建一个名为index.html的文件和一个名为application1的目录。
  4. 在application1目录中,创建一个名为app1.html的文件,并在其中添加一些文本。
  5. 切换回主目录。
  6. 创建一个名为“data”的目录。
  7. 在data目录中,创建一个名为images的目录。

提供页面和图像

NGINX或NGINX Plus的第一个用例是通过网页向用户提供页面和图像。

  1. 切换到目录“/etc/nginx/conf.d”。
  2. 将default.conf重命名为default.conf.bak,以防止NGINX或NGINX Plus将其用作默认配置文件。
  3. 创建一个名为“server1.conf”的文件,并在其中添加以下配置:
server {    root /home/ubuntu/public_html;

    location /application1 {  }

    location /images {		
        root /home/ubuntu/data;	
    }
}
  1. 指令文档:location,root,server
  2. 切换到目录“~/data/images”。
  3. 找到要提供的图像,并将其复制到目录(~/data/images)中。例如,以下命令会复制NGINX徽标:
$ curl -o NGINX-logo.png https://www.nginx.com/wp-content/uploads/2021/11/NGINX-logo-2020.png
  1. 重新加载NGINX或NGINX Plus:
$ sudo nginx -s reload
  1. 在Web浏览器中通过以下URL请求该图像,其中NGINX-server是EC2实例的公网IP地址:https://NGINX-server/images/NGINX-logo.png
  2. 另外,访问该应用程序并查看返回的内容:https://NGINX-server/application1/app1.html

设置代理服务器

现在,Web服务器已正常运行,接下来学习如何配置服务器以路由流量。借助此功能,可以将流量转发到其他服务器,这是设置负载均衡的重要一步。请按以下步骤操作:

  1. 在~/data目录中,创建一个名为server2的目录。
  2. 在server2目录中,创建一个名为sampleApp的目录。
  3. 在sampleApp目录中,创建一个名为index.html的文件,并在其中添加一些文本。
  4. 切换到目录/etc/nginx/conf.d。
  5. 创建名为“server2.conf”的文件,并在其中添加以下配置:
server {    listen 8080;
    root /home/ubuntu/data/server2;
}
  1. 指令文档:listen,root,server
  2. 修改server1.conf,在第一个proxy_passlocationlocation块中添加指令,如下所示:
server {    root /home/ubuntu/public_html;

    location /application1 {
        proxy_pass http://localhost:8080/sampleApp;
    }

    location /images {
        root /home/ubuntu/data;
    }
}
  1. 指令文档:location,proxy_pass,root,server
  2. 重新加载NGINX或NGINX Plus:
$ sudo nginx -s reload
  1. 在浏览器中访问以下URL,并观察与在“提供页面和图像”中访问时相比发生了哪些变化: https://NGINX-server/application1/index.html

就是这样!现在,您已有一个运行NGINX且可正常工作的Ubuntu实例,可以将其用作代理服务器。

有关在AWS上部署NGINX和NGINX Plus以支持其他用例的说明,请参阅我们的部署指南。

总结

本教程介绍了如何设置NGINX或NGINX Plus,以便通过互联网提供文件和图像,并充当反向代理。如果希望深入了解NGINX,我们提供NGINX Core培训课程(讲师授课或按需学习),内容涵盖本教程中的主题,以及Web服务和应用交付的更多基础知识,包括负载均衡、基于位置的路由和安全性。另请参阅以下网站上的文档:nginx.org以及NGINX Plus管理指南。除非另有说明,其中的文章同时适用于NGINX Open Source和NGINX Plus。


分享
标签: F5 NGINX, 2021, Tech

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。