NGINX Full Version

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

自 NGINX 推出以来,15年里其人气一直稳步上升,现已成为世界上最受欢迎的 Web 服务器,并为 4 亿多个网站提供支持。因此,我们建议您相信大众的判断,使用 NGINX 来满足所有 web 服务需求,也可以将 NGINX 用作 反向代理内容缓存负载均衡器API 网关等等。

本文将指导您在亚马逊云科技 (AWS)环境中Ubuntu 20.04的平台上安装和运行 NGINX。这些设置步骤非常简便,不会影响您个人电脑的设置。本文涵盖了 NGINXNGINX Plus(包含更多企业级功能的商业版本)的教程。

如果您想深入了解 NGINX,请查阅获取包括博客文章、电子书、视频课程等更多学习资源。

本教程包含以下步骤:

访问终端

在本教程中,您需要通过一个终端来连接到 Amazon Elastic Compute Cloud (EC2) 实例。Mac 自带内置终端,但 Windows 用户需要下载 PuTTY 或类似工具。如果您更喜欢使用自己的本地终端来设置 NGINX 或 NGINX Plus 及提供 Web 内容,请直接跳至下方“设置 AWS”的部分。

在 MacOS 上访问终端

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

  1. 点击屏幕顶栏右侧的放大镜图标。

  2. 在窗口中输入 terminal,然后按 Enter 键。这时会打开一个独立的终端窗口。

在 Windows 上访问终端

Windows 没有内置终端,所以您需要从网上下载一个。我们推荐使用 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

  3. 点击打开的 EC2 仪表盘页面上的启动实例(Launch Instance)按钮。

  4. 第一步的页面上,点击 Ubuntu Server 20.04 LTS (HVM), SSD Volume Type 行中的选择(Select)按钮,并默认选择 64-bit (x86) 架构。

  5. 第二步页面上,选择 t2.micro 实例类型,在撰写本文之时该实例类型被标记为有可用的免费版本(Free tier eligible),并在默认情况下处于被选中的状态。点击下一步:配置实例详细信息(Next: Configure Instance Details)按钮。

  6. 第三步页面上,确保在网络(Network) 字段中选中您想使用的 VPC,并将自动分配公网 IP(Auto-assign Public IP)字段设为默认的使用子网设置(启用)(Use Subnet Setting (Enable)) 或者 启用(Enable)。其余设置保持默认值即可。

  7. 点击页面顶部的 6. 配置安全组(6. Configure Security Group)

  8. 第六步页面上,执行以下步骤,允许传入 HTTP 和 HTTPS 流量(默认情况下,EC2 实例只接受 SSH 流量):

    • 点击表格下方的添加规则(Add Rule)按钮,然后从类型(Type)列的下拉菜单中选择HTTP。在本教程中,我们允许从任何 IP 地址访问实例(来源(Source)列中的值为Anywhere 0.0.0.0/0, ::/0)。对于生产环境,我们建议您遵循页面上的警告,该警告要求必须使用安全组来控制访问。

    • 重复上述 HTTPS 设置步骤。

    • 点击页面底部的查看并启动(Review and Launch)按钮。

  9. 第七步页面上,点击页面底部的 启动(Launch)按钮。

  10. 在弹窗中,创建一个新的密钥对:

    • 从上面的下拉菜单中选择创建一个新密钥对

    • 选择密钥对类型。在本教程中,我们选择的是 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. 启动状态页面,点击页面底部的 查看实例(View Instances)按钮。

  14. 在打开的实例页面上14.,新实例位于表格中。为实例命名:

    • 点击名称列中的铅笔图标。

    • 编辑名称弹窗中输入名称,然后点击保存(Save)按钮。

  15. 点击屏幕顶部的连接(Connect)按钮,将弹出以下窗口。打开 SSH client 选项卡,按照说明连接实例。如果使用 Windows,请使用 .ppk 替换 .pem

安装 NGINX 软件

现在,AWS环境已设置完成,接下来将安装 NGINX 开源版NGINX Plus(可免费试用 30 天)。这两个选项都可以参照本教程,但如果您想进一步探索 NGINX Plus 的高级功能,请申请免费试用。

安装 NGINX 开源版

大多数 Linux 发行版和 BSD 派生版本都在标准软件包库中提供 NGINX 开源版,但通常不是最新版本。我们建议您直接从 nginx.org.下载 NGINX 开源版。将 NGINX 仓库添加到 Ubuntu 软件包管理器(apt)只需要几个额外的步骤。

安装 NGINX 开源版请执行下列步骤:

  1. 访问终端(见上文)

  2. 下载 NGINX 签名密钥:

    $ sudo wget http://nginx.org/keys/nginx_signing.key
  3. 添加密钥:

    $ sudo apt-key add nginx_signing.key
  4. 进入目录 /etc/apt

    $ cd /etc/apt
  5. 编辑 sources.list 文件,并在末尾添加以下文本:

    deb http://nginx.org/packages/ubuntu focal nginx
    deb-src http://nginx.org/packages/ubuntu focal nginx

    注:每行中的 focal 键字都对应 Ubuntu 20.04。如果您使用的是另一个版本的 Ubuntu,请替换其版本的 code name(例入对于 Ubuntu 18.04, 就用 bionic)。

  6. 更新 NGINX 软件:

    $ sudo apt-get update
  7. 安装 NGINX:

    $ sudo apt-get install nginx
  8. 出现提示时输入 Y

  9. 启动 NGINX:

    $ sudo systemctl start nginx.service
  10. 检查 NGINX 状态:

    $ sudo systemctl status nginx.service
  11. 继续打开网页(见下文)。

安装 NGINX Plus

  1. 如果您还没有 NGINX Plus,请注册 30 天免费试用版

  2. 当您收到通知您试用订阅可用的邮件后,请按照邮件提供的说明下载安全证书、私钥和 JWT,然后安装 NGINX Plus。

  3. 安装完成且 NGINX Plus 运行时,继续打开网页(见下文)。

打开网页

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

  1. 导航到 EC2 仪表盘上的实例(Instances) 选项卡(如果您尚未进行此操作)。(一种方法是点击顶部“控制台”导航栏中的服务(Services)计算(Compute)部分的 EC2 及左侧导航栏中的实例(Instances)。)

  2. 向右滚动表格,直到在公共 IPv4 地址列中看到实例的公共 IP 地址(如下面屏幕截图中为 3.22.51.xxx)。选择地址并将其复制到粘贴缓冲区。

  3. 打开一个新的浏览器选项卡,并将地址粘贴到地址栏。出现默认的欢迎使用 NGINX!(Welcome to nginx!)页面,这说明 NGINX 已安装运行,但还没有进行配置。

设置示例文件

安装好 NGINX 或 NGINX Plus 后,接下来就是好好利用它了!首先可以设置一些文件和目录。

  1. 进入主目录(如果您尚未进行此操作)。在以下说明中,主目录为 /home/ubuntu

  2. 创建一个名为 public_html 的目录并进入该目录。

  3. public_html 目录下,创建一个名为 index.html 的文件和一个名为 application1的目录。

  4. application1 目录下,创建一个名为 app1.html 4.的文件(写入一些文本)。

  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;	
        }
    }

    指令文档:locationrootserver

  4. 将目录更改为 ~/data/images

  5. 找到您要提供的图像并将其复制到目录(~/data/images)。例如,以下命令复制了 NGINX 标志

    $ curl -o NGINX-logo.png https://www.nginx.com/wp-content/uploads/2021/11/NGINX-logo-2020.png
  6. 重新加载 NGINX 或 NGINX Plus:

    $ sudo nginx -s reload
  7. 在一个 Web 浏览器中,请求以下 URL 的图像,其中 NGINX-server 是您的 EC2 实例的公共 IP 地址:

    https://NGINX-server/images/NGINX-logo.png

  8. 您还可以访问该应用并观察您所得到的内容:

    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;
    }

    指令文档:listenrootserver

  6. 在第一个 location 块中添加 proxy_pass 指令,以修改 server1.conf,如下所示:

    server {
        root /home/ubuntu/public_html;
    
        location /application1 {
            proxy_pass http://localhost:8080/sampleApp;
        }
    
        location /images {
            root /home/ubuntu/data;
        }
    }

    指令文档:locationproxy_passrootserver

  7. 重新加载 NGINX 或 NGINX Plus:

    $ sudo nginx -s reload
  8. 在浏览器中访问以下 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 开源版和 NGINX Plus,特别注明的除外)。