创建 EC2 实例并安装 Web 服务器 - Amazon Relational Database Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

创建 EC2 实例并安装 Web 服务器

在此步中,创建连接到您在创建数据库实例中创建的 Amazon RDS 数据库实例的 Web 服务器。

启动 EC2 实例

首先在您的 VPC 的公有子网中创建 Amazon EC2 实例。

启动 EC2 实例

  1. 登录 AWS 管理控制台并通过以下网址打开 Amazon EC2 控制台:https://console.amazonaws.cn/ec2/

  2. 选择 EC2 控制面板,然后选择启动实例,如下所示。

    
                                EC2 Dashboard
  3. 选择 Amazon Linux 2 AMI

    
                            选择一个 Amazon 系统映像
  4. 选择下面所示的 t2.micro 实例类型,然后选择下一步:配置实例详细信息

    
                                选择一个实例类型
  5. 在下面所示的 Configure Instance Details (配置实例详细信息) 页面上,设置以下值并将其他值保留为其默认值:

    
                                配置实例详细信息
  6. 选择 Next: Add Storage

  7. Add Storage (添加存储) 页面上,保留默认值并选择 Next: Add Tags (下一步: 添加标签)

  8. 在下面所示的 Add Tags (添加标签) 页面上,选择 Add Tag (添加标签),然后为 Key (密钥) 输入 Name,并为 Value (值) 输入 tutorial-web-server

    
                                Tag Instance
  9. 选择 Next: Configure Security Group

  10. 在下面所示的 Configure Security Group (配置安全组) 页面上,选择 Select an existing security group (选择一个现有的安全组)。然后选择一个现有的安全组,如在 为公共 Web 服务器创建 VPC 安全组中创建的 tutorial-securitygroup。确保您选择的安全组包括 Secure Shell (SSH) 和 HTTP 访问的入站规则。

    
                                配置安全组
  11. 选择 Review and Launch

  12. 在下面所示的 Review Instance Launch 页面上,确认您的设置,然后选择 Launch

    
                                核查实例启动
  13. 在下面所示的 Select an existing key pair or create a new key pair (选择现有密钥对或创建新密钥对) 页面上,选择 Create a new key pair (创建新密钥对),并将 Key pair name (密钥对名称) 设置为 tutorial-key-pair。选择 Download Key Pair,然后在您的本地计算机上保存密钥对文件。使用此密钥对文件连接到 EC2 实例。

    
                                选择“Existing Key Pair(现有密钥对)”或“Create a New Key Pair(创建新的密钥对)”
  14. 要启动 EC2 实例,请选择 Launch Instances。在下面所示的 Launch Status 页面上,记下新 EC2 实例的标识符,例如:i-0288d65fd4470b6a9

    
                                启动状态
  15. 选择 View Instances (查看实例) 来查找实例。

  16. 一直等到实例的实例状态显示为正在运行才能继续。

使用 PHP 安装 Apache Web 服务器

接着连接到 EC2 实例并安装 Web 服务器。

连接到 EC2 实例并安装带有 PHP 的 Apache Web 服务器

  1. 按照连接到您的 Linux 实例中的步骤连接到之前创建的 EC2 实例。

  2. 通过更新 EC2 实例上的软件,获取最新的错误修复和安全更新。要执行此操作,请使用以下命令。

    注意

    -y 选项安装更新时不提示确认。要在安装前检查更新,请忽略该选项。

    sudo yum update -y
  3. 更新完成后,使用 amazon-linux-extras install 命令安装 PHP 软件。此命令同时安装多个软件包和相关依赖项。

    sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2

    如果您收到指示 sudo: amazon-linux-extras: command not found 的错误,则表示您的实例未与 Amazon Linux 2 AMI 一起启动(也许您可以改用 Amazon Linux AMI)。您可以使用以下命令查看 Amazon Linux 的版本。

    cat /etc/system-release

    有关更多信息,请参阅更新实例软件

  4. 安装 Apache Web 服务器。

    sudo yum install -y httpd
  5. 使用下面所示的命令启动 Web 服务器。

    sudo systemctl start httpd

    您可以测试 Web 服务器是否已正确安装和启动。为此,请在 Web 浏览器的地址栏中输入 EC2 实例的公有域名系统 (DNS) 名称,例如:http://ec2-42-8-168-21.us-west-1.compute.amazonaws.com。如果 Web 服务器正在运行,您将看到 Apache 测试页面。

    如果您没有看到 Apache 测试页面,请检查您在教程:创建 Amazon VPC 以用于数据库实例中创建的 VPC 安全组的入站规则。确保入站规则包含允许用于连接到 Web 服务器的 IP 地址进行 HTTP(端口 80)访问的规则。

    注意

    Apache 测试页面仅在文档根目录 /var/www/html 中无内容时才显示。将内容添加到文档根目录后,您的内容将显示在 EC2 实例的公有 DNS 地址中,而不显示在 Apache 测试页面。

  6. 使用 systemctl 命令配置 Web 服务器以使其在每次系统启动时启动。

    sudo systemctl enable httpd

要允许 ec2-user 在 Apache Web 服务器的默认根目录中管理文件,请修改 /var/www 目录的所有权和权限。有多种方式可以完成此任务。在本教程中,可将 ec2-user 添加到 apache 组,将 apache 目录的所有权授予 /var/www 组,并为该组指定写入权限。

设置 Apache Web 服务器的文件权限

  1. ec2-user 用户添加到 apache 组。

    sudo usermod -a -G apache ec2-user
  2. 注销以刷新您的权限并包含新的 apache 组。

    exit
  3. 再重新登录并使用 apache 命令验证 groups 组是否存在。

    groups

    输出看上去类似于以下内容:

    ec2-user adm wheel apache systemd-journal
  4. /var/www 目录的组所有权及其内容更改到 apache 组。

    sudo chown -R ec2-user:apache /var/www
  5. 更改 /var/www 及其子目录的目录权限,以添加组写入权限并设置未来创建的子目录上的组 ID。

    sudo chmod 2775 /var/www find /var/www -type d -exec sudo chmod 2775 {} \;
  6. 递归地更改 /var/www 目录及其子目录中的文件的权限,以添加组写入权限。

    find /var/www -type f -exec sudo chmod 0664 {} \;

这样,ec2-user (和 apache 组的任何未来成员) 可以添加、删除和编辑 Apache 文档根目录中的文件,允许您添加内容,如静态网站或 PHP 应用程序。

注意

运行 HTTP 协议的 Web 服务器不为其发送或接收的数据提供传输安全。当您使用 Web 浏览器连接 HTTP 服务器时,对于您访问的 URL、您接收的网页内容以及您提交的任何 HTML 表的内容(包括密码),窃取者可在网络路径上的任何位置看到。保护您的 Web 服务器的最佳实践是安装 HTTPS (HTTP Secure) 支持,它将使用 SSL/TLS 加密保护您的数据。有关更多信息,请参阅在Amazon EC2用户指南中的教程:使用 Amazon Linux AMI 配置 SSL/TLS

将您的 Apache Web 服务器连接到数据库实例

接着,将内容添加到连接到 Amazon RDS 数据库实例的 Apache Web 服务器。

将内容添加到连接到数据库实例的 Apache Web 服务器

  1. 在仍连接到 EC2 实例时,将目录更改到 /var/www 并创建名为 inc 的新子目录。

    cd /var/www mkdir inc cd inc
  2. 在名为 incdbinfo.inc 目录中新建文件,然后通过调用 nano(或您选择的编辑器)编辑文件。

    >dbinfo.inc nano dbinfo.inc
  3. 将以下内容添加到 dbinfo.inc 文件。在这里,db_instance_endpoint 是不带端口的数据库实例终端节点master password数据库实例的主密码。

    注意

    我们建议将用户名和密码信息放在不属于 Web 服务器的文档根目录的文件夹中。这样做会减少您的安全信息被泄露的可能性。

    <?php define('DB_SERVER', 'db_instance_endpoint'); define('DB_USERNAME', 'tutorial_user'); define('DB_PASSWORD', 'master password'); define('DB_DATABASE', 'sample'); ?>
  4. 保存并关闭 dbinfo.inc 文件。

  5. 将目录更改为 /var/www/html

    cd /var/www/html
  6. 在名为 htmlSamplePage.php 目录中新建文件,然后通过调用 nano (或您选择的编辑器) 编辑文件。

    >SamplePage.php nano SamplePage.php
  7. 将以下内容添加到 SamplePage.php 文件:

    注意

    我们建议将用户名和密码信息放在不属于 Web 服务器的文档根目录的文件夹中。这样做会减少您的安全信息被泄露的可能性。

    <?php include "../inc/dbinfo.inc"; ?> <html> <body> <h1>Sample page</h1> <?php /* Connect to MySQL and select the database. */ $connection = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD); if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error(); $database = mysqli_select_db($connection, DB_DATABASE); /* Ensure that the EMPLOYEES table exists. */ VerifyEmployeesTable($connection, DB_DATABASE); /* If input fields are populated, add a row to the EMPLOYEES table. */ $employee_name = htmlentities($_POST['NAME']); $employee_address = htmlentities($_POST['ADDRESS']); if (strlen($employee_name) || strlen($employee_address)) { AddEmployee($connection, $employee_name, $employee_address); } ?> <!-- Input form --> <form action="<?PHP echo $_SERVER['SCRIPT_NAME'] ?>" method="POST"> <table border="0"> <tr> <td>NAME</td> <td>ADDRESS</td> </tr> <tr> <td> <input type="text" name="NAME" maxlength="45" size="30" /> </td> <td> <input type="text" name="ADDRESS" maxlength="90" size="60" /> </td> <td> <input type="submit" value="Add Data" /> </td> </tr> </table> </form> <!-- Display table data. --> <table border="1" cellpadding="2" cellspacing="2"> <tr> <td>ID</td> <td>NAME</td> <td>ADDRESS</td> </tr> <?php $result = mysqli_query($connection, "SELECT * FROM EMPLOYEES"); while($query_data = mysqli_fetch_row($result)) { echo "<tr>"; echo "<td>",$query_data[0], "</td>", "<td>",$query_data[1], "</td>", "<td>",$query_data[2], "</td>"; echo "</tr>"; } ?> </table> <!-- Clean up. --> <?php mysqli_free_result($result); mysqli_close($connection); ?> </body> </html> <?php /* Add an employee to the table. */ function AddEmployee($connection, $name, $address) { $n = mysqli_real_escape_string($connection, $name); $a = mysqli_real_escape_string($connection, $address); $query = "INSERT INTO EMPLOYEES (NAME, ADDRESS) VALUES ('$n', '$a');"; if(!mysqli_query($connection, $query)) echo("<p>Error adding employee data.</p>"); } /* Check whether the table exists and, if not, create it. */ function VerifyEmployeesTable($connection, $dbName) { if(!TableExists("EMPLOYEES", $connection, $dbName)) { $query = "CREATE TABLE EMPLOYEES ( ID int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY, NAME VARCHAR(45), ADDRESS VARCHAR(90) )"; if(!mysqli_query($connection, $query)) echo("<p>Error creating table.</p>"); } } /* Check for the existence of a table. */ function TableExists($tableName, $connection, $dbName) { $t = mysqli_real_escape_string($connection, $tableName); $d = mysqli_real_escape_string($connection, $dbName); $checktable = mysqli_query($connection, "SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_NAME = '$t' AND TABLE_SCHEMA = '$d'"); if(mysqli_num_rows($checktable) > 0) return true; return false; } ?>
  8. 保存并关闭 SamplePage.php 文件。

  9. 打开 Web 浏览器并浏览到 http://EC2 instance endpoint/SamplePage.php(例如:http://ec2-55-122-41-31.us-west-2.compute.amazonaws.com/SamplePage.php)来验证 Web 服务器是否已成功连接到数据库实例

您可以使用 SamplePage.php 将数据添加到数据库实例。您添加的数据之后将显示在该页面上。要验证数据是否已插入到表中,您可以在 Amazon EC2 实例上安装 MySQL、连接到数据库实例并查询表。

要确保您的数据库实例尽可能安全,请验证 VPC 外部的源是否无法连接到您的数据库实例

在您完成 Web 服务器和数据库测试后,应删除您的数据库实例 和 Amazon EC2 实例。

  • 要删除数据库实例,请按照 删除数据库实例 中的说明操作。您无需创建最终快照。

  • 要终止 Amazon EC2 实例,请按照 Amazon EC2 用户指南中的终止实例中的说明操作。