教程:在 Amazon Linux 上安装 LAMP Web 服务器
通过以下步骤,您可以将支持 PHP 和 MySQL 的 Apache Web 服务器 (有时称为 LAMP Web 服务器或 LAMP 堆栈) 安装到您 Amazon Linux 实例上。您可以使用此服务器来托管静态网站或部署能对数据库中的信息执行读写操作的动态 PHP 应用程序。
先决条件
本教程假定您已经启动具有可从 Internet 访问的公有 DNS 名称的新实例。有关更多信息,请参阅 步骤 1:启动实例。还必须将安全组配置为允许 SSH
(端口 22)、HTTP
( (口 80) 和 HTTPS
(端口 443) 连接。有关这些先决条件的更多信息,请参阅 Amazon EC2 的设置。
Important
如果您尝试在 Ubuntu 实例上设置 LAMP Web 服务器,则本教程不适合您。这些过程适用于 Amazon Linux。有关其他发布版本的更多信息,请参阅其具体文档。有关 Ubuntu 上的 LAMP Web 服务器的信息,请参阅 Ubuntu 社区文档 ApacheMySQLPHP 主题。
在 Amazon Linux 上安装和启动 LAMP Web 服务器
- 连接到您的实例。
- 为确保您的所有软件包都处于最新状态,请对您的实例执行快速软件更新。此过程可能需要几分钟的时间,但必须确保您拥有最新的安全更新和缺陷修复。
Note
-y
选项安装更新时不提示确认。如果您希望在安装前检查更新,则可以忽略此选项。[ec2-user ~]$
sudo yum update -y
- 您的实例处于最新状态后,便可以安装 Apache Web 服务器、MySQL 和 PHP 软件包。使用 yum install 命令可同时安装多个软件包和所有相关依赖项。
[ec2-user ~]$
sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd
- 启动 Apache Web 服务器。
[ec2-user ~]$
sudo service httpd start
Starting httpd: [ OK ] - 使用 chkconfig 命令将 Apache Web 服务器配置为在每次系统启动时启动。
[ec2-user ~]$
sudo chkconfig httpd on
Tip
当您成功地使用 chkconfig 启用服务时,此命令不提供任何确认消息。
您可通过运行以下命令验证 httpd 是否启用:
[ec2-user ~]$
chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off在此处,httpd 在运行级别 2、3、4 和 5 (您需要查看的运行级别) 为
on
。 - 测试您的 Web 服务器。在 Web 浏览器中,输入您实例的公有 DNS 地址 (或公有 IP 地址),您应该可以看到 Apache 测试页面。您可以使用 Amazon EC2 控制台获取实例的公有 DNS (查看 Public DNS 列;如果此列处于隐藏状态,请选择 Show/Hide,然后选择 Public DNS)。
Tip
如果您未能看到 Apache 测试页面,请检查您使用的安全组是否包含允许
HTTP
(端口 80) 流量的规则。有关将HTTP
规则添加到您安全组的信息,请参阅 向安全组添加规则。Important
如果您使用的不是 Amazon Linux,则还可能需要在实例上配置防火墙才能允许这些连接。有关如何配置防火墙的更多信息,请参阅适用于特定分配的文档。
::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::0Note
该测试页面仅在
/var/www/html
无内容时显示。将内容添加到文档根目录后,您的内容将显示在您实例的公有 DNS 地址中,而不显示在本测试页面。
Apachehttpd 提供的文件保存在称为 Apache 文档根目录的目录中。Amazon Linux Apache 文档根目录是 /var/www/html
,默认情况下归 root
所有。
[ec2-user ~]$ ls -l /var/www
total 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
要允许 ec2-user
操作此目录中的文件,您需修改其所有权和权限。有多种方法可以完成此任务;在本教程中,您可以将 www
组添加到您的实例,然后赋予该组 /var/www
目录的所有权并为该组添加写入权限。随后,该组的所有成员都将能够为 Web 服务器添加、删除和修改文件。
设置文件权限
- 将
www
组添加到您的实例。[ec2-user ~]$
sudo groupadd www
- 将您的用户 (这里指
ec2-user
) 添加到www
。[ec2-user ~]$
sudo usermod -a -G www
ec2-user
Important
您必须先退出,再重新登录,然后才能接受新组。您可以使用 exit 命令,也可以关闭终端窗口。
- 先退出,再重新登录,然后验证您是否为
www
组的成员。- 退出。
[ec2-user ~]$
exit
- 重新连接到实例,然后运行以下命令,以验证您是否为
www
组的成员。[ec2-user ~]$
groups
ec2-user wheel www
- 退出。
- 将
/var/
及其内容的组所有权更改到www
组。[ec2-user ~]$
sudo chown -R root:www /var/www
- 更改
/var/www
及其子目录的目录权限,以添加组写入权限和设置未来子目录上的组 ID。[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
(以及 www
组的任何未来成员) 可以在 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
Tip
尝试运行此命令时,如果出现“
Permission denied
”错误,请尝试先退出,再重新登录,以接受您在 设置文件权限 中配置的适当组权限。 - 在 Web 浏览器中,输入您刚刚创建的文件的 URL。此 URL 是实例的公用 DNS 地址,后接正斜杠和文件名。例如:
http://
my.public.dns.amazonaws.com
/phpinfo.php您应该可以看到 PHP 信息页面:
::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::1Note
如果您未看到此页面,请验证上一步中是否已正确创建
/var/www/html/phpinfo.php
文件。您也可以使用以下命令验证是否安装了所有必需的程序包 (第二列中的程序包版本不需要与此示例输出匹配):[ec2-user ~]$
sudo yum list installed httpd24 php70 mysql56-server php70-mysqlnd
Loaded 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 服务器的默认安装提供有多种功能,这些功能对于测试和开发都很有帮助,但对于产品服务器,应禁用或删除这些功能。mysql_secure_installation 命令可引导您设置根密码并删除安装中的不安全功能。即使您不打算使用 MySQL 服务器,执行此步骤也是一个不错的建议。
- 启动 MySQL 服务器。
[ec2-user ~]$
sudo service mysqld start
Initializing 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
- 在系统提示时,输入
root
账户的密码。- 输入当前
root
密码。默认情况下,root
账户没有设置密码,因此按 Enter。 - 键入 Y 设置密码,然后输入两次安全密码。有关创建安全密码的更多信息,请参阅 http://www.pctools.com/guides/password/。确保将此密码存储在安全位置。
Note
设置 MySQL 根密码仅是保护数据库的最基本措施。在您构建或安装数据库驱动的应用程序时,您通常可以为该应用程序创建数据库服务用户,并避免使用根账户执行除数据库管理以外的操作。
- 输入当前
- 键入 Y 删除匿名用户账户。
- 键入 Y 禁用远程
root
登录。 - 键入 Y 删除测试数据库。
- 键入 Y 重新加载权限表并保存您的更改。
- 在系统提示时,输入
- (可选) 如果不打算立即使用 MySQL 服务器,请停止。您可以在需要时再次重新启动该服务器。
[ec2-user ~]$
sudo service mysqld stop
Stopping mysqld: [ OK ] - (可选) 如果您希望每次启动时 MySQL 服务器都启动,请输入以下命令。
[ec2-user ~]$
sudo chkconfig mysqld on
现在,您应该有了一个功能完善的 LAMP Web 服务器。如果您将内容添加到位于 /var/www/html
的 Apache 文档根目录,您应该能够在实例的公有 DNS 地址处看到这些内容。
(可选) 安装 phpMyAdmin
phpMyAdmin 是一种基于 Web 的数据库管理工具,可用于在 EC2 实例上查看和编辑 MySQL 数据库。按照以下步骤操作可在您的 Amazon Linux 实例上安装和配置 phpMyAdmin。
Important
除非您在 Apache 中启用了 SSL/TLS,否则我们不建议您使用 phpMyAdmin 访问 LAMP 服务器;如果您使用 phpMyAdmin,您的数据库管理员密码和其他数据将无法安全地通过 Internet 传输。有关在 EC2 实例上配置安全的 Web 服务器的信息,请参阅教程:将 Amazon Linux 上的 Apache Web 服务器配置为使用 SSL/TLS。
Note
这些说明假定已在 Amazon Linux 和 Extra Packages for Enterprise Linux (EPEL) 中指定同一默认 PHP 版本。如果您遇到与 EPEL 软件包有关的兼容性问题,建议您手动安装 phpMyAdmin。有关最新版本,请参阅 phpMyAdmin 下载页面。确保验证安装要求是否与您的 Amazon Linux (或其他 Linux) 实例的环境相匹配。
- 在您的实例上从 Fedora 项目启用 Extra Packages for Enterprise Linux (EPEL) 存储库。
[ec2-user ~]$
sudo yum-config-manager --enable
epel
- 安装
phpMyAdmin
软件包。[ec2-user ~]$
sudo yum install -y phpMyAdmin
Note
在系统提示时,回答
y
以导入 EPEL 存储库的 GPG 密钥。 - 将您的
phpMyAdmin
安装配置为允许从本地计算机进行访问。默认情况下,phpMyAdmin
仅允许从其运行于的服务器进行访问,这不是很有用,因为 Amazon Linux 不包括 Web 浏览器。- 通过访问服务 (例如 whatismyip.com) 查找您的本地 IP 地址。
- 编辑
/etc/httpd/conf.d/phpMyAdmin.conf
文件,然后使用以下命令将服务器 IP 地址 (127.0.0.1) 替换为您的本地 IP 地址,并将your_ip_address
替换为您在上一步中找到的本地 IP 地址。[ec2-user ~]$
sudo sed -i -e 's/127.0.0.1/
your_ip_address
/g' /etc/httpd/conf.d/phpMyAdmin.conf
- 重启 Apache Web 服务器,让新配置生效。
[ec2-user ~]$
sudo service httpd restart
Stopping httpd: [ OK ] Starting httpd: [ OK ] - 重启 MySQL 服务器,让新配置生效。
[ec2-user ~]$
sudo service mysqld restart
Stopping mysqld: [ OK ] Starting mysqld: [ OK ] - 在 Web 浏览器中,输入
phpMyAdmin
安装的 URL。此 URL 是实例的公用 DNS 地址,后接正斜杠和phpmyadmin
。例如:http://
my.public.dns.amazonaws.com
/phpmyadmin您应该可以看到 phpMyAdmin 登录页面:
::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::2Note
如果您收到
403 Forbidden
错误,请验证您是否在/etc/httpd/conf.d/phpMyAdmin.conf
文件中设置了正确的 IP 地址。您可以使用以下命令查看 Apache 访问日志,以了解 Apache 服务器实际从哪个 IP 地址获取您的请求:[ec2-user ~]$
sudo tail -n 1 /var/log/httpd/access_log | awk '{ print $1 }'
205.251.233.48
重复 Step 3.b,使用此处返回的地址替换您以前输入的错误地址;例如:
[ec2-user ~]$
sudo sed -i -e 's/
previous_ip_address
/205.251.233.48
/g' /etc/httpd/conf.d/phpMyAdmin.conf替换 IP 地址后,请使用Step 4 重新启动
httpd
服务。 - 使用您先前创建的
root
用户名和 MySQL 根密码登录到安装的phpMyAdmin
。有关使用phpMyAdmin
的更多信息,请参阅phpMyAdmin
用户指南。
故障排除
本部分提供了解决在设置新 LAMP 服务器时可能遇到的常见问题的建议。
我无法使用 Web 浏览器连接到我的服务器。
执行以下检查以查看您的 Apache Web 服务器是否正在运行且可以访问。
- Web 服务器正在运行吗? 您可通过运行以下命令验证 httpd 是否启用:
[ec2-user ~]$
chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off在此处,httpd 在运行级别 2、3、4 和 5 (您需要查看的运行级别) 为
on
。如果 httpd 进程未运行,请重复在 Amazon Linux 上安装和启动 LAMP Web 服务器 中描述的步骤。
- 防火墙是否配置正确?
如果您未能看到 Apache 测试页面,请检查您使用的安全组是否包含允许
HTTP
(端口 80) 流量的规则。有关将HTTP
规则添加到您安全组的信息,请参阅 向安全组添加规则。
我想在我的服务器上运行的应用程序软件与所安装的 PHP 版本或其他软件不兼容。
本教程建议安装最新版本的 Apache Web 服务器、PHP 和 MySQL。在安装其他 LAMP 应用程序之前,请检查其要求以确认它们与已安装的环境兼容。如果不支持最新版本的 PHP,则可以 (并且完全安全) 降级到较旧的受支持配置。本教程的以前版本经过良好测试,需要以下核心 LAMP 程序包:
httpd24
php56
mysql55-server
php56-mysqlnd
相关主题
有关将文件传输到您的实例或在 Web 服务器上安装 WordPress 博客的更多信息,请参阅以下主题:
有关本主题中使用的命令和软件的更多信息,请参阅以下网页:
- Apache Web 服务器:http://httpd.apache.org/
- MySQL 数据库服务器:http://www.mysql.com/
- PHP 编程语言:http://php.net/
chmod
命令:https://en.wikipedia.org/wiki/Chmodchown
命令:https://en.wikipedia.org/wiki/Chown
如果您想注册 Web 服务器的域名或将现有域名转移到此主机,请参阅 Amazon Route 53 开发人员指南 中的创建域和子域并将其迁移到 Amazon Route 53。