在本教程中,我们将在AWS EC2实例上安装Linux、Nginx、MySQL和PHP(LEMP)栈。LEMP栈是虚拟主机行业中非常流行的解决方案。它是Linux、Nginx、MySQL和PHP的组合。LEMP堆栈是LAMP堆栈的一个很好的替代品。LEMP堆栈是高性能网络应用的完美选择。有几个步骤涉及到让这个设置,所以让我们直接开始吧。
选择你的实例
这个解决方案的基础是LEMP的Linux部分。在这种情况下,这将是Ubuntu。如果你还没有运行Ubuntu服务器,并且不确定如何进行,你很幸运,因为我们最近发表了《如何在AWS EC2上创建Ubuntu服务器》以及《如何在EC2上SSH到Ubuntu服务器》。因此,第一步是遵循这两份指南,当你准备好了,我们就可以继续了。
安装Nginx网络服务器
Nginx的发音类似于Engine-X,是一个高性能的网络服务器,近年来得到了很多人的青睐。Nginx被用来向AWS云中的服务器的访问者显示网页。在Ubuntu中,APT软件包管理器是定位和安装软件的首选工具。我们可以从更新服务器上的软件包索引开始。这方面的命令是apt update。
apt update
好吧,这并没有按计划进行!为了运行apt update命令,你需要利用sudo结构。Sudo是superuser do或substitute user do的缩写,是一个运行高架提示的命令,不需要改变你的身份。因此,让我们再试一下。
sudo apt update
如果事情进展顺利,你会看到一些类似于上面的输出。好了,我们准备好安装Nginx了!要安装Nginx,我们可以使用命令sudo apt install nginx。
sudo apt install nginx
注意,就在上面,当安装工作进行时,它会暂停并询问你是否要继续,因为安装Nginx会占用一些磁盘空间。我们当然选择 "是",然后继续前进。在这一步完成后,将有一个由Nginx驱动的实时Web服务器在Ubuntu服务器上运行。爽啊
如果你想验证这一点,请检查你的EC2实例仪表板,查看这个特定的Ubuntu服务器的细节。找到公共IPv4地址,然后在你选择的网络浏览器中输入该地址。如果你成功了,你会看到熟悉的 "Welcome to nginx!"新Nginx网络服务器的闪屏。

MySQL的安装
好了,Nginx已经关闭,接下来是MySQL。LEMP栈的第二步是让MySQL在Ubuntu服务器上运行。要做到这一点,让我们使用命令sudo apt install mysql-server。
sudo apt install mysql-server
注意,与安装Nginx时一样,我们在安装MySQL软件时选择Y。现在我们应该有两个服务在运行,我们可以用service -status-all来检查。
service --status-all
任何前面有 "+"号的服务都意味着它已经安装并正在运行。我们可以看到Nginx和MySQL现在都在良好地运行。
登录到MySQL
为了验证MySQL的安装,让我们使用sudo mysql命令登录。
sudo mysql
在上面的步骤中,我们不需要使用密码,因为Ubuntu上的MySql使用auth_socket进行认证,而不是使用密码。我们很快就会看到如何添加一个用户并配置PHP和MySql一起工作。
安装PHP
从早期开始,PHP已经有了很大的进步,现在已经有了超强的性能和现代的语法,可以满足开发人员的需求。为了安装PHP,我们可以在Ubuntu终端输入sudo apt install php8.1-fpm php-mysql,就像这样。
sudo apt install php8.1-fpm php-mysql
一旦完成,你现在就可以在服务器上运行PHP了。非常好
让PHP和Nginx一起工作
Nginx使用服务器块来保存你想在互联网上提供的网站的信息。通过使用服务器块,如果你选择的话,实际上你可以从LEMP服务器上提供一个以上的域名。通常情况下,在**/var/www/html有一个默认的文件夹,它为一个网站服务。让我们用exampledomain**来配置一个新的网站(用你自己的替换)。
像这样为exampledomain设置一个根目录。
sudo mkdir /var/www/exampledomain
现在,我们可以利用$USER变量,将所有权分配给当前用户。
sudo chown -R $USER:$USER /var/www/exampledomain
现在我们需要在sites-available 目录中为我们的 exampledomain 创建一个配置文件。要做到这一点,我们可以使用nano,一个内置于大多数Linux操作系统的简单文本编辑器。命令是sudo nano /etc/nginx/sites-available/exampledomain
sudo nano /etc/nginx/sites-available/exampledomain
你会看到一个空的屏幕,但你要填上细节,如图所示。

server {
listen 80;
server_name
所有这些都准备就绪后,你现在需要保存这个文件。要在nano中这样做,你要使用ctrl+X键。当你按下这个组合键时,你会看到 "保存修改的缓冲区?"的信息。请不要惊慌。按Y键。
然后它会说 "要写入的文件名。/etc/nginx/sites-available/exampledomain"。只要在这里按回车键,文件就会被保存。
激活配置
为了激活配置,我们需要使用一个符号链接。创建符号链接的命令在这里显示。
sudo ln -s /etc/nginx/sites-available/exampledomain /etc/nginx/sites-enabled/
制作上述符号链接并不足以激活新的服务器块。你还必须使用unlink命令来解除默认配置的链接。
sudo unlink /etc/nginx/sites-enabled/default
验证Nginx的语法
为了确保Nginx配置文件中的配置是正确的,我们可以使用sudo nginx -t命令,如果有任何错误,它将显示。如果一切正常,我们会看到语法是OK的,测试也是成功的。
sudo nginx -t
为了使这些改变生效,我们需要使用sudo systemctl reload nginx来重新加载Nginx。
sudo systemctl reload nginx
测试新的服务器块
现在我们已经重启了nginx服务,让我们继续在Web浏览器中访问我们服务器的IP地址或域名。哦,不,我们看到一个403 Forbidden nginx/1.18.0(Ubuntu)的错误。

这到底是怎么回事呢?好吧,我们创建了一个目录来存放exampledomain配置的文件,但是我们从来没有把任何HTML文件放在那里。现在让我们通过放置一个简单的带有简单信息的index.html文件来解决这个问题。使用下面的命令来创建一个新文件。
nano /var/www/exampledomain/index.html
把这个标记放在文件中。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hello LEMP!</title>
</head>
<body>
<h1>Hello LEMP!</h1>
</body>
</html>
使用ctrl+X命令来保存这个文件。

在我们选择的目录下有一个有效的index.html文件,我们应该在浏览器中看到一个新的成功的页面显示,当然,这就是我们得到的结果

LEMP正在工作
那PHP呢?
为了看看PHP是否工作,我们可以用这个命令创建一个新的PHP文件。
nano /var/www/exampledomain/hellophp.php
在这个文件中放置这个简单的PHP脚本。
<?php
phpinfo();
保存这个文件后,可以用**http://server\_domain\_or\_IP/hellophp.php**在浏览器中访问它。
你应该看到与下面类似的输出。很好!现在 PHP 也开始工作了。
| PHP版本8.1.2 |
| 系统 | Linux ip-172-31-85-143 5.15.0-1011-aws #14-Ubuntu SMP Wed Jun 1 20:54:22 UTC 2022 x86_64 |
| 建立日期 | 2022年8月17日 13:08:39 |
| 构建系统 | 构建系统 |
| 服务器API | FPM/FastCGI |
| 虚拟目录支持 | 禁用 |
| 配置文件(php.ini)路径 | /etc/php/8.1/fpm |
| 已加载的配置文件 | /etc/php/8.1/fpm/php.ini |
| 扫描此目录以寻找其他的.ini文件 | /etc/php/8.1/fpm/conf.d |
| 解析的其他.ini文件 | /etc/php/8.1/fpm/conf.d/10-mysqlnd.ini, /etc/php/8.1/fpm/conf.d/10-opcache.ini, /etc/php/8.1/fpm/conf.d/10-do.ini, /etc/php/8.1/fpm/conf.d/20-calendar.ini, /etc/php/8.1/fpm/conf.d/20-ctype.ini, /etc/php/8.1/fpm/conf。d/20-exif.ini, /etc/php/8.1/fpm/conf.d/20-ffi.ini, /etc/php/8.1/fpm/conf.d/20-fileinfo.ini, /etc/php/8.1/fpm/conf.d/20-ftp.ini, /etc/php/8.1/fpm/conf.d/20-gettext.ini, /etc/php/8.1/fpm/conf.d/20-iconv.ini, /etc/php/8.1/fpm/conf.d/20-mysqli.ini, /etc/php/8.1/fpm/conf.d/20-pdo_mysql.ini, /etc/php/8.1/fpm/conf.d/20-phar.ini, /etc/php/8.1/fpm/conf.d/20-posix.ini, /etc/php/8.1/fpm/conf.d/20-readline.ini, /etc/php/8.1/fpm/conf。d/20-shmop.ini, /etc/php/8.1/fpm/conf.d/20-sockets.ini, /etc/php/8.1/fpm/conf.d/20-sysvmsg.ini, /etc/php/8.1/fpm/conf.d/20-sysvsem.ini, /etc/php/8.1fpm/conf.d/20-sysvshm.ini, /etc/php/8.1fpm/conf.d/20-tokenizer.ini |
| PHP API | 20210902 |
| PHP扩展 | 20210902 |
| Zend扩展 | 420210902 |
| Zend扩展构建 | api420210902,nts |
| PHP扩展构建 | api20210902,nts |
| 调试构建 | 没有 |
| 线程安全 | 禁用 |
| Zend信号处理 | 已启用 |
| Zend内存管理器 | 已启用 |
| Zend多字节支持 | 禁用 |
| 支持IPv6 | 已启用 |
| DTrace支持 | 可用,禁用 |
| 已注册的PHP流 | https, ftps, compress.zlib, php, file, glob, data, http, ftp, phar |
| 已注册的流套接字传输 | tcp, udp, unix, udg, ssl, tls, tlsv1.0, tlsv1.1, tlsv1.2, tlsv1.3 |
| 注册流过滤器 | zlib.*, string.rot13, string.toupper, string.tolower, convert.*, consumed, dechunk, convert.iconv.* |
| 这个程序使用了Zend脚本语言引擎: Zend Engine v4.1.2, Copyright (c) Zend Technologies with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies |
如何在AWS上安装LEMP栈 摘要
祝贺你!你现在已经有了一个完全可操作的Linux,而且是在AWS上。你现在有一个完全可操作的Linux、Nginx、MySQL和PHP(LEMP)堆栈在AWS EC2实例上运行。让我们再看一下运行中的服务以确认。
service --status-all
要了解更多关于AWS上的LEMP,请查看这些文章。
- AWS Marketplace。LEMP栈(aws.amazon.com)
- AWS LEMP栈和EFS问题 - Lance Cleveland(lance.bio)
- 教程。在亚马逊Linux上安装一个LAMP网络服务器(docs.aws.amazon.com)。
- LEMP准备运行亚马逊网络服务(AWS)的AMI(www.intuz.com)。
- WEB STACK在AWS上的实施(LAMP STACK)--敢于(www.darey.io)。
- 如何在AWS上设置LEMP栈 - edoos.asia(edoos.asia)
- 首页 | 免费网络栈 - 网络工程(www.freewebstack.com)
- AWS。使用LAMP堆栈的高可用性和弹性架构(www.linkedin.com)
- oayanda/LEMP-STACK-IMPLEMENTATION-ON-AWS - github.com(github.com)
- 用AWS RDS、LEMP堆栈安装Drupal和CiviCRM(medium.com)
- 在AWS上部署LAMP Stack | Fit-DevOps(fitdevops.in)
- 什么是LEMP栈?-GeeksforGeeks(www.geeksforgeeks.org)
- LEMP(容器栈) | TurnKey GNU/Linux(www.turnkeylinux.org)
