LEMP代表Linux、Nginx 、MySQL、 PHP,是LAMP堆栈的轻量级变体,包括Apache而不是Nginx。您会注意到它不是作为LNMP编写的,而是由于Nginx(Engine-X)这个词的发音。
LEMP消耗的资源远远少于LAMP堆栈,因此对于廉价的VPS机器和低端盒子来说更加适合。根据基准测试,它在重负载下的速度要快2.5倍。此外,为了加快速度,我们将安装MariaDB而不是MySQL,因为它更快,但仍然与原始MySQL完全兼容。
我们要覆盖什么
安装Nginx
Nginx配置基础知识
设置防火ABC-XYZ
安装和配置MariaDB
安装最新的PHP
配置Nginx以提供PHP文件
测试已安装的堆栈
(使用域)使用Let的加密证书保护站点
先决条件
我们将在Debian 9上安装和设置LEMP堆栈:
从一个干净的VPS开始
至少512Mb的RAM
15Gb的可用磁盘空间
您将需要root用户访问权限
您必须为您的域(本教程中的example.com)设置DNS记录,以便指向您的VPS才能安装Let的加密证书。如果您没有,请改为访问您的IP地址并跳过最后一步。
第1步:安装Nginx
安装和防火ABC-XYZ设置
首先,以root身份或以sudo权限登录到您的服务器。 然后,更新包管理器的缓存:
sudo apt update
运行以下命令安装Nginx:
sudo apt install nginx -y
Nginx现已安装。 在浏览器中转到您的域(如果没有域名,则转到IP地址)。 将显示默认的Nginx欢迎页面:
这意味着Nginx已成功安装。 通过systemctl启用它以在每次服务器启动时启动它:
sudo systemctl enable nginx
为了最大限度地提高安全性,您现在将安装ufw(简单防火ABC-XYZ)并将其配置为允许HTTP,HTTPS,FTP和SSH连接,并拒绝所有其他连接:
sudo apt install ufw -y
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw allow SSH
sudo ufw allow ftp
通过运行启用它(使其激活):
sudo ufw enable
在询问时回答y,并在浏览器中重新加载该站点。 如果您仍然看到相同的欢迎页面,则表明您已正确配置防火ABC-XYZ。 如果显示错误(例如拒绝访问),请禁用防火ABC-XYZ:
sudo ufw禁用
并检查其配置:
sudo ufw status
您将看到已启用的配置文件列表。 如果您没有看到上面的那些,请重新运行命令并再次启用它。
配置目录
在Debian 9上,Nginx将其配置文件存储在/ etc / nginx下,服务静态文件的默认目录是/ usr / share / nginx / html。 当我们需要更改配置并添加新文件时,这将在后面的步骤中变得很重要。
第2步:安装MariaDB
安装MariaDB(默认情况下可用于apt):
sudo apt安装mysql-server -y
安装完成后启动它:
sudo systemctl启动mysql
为了保持与原始MySQL产品的完全兼容性,MariaDB响应mysql命令。
安装MariaDB之后,必须运行一个脚本(称为mysql_secure_installation)来保护数据库:
sudo mysql_secure_installation
当它询问您当前的root密码时,请按Enter键,因为这是您第一次配置它。 然后,为root用户输入新密码并回答y以删除匿名用户。 如果您不打算从服务器外部访问数据库,请回答下一个问题,否则键入n。 输入y或按Enter键以查看随后的所有问题。
尝试通过运行连接到它:
sudo mysql -u root -p
出现提示时,输入您刚设置的root密码。
你会看到mysql提示符:
意味着MariaDB正常工作并且得到了适当的保护。 输入exit退出控制台。
第3步:安装PHP
您现在将安装PHP 7.0,默认情况下在Debian 9上可用。
要安装PHP 7.0,请运行:
sudo apt安装php-fpm php-mysql
然后,安装您最有可能需要的其他PHP扩展:
sudo apt安装php-mysql php-mbstring php-dev php-gd php-pear php-zip php-xml php-curl -y
要将刚刚安装的PHP版本设置为系统范围的默认版本,请运行以下命令:
sudo update-alternatives --set php /usr/bin/php7.0
现在检查可用PHP的版本:
sudo php --version
你会看到版本是7.0,应该是。
第4步:配置Nginx以提供PHP内容
PHP已安装且工作正常,但我们现在必须配置Nginx才能使用它,因为它不会自动执行(与Apache不同)。
如步骤1中所述,Nginx将其配置文件存储在/ etc / nginx下。 当前启用的配置(将由Nginx应用)存储在名为sites-enabled的文件夹中。 同样,可用但未启用(因此无法从Internet访问)的站点存储在名为sites-available的文件夹中。 我们将编辑默认启用的站点的配置。
删除默认配置文件,因为我们不需要它:
rm / etc / nginx / sites-enabled / default
可以在/ etc / nginx / sites-available / default中找到默认站点配置的副本。
创建一个新的配置文件进行编辑:
nano / etc / nginx / sites-enabled / default
添加以下行:
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
保存并关闭文件。
上面配置的第一部分指定Nginx应该侦听HTTP端口80以获取请求。 然后它将服务文件的根文件夹设置为/ var / www / html(这是您存储网站文件的位置)并告诉Nginx首先尝试提供PHP文件(而不是HTML)。
显示的配置的其余部分告诉Nginx如何在请求时调用PHP,并拒绝访问源自Apache Web服务器的.htaccess和类似文件。 它们不被Nginx使用,不应该提供给用户,因为它们可能包含一些敏感信息。
重新启动Nginx以使更改生效:
sudo systemctl重启nginx
尝试在浏览器中重新加载您的站点(或IP地址)。 您应该像以前一样看到相同的Nginx默认欢迎页面。
要测试PHP呈现是否有效,请在/ var / www / html中创建一个PHP文件:
sudo nano /var/www/html/index.php
将以下内容放入其中:
<?PHP
phpinfo();
?>
保存并关闭文件。
phpinfo()函数输出有关PHP安装的非常详细的信息。
在浏览器中重新加载该站点。 这一次,如果一切顺利,你会看到类似这样的页面:
如果您看到502 Bad Gateway错误,请检查上面配置中的fastcgi_pass行(PHP版本可能不同,但不太可能)。
请务必立即删除该文件,因为它会显示许多敏感信息:
rm /var/www/html/index.php
第5步:使用Let的加密保护您的域
如果您拥有完全注册并指向服务器的域名,则可以使用免费的Let's Encrypt TLS证书保护域名。 这样做的好处是,您将拥有HTTPS访问权限,并且所有浏览器中的域名旁边都会显示一个挂锁。
我们将使用Certbot生成和配置加密证书,Certbot是为此目的而创建的免费程序。 让加密证书在90天后过期,Certbot会在确定时间(默认为每60天)时自动续订,因此您根本不必担心它们。
要安装Certbot,首先需要通过运行以下命令启用Debian Backports存储库:
secho "deb http://ftp.debian.org/debian stretch-backports main" |
sudo tee /etc/apt/sources.list.d/backports.list
更新包管理器缓存:
sudo apt update
然后,安装Certbot:
sudo apt install certbot python-certbot-nginx -t stretch-backports -y
完成后,运行Certbot:
sudo certbot --nginx --rsa-key-size 4096
输入您知道要检查的电子邮件地址,然后输入A来同意服务条款。如果您想订阅EFF的新闻通讯,请按Y,然后输入您的域名。然后,Certbot会询问您是否要将所有流量重定向到HTTPS - 您这样做,因此输入2。
您将收到一条祝贺消息,这意味着您的域现在使用来自Let's Encrypt的免费HTTPS证书进行保护。再次在浏览器中刷新您的域名。挂锁将显示在您站点地址的左侧,这意味着连接已加密。如果需要,您可以通过SSL服务器测试运行您的站点,并看到您将获得A或更高。
接下来你能做什么
您现在已在Debian 9服务器上安装并配置了LEMP堆栈。您现在可以在其上托管您的PHP网站,并且他们可以访问MariaDB数据库。例如,您可以安装WordPress,Joomla,Drupal,Moodle或任何其他可能需要访问数据库的PHP应用程序,它将使用足够的进一步配置。