创建 EC2 实例并安装 Web 服务器
在此步中,创建连接到您在创建数据库实例中创建的 Amazon RDS 数据库实例的 Web 服务器。
启动 EC2 实例
首先在您的 VPC 的公有子网中创建 Amazon EC2 实例。
启动 EC2 实例
登录到Amazon Web Services Management Console,然后通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 选择 EC2 控制面板,然后选择启动实例,如下所示。
选择 Amazon Linux 2 AMI。
选择下面所示的 t2.micro 实例类型,然后选择下一步:配置实例详细信息。
在下面所示的 Configure Instance Details (配置实例详细信息) 页面上,设置以下值并将其他值保留为其默认值:
-
Network (网络):选择具有您为数据库实例选择的公有子网和私有子网的 VPC,如
vpc-中创建的 创建包含公有子网和私有子网的 VPC。identifier| tutorial-vpc -
Subnet:选择现有公有子网,例如
subnet-中创建的 为公共 Web 服务器创建 VPC 安全组。identifier| Tutorial public | us-west-2a -
自动分配公有 IP:选择 Enable (启用)。
-
选择 Next: Add Storage。
在 Add Storage (添加存储) 页面上,保留默认值并选择 Next: Add Tags (下一步: 添加标签)。
在下面所示的 Add Tags (添加标签) 页面上,选择 Add Tag (添加标签),然后为 Key (密钥) 输入
Name,并为 Value (值) 输入tutorial-web-server。
选择 Next: Configure Security Group。
在下面所示的 Configure Security Group (配置安全组) 页面上,选择 Select an existing security group (选择一个现有的安全组)。然后选择一个现有的安全组,如在
tutorial-securitygroup中创建的 为公共 Web 服务器创建 VPC 安全组。确保您选择的安全组包括 Secure Shell (SSH) 和 HTTP 访问的入站规则。
选择 Review and Launch。
在下面所示的 Review Instance Launch 页面上,确认您的设置,然后选择 Launch。
在下面所示的 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 实例。
要启动 EC2 实例,请选择 Launch Instances。在下面所示的 Launch Status 页面上,记下新 EC2 实例的标识符,例如:
i-0288d65fd4470b6a9。
选择 View Instances (查看实例) 来查找实例。
一直等到实例的实例状态显示为正在运行才能继续。
使用 PHP 安装 Apache Web 服务器
接着连接到 EC2 实例并安装 Web 服务器。
连接到 EC2 实例并安装带有 PHP 的 Apache Web 服务器
按照连接到您的 Linux 实例中的步骤连接到之前创建的 EC2 实例。
通过更新 EC2 实例上的软件,获取最新的错误修复和安全更新。要执行此操作,请使用以下命令。
注意 -y选项安装更新时不提示确认。要在安装前检查更新,请忽略该选项。sudo yum update -y更新完成后,使用
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有关更多信息,请参阅更新实例软件。
安装 Apache Web 服务器。
sudo yum install -y httpd使用下面所示的命令启动 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 测试页面。使用
systemctl命令配置 Web 服务器以使其在每次系统启动时启动。sudo systemctl enable httpd
要允许 ec2-user 在 Apache Web 服务器的默认根目录中管理文件,请修改 /var/www 目录的所有权和权限。有多种方式可以完成此任务。在本教程中,可将 ec2-user 添加到 apache 组,将 apache 目录的所有权授予 /var/www 组,并为该组指定写入权限。
设置 Apache Web 服务器的文件权限
将
ec2-user用户添加到apache组。sudo usermod -a -G apache ec2-user注销以刷新您的权限并包含新的
apache组。exit再重新登录并使用
apache命令验证groups组是否存在。groups输出看上去类似于以下内容:
ec2-user adm wheel apache systemd-journal将
/var/www目录的组所有权及其内容更改到apache组。sudo chown -R ec2-user:apache /var/www更改
/var/www及其子目录的目录权限,以添加组写入权限并设置未来创建的子目录上的组 ID。sudo chmod 2775 /var/www find /var/www -type d -exec sudo chmod 2775 {} \;递归地更改
/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 服务器
在仍连接到 EC2 实例时,将目录更改到
/var/www并创建名为inc的新子目录。cd /var/www mkdir inc cd inc在名为
inc的dbinfo.inc目录中新建文件,然后通过调用 nano(或您选择的编辑器)编辑文件。>dbinfo.inc nano dbinfo.inc将以下内容添加到
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'); ?>保存并关闭
dbinfo.inc文件。将目录更改为
/var/www/html。cd /var/www/html在名为
html的SamplePage.php目录中新建文件,然后通过调用 nano(或您选择的编辑器)编辑文件。>SamplePage.php nano SamplePage.php-
将以下内容添加到
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; } ?> -
保存并关闭
SamplePage.php文件。 打开 Web 浏览器并浏览到
http://(例如:EC2 instance endpoint/SamplePage.phphttp://ec2-55-122-41-31.us-west-2.compute.amazonaws.com/SamplePage.php)来验证 Web 服务器是否已成功连接到数据库实例。
您可以使用 SamplePage.php 将数据添加到数据库实例。您添加的数据之后将显示在该页面上。要验证数据是否已插入到表中,您可以在 Amazon EC2 实例上安装 MySQL、连接到数据库实例并查询表。
有关安装 MySQL 客户端并连接到数据库实例的信息,请参阅 连接到运行 MySQL 数据库引擎的数据库实例。
要确保您的数据库实例尽可能安全,请验证 VPC 外部的源是否无法连接到您的数据库实例。
在您完成 Web 服务器和数据库测试后,应删除您的数据库实例 和 Amazon EC2 实例。