点赞
评论
收藏
分享
举报
动手教程:在AWS中将 NGINX 和 NGINX Plus 设置为 Web 服务器和反向代理
发表于2022-04-18 16:48

浏览 558

原文作者:Aidan Carson of NGINX, Robert Haynes of F5
原文链接:动手教程:在AWS中将 NGINX 和 NGINX Plus 设置为 Web 服务器和反向代理 - NGINX
转载来源:NGINX 官方网站

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

本文将指导您在亚马逊云科技 (AWS) 环境中Ubuntu 20.04的平台上安装和运行 NGINX。这些设置步骤非常简便,不会影响您个人电脑的设置。本文涵盖了 NGINXNGINX 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 没有内置终端,所以您需要从网上下载一个。我们推荐使用 PuTTY,这是一款全世界都在使用的 ssh 客户端。
  1. 下载文件并将其安装在您选择的位置,然后打开它。注意,您只有在完成下方“设置 AWS”中的步骤之后,才可以访问实际的终端。


设置AWS

在本教程中,我们假设您拥有 Amazon Virtual Private Cloud (VPC),并且可以轻松使用默认 VPC 配置。在本部分,您将通过创建 EC2 实例并与其连接来设置AWS部署。

注:以下 EC2 实例的创建过程和屏幕截图在撰写本文之时已经过验证,但AWS随时可能会更改。因此,请根据实际情况进行必要调整。

  1. AWS 主页上,登录(AWS Management)控制台,或者先创建一个新账户(如有必要)。
  2. 点击控制台标题栏中的服务(Services),然后点击计算(Compute)部分的 EC2

    Screenshot showing selection of 'EC2' on AWS 'Services' page
  3. 点击打开的 EC2 仪表盘页面上的启动实例(Launch Instance)按钮。
  4. 第一步的页面上,点击 Ubuntu Server 20.04 LTS (HVM), SSD Volume Type 行中的选择(Select)按钮,并默认选择 64-bit (x86) 架构。

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

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

    Screenshot of 'Step 3' page in Amazon EC2 instance-creation wizard
  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)按钮。Screenshot of 'Step 6' page in Amazon EC2 instance-creation wizard

  9. 第七步页面上,点击页面底部的启动(Launch)按钮。
  10. 在弹窗中,创建一个新的密钥对:
    • 从上面的下拉菜单中选择创建一个新密钥对。

    • 选择密钥对类型。在本教程中,我们选择的是 RSA。

    • 密钥对名称字段中输入一个名称,例如 NGINX_key。

    • 点击下载密钥对(Download Key Pair)按钮。

    • 如下面的动画截图所示,下载密钥对(Download Key Pair)按钮变成了复选框。选中复选框表示您可以访问私钥。

    • 点击启动实例(Launch Instances)按钮。
      Screenshot of Amazon EC2 'Select and existing key pair or create a new key pair' pop-up window

  11. 在文件管理器实用程序中,将下载的 .pem 文件(在本教程中为 NGINX_key.pem)移动到一个安全的位置。在本教程中,我们将其放在了 /Desktop/NGINX 目录中。
  12. 如果使用 Windows 终端,请按照 AWS 说明 下载 PuTTYgen 实用程序,并将 .pem 文件转换为 .ppk 文件。
  13. 启动状态页面,点击页面底部的查看实例(View Instances)按钮。
  14. 在打开的实例页面上14.,新实例位于表格中。为实例命名:
    • 点击名称列中的铅笔图标。

    • 编辑名称弹窗中输入名称,然后点击保存(Save)按钮。
      Screenshot of Amazon EC2 'Instances' page showing editing of instance name

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


安装 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)。选择地址并将其复制到粘贴缓冲区。

    Screenshot of Amazon EC2 'Instances' page showing 'Public IPv4 address' field for an instance

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

    The welcome page confirms that your NGINX reverse proxy and web server is up and running


设置示例文件

安装好 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,特别注明的除外)。


更多资源

想要更及时全面地获取NGINX相关的技术干货、互动问答、系列课程、活动资源?

请前往NGINX开源社区:


已修改于2023-03-09 08:10
本作品系原创
创作不易,留下一份鼓励
NGINX官方账号

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
NGINX官方账号
这家伙很懒还未留下介绍~
171
文章
21
问答
180
粉丝
相关文章
介绍nginx网页配置工具QQ技术交流群1:1106758598QQ技术交流群2:560797506邮箱: cym1102@qq.com官网地址: http://www.nginxwebui.cn码云: https://gitee.com/cym1102/nginxWebUIgithub: https://github.com/cym1102/nginxWebUI功能特点nginxWebUI也可管理多个nginx服务器集群,随时一键切换到对应服务器上进行nginx配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理.部署此项目后,配置nginx再也不用上网各种搜索配置代码,再也不用手动申请和配置ssl证书,只需要在本项目中进行增删改查就可方便的配置和启动nginx。技术说明本项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库项目启动时会释放一个.sqlite.db到系统用户文件夹中,注意进行备份本系统通过Let'sencrypt申请证书,使用acme.sh脚本
点赞 6
浏览 3.6k
  前三周学习了陶辉老师的“NGINX基础培训系列课程”,感觉受益良多,在这里想把一些知识点记录一下,和大家分享一下知识点,也方便日后的随手查看,温故知新。  首先,我们了解到了Nginx的版本,Nginx发布版本分为主线版本和稳定版本,区分两个版本也非常简单,主线版本版本号为单数,比如1.19,稳定版本为双数,比如1.18,今天我要说的是稳定版本,这个版本会尽量少的减少Nginx的bug问题,适用于生产环境,这里我不建议使用Nginx和其他软件一样在生产环境中落后一个或多个大版本使用,之前生产环境做过漏扫,发现我们编译自带的Nginx版本为:nginx/1.13.3(查询命令为nginx-V),结果出现了多个漏洞,四个高危和一个中危漏洞:        通过升级Nginx到稳定版最新版本后修复!  其次,是Nginx发行版本的选择,目前比较流行的有:nginx、nginxplus、Tengine、openresty、ope
点赞 1
浏览 2k
本文地址: https://www.laruence.com/2010/05/20/1495.html转载请注明出处现在普遍的Nginx+PHPcgi的做法是在配置文件中, 通过正则匹配(Nginx(PHP/fastcgi)的PATH_INFO问题)设置SCRIPT_FILENAME,今天小顿发现了一个这种方式的安全漏洞.比如,有http://www.laruence.com/fake.jpg,那么通过构造如下的URL,就可以看到fake.jpg的二进制内容:http://www.laruence.com/fake.jpg/foo.php为什么会这样呢?比如,如下的nginxconf:location~\.php($|/){     fastcgi_pass127.0.0.1:9000;     fastcgi_indexindex.php;     set$script$uri;&n
点赞 4
浏览 700