要在Amazon Linux AMI上设置LAMP Web服务器,请参阅教程:使用Amazon Linux AMI安装LAMP Web服务器。
重要
如果您尝试在Ubuntu或Red Hat Enterprise Linux实例上设置LAMP Web服务器,本教程将不适合您。有关其他发行版的更多信息,请参阅其特定文档。有关Ubuntu上的LAMP Web服务器的信息,请参阅Ubuntu社区文档ApacheMySQLPHP主题。
第1步:准备LAMP服务器
先决条件
本教程假设您已使用Amazon Linux 2启动了一个新实例,其公用DNS名称可从Internet访问。有关更多信息,请参阅步骤1:启动实例。您还必须已将安全组配置为允许SSH(端口22),HTTP(端口80)和HTTPS(端口443)连接。有关这些先决条件的更多信息,请参阅设置Amazon EC2。
注意
以下过程将安装Amazon Linux 2上可用的最新PHP版本,目前为PHP 7.2。如果您计划使用本教程中描述的PHP应用程序以外的PHP应用程序,则应检查它们与PHP 7.2的兼容性。
准备LAMP服务器要确保所有软件包都是最新的,请在您的实例上执行快速软件更新。此过程可能需要几分钟,但确保您拥有最新的安全更新和错误修复非常重要。
该-y选项安装更新而不要求确认。如果要在安装之前检查更新,可以省略此选项。[ec2-user ~]$ sudo yum update -y
安装lamp-mariadb10.2-php7.2和php7.2亚马逊的Linux Extras仓库拿到LAMP MariaDB的最新版本和PHP包亚马逊的Linux 2。[ec2-user ~]$ 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
要在Amazon Linux AMI上设置LAMP Web服务器,请参阅教程:使用Amazon Linux AMI安装LAMP Web服务器。
现在您的实例是最新的,您可以安装Apache Web服务器,MariaDB和PHP软件包。
使用yum install命令可以同时安装多个软件包和所有相关的依赖项。[ec2-user ~]$ sudo yum install -y httpd mariadb-server
注意
您可以使用以下命令查看这些软件包的当前版本:yum info package_name
启动Apache Web服务器。[ec2-user ~]$ sudo systemctl start httpd
使用systemctl命令将Apache Web服务器配置为在每次系统引导时启动。[ec2-user ~]$ sudo systemctl enable httpd
您可以通过运行以下命令来验证httpd是否已打开:[ec2-user ~]$ sudo systemctl is-enabled httpd
添加安全规则以允许入站HTTP(端口80)连接到您的实例(如果尚未这样做)。默认情况下, 在初始化期间为您的实例设置了启动向导N安全组。该组包含允许SSH连接的单个规则。类型:HTTP
协议:TCP
港口范围:80
来源:自定义选择Instances并选择您的实例。
在“ 安全组”下,选择“ 查看入站规则”。
您应该在默认安全组中看到以下规则列表: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(查看公共DNS列;如果隐藏此列,请选择 显示/隐藏列(齿轮形图标)并选择 公共DNS)。
如果您无法看到Apache测试页,请检查您使用的安全组是否包含允许HTTP(端口80)流量的规则。有关向安全组添加HTTP规则的信息,请参阅向安全组添加规则。
重要
如果您不使用Amazon Linux,则可能还需要在实例上配置防火墙以允许这些连接。有关如何配置防火墙的详细信息,请参阅特定分发的文档。
Apache httpd提供保存在名为Apache文档根目录的文件中。Amazon Linux Apache文档根目录/var/www/html,默认情况下由root拥有。
要允许ec2-user帐户操作此目录中的文件,您必须修改目录的所有权和权限。有很多方法可以完成这项任务。在本教程中,您将添加ec2-user到apache组中,以授予 apache组/var/www目录的所有权并为该组分配写入权限。
设置文件权限将您的用户(在本例中为ec2-user)添加到该apache组。[ec2-user ~]$ sudo usermod -a -G apache ec2-user
注销然后重新登录以获取新组,然后验证您的成员身份。注销(使用exit命令或关闭终端窗口):[ec2-user ~]$ exit
要验证apache组中的成员身份,请重新连接到您的实例,然后运行以下命令:[ec2-user ~]$ groupsec2-user adm wheel apache systemd-journal
将组的所有权/var/www及其内容更改为apache组。[ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
要添加组写入权限并在将来的子目录上设置组ID,请更改/var/www其子目录的目录权限。[ec2-user ~]$ sudo chmod 2775 /var/www && 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加密保护您的数据。
第2步:测试您的LAMP服务器
如果您的服务器已安装并正在运行,并且您的文件权限设置正确,则您的ec2-user帐户应该能够/var/www/html在Internet上提供的目录中创建PHP文件 。
测试您的LAMP服务器在Apache文档根目录中创建一个PHP文件。[ec2-user ~]$ echo "" > /var/www/html/phpinfo.php
如果在尝试运行此命令时出现“权限被拒绝”错误,请尝试注销并重新登录以获取您在“设置文件权限”中配置的正确组权限。
在Web浏览器中,键入刚刚创建的文件的URL。此URL是实例的公有DNS地址,后跟正斜杠和文件名。例如:http://my.public.dns.amazonaws.com/phpinfo.php
您应该看到PHP信息页面:
注意
如果您没有看到此页面,请验证该 /var/www/html/phpinfo.php文件是否在上一步中正确创建。您还可以使用以下命令验证是否已安装所有必需的软件包。[ec2-user ~]$ sudo yum list installed httpd mariadb-server php-mysqlnd
如果输出中未列出任何所需的软件包,请使用sudo yum install package命令安装它们。还要确认在amazon-linux-extras 命令的输出中启用了php7.2和lamp-mariadb10.2-php7.2附加功能。
删除phpinfo.php文件。虽然这可能是有用的信息,但出于安全原因,不应将其广播到互联网。[ec2-user ~]$ rm /var/www/html/phpinfo.php
您现在应该拥有功能齐全的LAMP Web服务器。如果向Apache文档根目录添加内容,则/var/www/html应该能够在实例的公共DNS地址中查看该内容。
第3步:保护数据库服务器
MariaDB服务器的默认安装有几个非常适合测试和开发的功能,但应该为生产服务器禁用或删除它们。该mysql_secure_installation命令引导您设置root密码,并从你的安装中删除不安全功能的过程。即使您不打算使用MariaDB服务器,我们也建议您执行此过程。
保护MariaDB服务器启动MariaDB服务器。[ec2-user ~]$ sudo systemctl start mariadb
运行mysql_secure_installation。[ec2-user ~]$ sudo mysql_secure_installation输入当前的root密码。默认情况下,root帐户没有设置密码。按Enter键。
键入Y以设置密码,然后键入两次安全密码。有关创建安全密码的详细信息,请参阅https://identitysafe.norton.com/password-generator/。确保将此密码存储在安全的地方。
注意
为MariaDB设置root密码只是保护数据库的最基本措施。在构建或安装数据库驱动的应用程序时,通常会为该应用程序创建数据库服务用户,并避免将root帐户用于除数据库管理之外的任何其他操作。出现提示时,键入root帐户的密码。
键入Y以删除匿名用户帐户。
键入Y以禁用远程root登录。
键入Y以删除测试数据库。
键入Y以重新加载权限表并保存更改。
(可选)如果您不打算立即使用MariaDB服务器,请将其停止。您可以在需要时重新启动它。[ec2-user ~]$ sudo systemctl stop mariadb
(可选)如果希望MariaDB服务器在每次启动时启动,请键入以下命令。[ec2-user ~]$ sudo systemctl enable mariadb
第4步:(可选)安装phpMyAdmin
phpMyAdmin是一个基于Web的数据库管理工具,可用于查看和编辑EC2实例上的MySQL数据库。按照以下步骤在phpMyAdminAmazon Linux实例上安装和配置。
重要
phpMyAdmin除非您在Apache中启用了SSL / TLS,否则我们不建议使用访问LAMP服务器; 否则,您的数据库管理员密码和其他数据将通过Internet不安全地传输。有关开发人员的安全建议,请参阅保护phpMyAdmin安装。有关在EC2实例上保护Web服务器的一般信息,请参阅教程:在Amazon Linux上配置Apache Web服务器以使用SSL / TLS。
安装phpMyAdmin安装所需的依赖项。[ec2-user ~]$ sudo yum install php-mbstring -y
重启Apache。[ec2-user ~]$ sudo systemctl restart httpd
重启php-fpm。[ec2-user ~]$ sudo systemctl restart php-fpm
导航到Apache文档根目录/var/www/html。[ec2-user ~]$ cd /var/www/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 systemctl start mariadb
在Web浏览器中,键入phpMyAdmin安装的URL。此URL是实例的公共DNS地址(或公共IP地址),后跟正斜杠和安装目录的名称。例如:http://my.public.dns.amazonaws.com/phpMyAdmin
您应该看到phpMyAdmin登录页面:
使用root您之前创建的用户名和MySQL root密码登录到phpMyAdmin安装。
在将其投入使用之前,仍必须配置您的安装。要配置phpMyAdmin,您可以手动创建配置文件,使用安装控制台或组合这两种方法。
有关使用phpMyAdmin的信息,请参阅phpMyAdmin用户指南。
故障排除
本节提供了解决在设置新LAMP服务器时可能遇到的常见问题的建议。
我无法使用网络浏览器连接到我的服务器。
执行以下检查以查看Apache Web服务器是否正在运行且可访问。
Web服务器是否正在运行?
您可以通过运行以下命令来验证httpd是否已打开:[ec2-user ~]$ sudo systemctl is-enabled httpd
如果httpd进程未运行,请重复准备LAMP服务器中描述的步骤。
防火墙是否正确配置?
如果您无法看到Apache测试页,请检查您使用的安全组是否包含允许HTTP(端口80)流量的规则。有关向安全组添加HTTP规则的信息,请参阅向安全组添加规则。