摘要
通过以下步骤,您可以将支持 PHP 和 MySQL 的 Apache Web 服务器 (有时称为 LAMP Web 服务器或 LAMP 堆栈) 安装到您的 Amazon Linux 实例上。您可以使用此服务器来托管静态网站或部署能对数据库中的信息执行读写操作的动态 PHP 应用程序。
通过以下步骤,您可以将支持 PHP 和 MySQL 的 Apache Web 服务器 (有时称为 LAMP Web 服务器或 LAMP 堆栈) 安装到您的 Amazon Linux 实例上。您可以使用此服务器来托管静态网站或部署能对数据库中的信息执行读写操作的动态 PHP 应用程序。
要在 Amazon Linux 2 上设置 LAMP Web 服务器,请参阅教程:在 Amazon Linux 2 上安装 LAMP Web 服务器。
重要
如果您正在尝试在 Ubuntu 或 Red Hat Enterprise Linux 实例上设置一个 LAMP web 服务器,则本教程不适合您。有关其他发布版本的更多信息,请参阅其具体文档。有关 Ubuntu 上的 LAMP Web 服务器的信息,请参阅 Ubuntu 社区文档 ApacheMySQLPHP主题。
先决条件
本教程假定您已经使用 Amazon Linux AMI 启动具有可从 Internet 访问的公有 DNS 名称的新实例。有关更多信息,请参阅 步骤 1:启动实例。您还必须配置安全组,以便允许 SSH (端口 22)、HTTP (端口 80) 和 HTTPS (端口 443) 连接。有关这些先决条件的更多信息,请参阅 Amazon EC2 的设置。
使用 Amazon Linux AMI 安装和启动 LAMP Web 服务器
为确保您的所有软件包都处于最新状态,请对您的实例执行快速软件更新。此过程可能需要几分钟的时间,但必须确保您拥有最新的安全更新和缺陷修复。
-y 选项安装更新时不提示确认。如果您希望在安装前检查更新,则可以忽略该选项。
[ec2-user ~]$ sudo yum update -y
您的实例处于最新状态后,便可以安装 Apache Web 服务器、MySQL 和 PHP 软件包。
注意
一些应用程序可能与以下建议的软件环境不兼容。在安装这些软件包之前,请检查您的 LAMP 应用程序是否与其兼容。如果出现问题,您可能需要安装替代环境。有关更多信息,请参阅 我想在我的服务器上运行的应用程序软件与所安装的 PHP 版本或其他软件不兼容。
使用 yum install 命令可同时安装多个软件包和所有相关依赖项。
[ec2-user ~]$ sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd
注意
如果您收到错误 No package package-name available,则表示您的实例未与 Amazon Linux AMI 一起启动(也许您可以改用 Amazon Linux 2)。您可以使用以下命令查看 Amazon Linux 的版本。
cat /etc/system-release
要在 Amazon Linux 2 上设置 LAMP Web 服务器,请参阅教程:在 Amazon Linux 2 上安装 LAMP Web 服务器。
启动 Apache Web 服务器。
[ec2-user ~]$ sudo service httpd startStarting httpd: [ OK ]
使用 chkconfig 命令将 Apache Web 服务器配置为在每次系统启动时启动。
[ec2-user ~]$ sudo chkconfig httpd on
当您成功地使用 chkconfig 启用服务时,该命令不提供任何确认消息。
您可以通过运行以下命令验证 httpd 是否已启用:
[ec2-user ~]$ chkconfig --list httpdhttpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
在运行级别 2、3、4 和 5 下,httpd 为 on (您希望看到的状态)。
如果您尚未这样做,请添加安全规则以允许与您的实例的入站 HTTP (端口 80) 连接。默认情况下,初始化期间将为您的实例设置 launch-wizard-N 安全组。此组包含一条允许 SSH 连接的规则。
Type:HTTP
Protocol:TCP
Port Range:80
Source:Custom
打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/。
选择 Instances 并选择您的实例。
在 Security groups 下,选择 view inbound rules。
在您的默认安全组中应该看到以下规则列表:
Security Groups associated with i-1234567890abcdef0 Ports Protocol Source launch-wizard-N22 tcp 0.0.0.0/0 ✔
使用 向安全组添加规则 中的过程,添加具有以下值的新入站安全规则:
测试您的 Web 服务器。在 Web 浏览器中,键入您的实例的公有 DNS 地址 (或公有 IP 地址)。如果 /var/www/html 中没有内容,您应该会看到 Apache 测试页面。您可以使用 Amazon EC2 控制台获取实例的公有 DNS (选中 Public DNS 列;如果此列处于隐藏状态,请选择 Show/Hide Columns (齿轮状图标) 并选择 Public DNS )。
如果您未能看到 Apache 测试页面,请检查您使用的安全组是否包含允许 HTTP(端口 80)流量的规则。有关将 HTTP 规则添加到安全组的信息,请参阅向安全组添加规则。
重要
如果您使用的不是 Amazon Linux,则还可能需要在实例上配置防火墙才能允许这些连接。有关如何配置防火墙的更多信息,请参阅适用于特定分配的文档。
注意
此测试页面仅在 /var/www/html 中无内容时才显示。将内容添加到文档根目录后,您的内容将显示在您的实例的公有 DNS 地址中,而不显示在本测试页面。
Apache httpd 提供的文件保存在称为 Apache 文档根目录的目录中。Amazon Linux Apache 文档根为 /var/www/html,默认情况下归根用户所有。
[ec2-user ~]$ ls -l /var/wwwtotal 16 drwxr-xr-x 2 root root 4096 Jul 12 01:00 cgi-bin drwxr-xr-x 3 root root 4096 Aug 7 00:02 error drwxr-xr-x 2 root root 4096 Jan 6 2012 html drwxr-xr-x 3 root root 4096 Aug 7 00:02 icons drwxr-xr-x 2 root root 4096 Aug 7 21:17 noindex
要允许 ec2-user 账户操作此目录中的文件,必须修改其所有权和权限。有多种方式可以完成此任务。在本教程中,可将 ec2-user 添加到 apache 组,将 /var/www 目录的所有权授予 apache 组,并为该组指定写入权限。
设置文件权限
将您的用户 (这里指 ec2-user) 添加到 apache。
[ec2-user ~]$ sudo usermod -a -G apache ec2-user
先退出再重新登录以选取新组,然后验证您的成员资格。
退出 (使用 exit 命令或关闭终端窗口):
[ec2-user ~]$ exit
要验证您是否为 apache 组的成员,请重新连接到实例,然后运行以下命令:
[ec2-user ~]$ groupsec2-user wheel apache
将 /var/www 及其内容的组所有权更改到 apache 组。
[ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
要添加组写入权限以及设置未来子目录上的组 ID,请更改 /var/www 及其子目录的目录权限。
[ec2-user ~]$ sudo chmod 2775 /var/www[ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
要添加组写入权限,请递归地更改 /var/www 及其子目录的文件权限:
[ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
这样,ec2-user (和 apache 组的任何未来成员) 可以添加、删除和编辑 Apache 文档根目录中的文件,允许您添加内容,如静态网站或 PHP 应用程序。
(可选) 保护您的 Web 服务器
运行 HTTP 协议的 Web 服务器不为其发送或接收的数据提供传输安全。当您使用 Web 浏览器连接 HTTP 服务器时,对于您访问的 URL、您接收的网页内容以及您提交的任何 HTML 表的内容 (包括密码),窃取者可在网络路径上的任何位置看到。保护您的 Web 服务器的最佳实践是安装 HTTPS (HTTP Secure) 支持,它将使用 SSL/TLS 加密保护您的数据。
有关在您的服务器上启用 HTTPS 的信息,请参阅教程:将 Amazon Linux 上的 Apache Web 服务器配置为使用 SSL/TLS。
测试您的 LAMP Web 服务器
如果服务器已安装并运行,且文件权限设置正确,则 ec2-user 账户应该能够在 /var/www/html 目录 (可从 Internet 访问) 中创建 PHP 文件。
在 Apache 文档根目录中创建一个 PHP 文件。
[ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
尝试运行该命令时,如果出现“Permission denied (权限被拒绝)”错误,请尝试先注销,再重新登录,以获取您在 设置文件权限 中配置的适当组权限。
在 Web 浏览器中,键入您刚刚创建的文件的 URL。此 URL 是实例的公用 DNS 地址,后接正斜杠和文件名。例如:
http://my.public.dns.amazonaws.com/phpinfo.php
您应该会看到 PHP 信息页面:
如果您未看到此页面,请验证上一步中是否已正确创建 /var/www/html/phpinfo.php 文件。您也可以使用以下命令验证是否安装了所有必需的程序包。第二列中的程序包版本不需要与此示例输出匹配。
[ec2-user ~]$ sudo yum list installed httpd24 php70 mysql56-server php70-mysqlndLoaded plugins: priorities, update-motd, upgrade-helper Installed Packages httpd24.x86_64 2.4.25-1.68.amzn1 @amzn-updates mysql56-server.x86_64 5.6.35-1.23.amzn1 @amzn-updates php70.x86_64 7.0.14-1.20.amzn1 @amzn-updates php70-mysqlnd.x86_64 7.0.14-1.20.amzn1 @amzn-updates
如果输出中未列出任何必需的程序包,请使用 sudo yum install package 命令安装它们。
删除 phpinfo.php 文件。尽管此信息可能很有用,但出于安全考虑,不应将其传播到 Internet。
[ec2-user ~]$ rm /var/www/html/phpinfo.php
确保数据库服务器的安全
MySQL 服务器的默认安装提供有多种功能,这些功能对于测试和开发都很有帮助,但对于产品服务器,应禁用或删除这些功能。mysql_secure_installation 命令可引导您设置根密码并删除安装中的不安全功能。即使您不打算使用 MySQL 服务器,我们也建议执行此步骤。
启动 MySQL 服务器。
[ec2-user ~]$ sudo service mysqld startInitializing MySQL database: ... PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! ... Starting mysqld: [ OK ]
运行 mysql_secure_installation。
[ec2-user ~]$ sudo mysql_secure_installation
键入当前根密码。默认情况下,根账户没有设置密码。按 Enter。
键入 Y 设置密码,然后键入两次安全密码。有关创建安全密码的更多信息,请访问 https://identitysafe.norton.com/password-generator/。确保将此密码存储在安全位置。
注意
设置 MySQL 根密码仅是保护数据库的最基本措施。在您构建或安装数据库驱动的应用程序时,您通常可以为该应用程序创建数据库服务用户,并避免使用根账户执行除数据库管理以外的操作。
在提示时,键入根账户的密码。
键入 Y 删除匿名用户账户。
键入 Y 禁用远程根登录。
键入 Y 删除测试数据库。
键入 Y 重新加载权限表并保存您的更改。
(可选) 如果您不打算立即使用 MySQL 服务器,请停止它。您可以在需要时再次重新启动。
[ec2-user ~]$ sudo service mysqld stopStopping mysqld: [ OK ]
(可选) 如果您希望每次启动时 MySQL 服务器都启动,请键入以下命令。
[ec2-user ~]$ sudo chkconfig mysqld on
现在,您应该有了一个功能完善的 LAMP Web 服务器。如果您将内容添加到 Apache 文档根目录 (位于 /var/www/html),您应该能够在您的实例的公有 DNS 地址中看到该内容。
(可选) 安装 phpMyAdmin
phpMyAdmin 是一种基于 Web 的数据库管理工具,可用于在 EC2 实例上查看和编辑 MySQL 数据库。按照下述步骤操作,在您的 Amazon Linux 实例上安装和配置 phpMyAdmin。
重要
除非您在 Apache 中启用了 SSL/TLS,否则我们不建议您使用 phpMyAdmin 访问 LAMP 服务器;如果您使用 phpMyAdmin,您的数据库管理员密码和其他数据将无法安全地通过 Internet 传输。有关开发人员提供的安全建议,请参阅保护 phpMyAdmin 安装。有关在 EC2 实例上保护 Web 服务器的常规信息,请参阅教程:将 Amazon Linux 上的 Apache Web 服务器配置为使用 SSL/TLS。
注意
Amazon Linux 包管理系统当前不支持 PHP 7 环境中的 phpMyAdmin 自动安装。本教程介绍如何手动安装 phpMyAdmin。
使用 SSH 登录您的 EC2 实例。
安装所需的依赖项。
[ec2-user ~]$ sudo yum install php70-mbstring.x86_64 php70-zip.x86_64 -y
重启 Apache。
[ec2-user ~]$ sudo service httpd restartStopping httpd: [ OK ] Starting httpd: [ OK ]
导航到位于 /var/www/html 的 Apache 文档根。
[ec2-user ~]$ cd /var/www/html[ec2-user html]$
从 https://www.phpmyadmin.net/downloads 选择最新 phpMyAdmin 发行版的源软件包。要将文件直接下载到您的实例,请复制链接并将其粘贴到 wget 命令,如本示例中所述:
[ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
使用以下命令创建 phpMyAdmin 文件夹并将程序包提取到其中。
[ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
删除 phpMyAdmin-latest-all-languages.tar.gz tarball。
[ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
(可选) 如果 MySQL 服务器未运行,请立即启动它。
[ec2-user ~]$ sudo service mysqld startStarting mysqld: [ OK ]
在 Web 浏览器中,键入 phpMyAdmin 安装的 URL。此 URL 是实例的公有 DNS 地址 (或公有 IP 地址),后接正斜杠和您安装目录的名称。例如:
http://my.public.dns.amazonaws.com/phpMyAdmin
您应该会看到 phpMyAdmin 登录页面:
使用您先前创建的 root 用户名和 MySQL 根密码登录到 phpMyAdmin 安装。
您的安装仍需进行配置,然后才能投入使用。要配置 phpMyAdmin,您可以手动创建配置文件、使用设置控制台或者结合这两种方法。
有关使用 phpMyAdmin 的信息,请参阅 phpMyAdmin 用户指南。
本部分提供了解决在设置新 LAMP 服务器时可能遇到的常见问题的建议。
执行以下检查以查看您的 Apache Web 服务器是否正在运行且可以访问。
Web 服务器正在运行吗?
您可以通过运行以下命令验证 httpd 是否已启用:
[ec2-user ~]$ chkconfig --list httpdhttpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
在运行级别 2、3、4 和 5 下,httpd 为 on (您希望看到的状态)。
如果 httpd 进程未运行,请重复使用 Amazon Linux AMI 安装和启动 LAMP Web 服务器 中描述的步骤。
防火墙是否配置正确?
如果您未能看到 Apache 测试页面,请检查您使用的安全组是否包含允许 HTTP(端口 80)流量的规则。有关将 HTTP 规则添加到安全组的信息,请参阅向安全组添加规则。
本教程建议安装最新版本的 Apache HTTP Server、PHP 和 MySQL。在安装其他 LAMP 应用程序之前,请检查其要求以确认它们与已安装的环境兼容。如果不支持最新版本的 PHP,则可以 (并且完全安全) 降级到较旧的受支持配置。您还可以并行安装 PHP 的多个版本,至少可以解决部分兼容性问题。有关如何从安装的多个版本 PHP 中选择其一配置为首选项的信息,请参阅 Amazon Linux AMI 2016.09 发布说明。
如何降级
本教程的以前版本经过良好测试,需要以下核心 LAMP 程序包:
httpd24
php56
mysql55-server
php56-mysqlnd
如果您已按照本教程开头的建议安装了最新的软件包,您必须首先卸载如下这些软件包和其他依赖项:
[ec2-user ~]$ sudo yum remove -y httpd24 php70 mysql56-server php70-mysqlnd perl-DBD-MySQL56
其次,安装替代环境:
[ec2-user ~]$ sudo yum install -y httpd24 php56 mysql55-server php56-mysqlnd
如果您以后决定升级到建议的环境,您必须先删除自定义软件包和依赖项:
[ec2-user ~]$ sudo yum remove -y httpd24 php56 mysql55-server php56-mysqlnd perl-DBD-MySQL55
现在,您可以如前所述安装最新版的软件包。