本教程的以前版本由Justin Ellingwood编写
介绍
LEMP软件是一组可用于为动态网页和Web应用程序提供服务的软件。 这是一个描述L inux操作系统的首字母缩略词,带有一个Nginx(发音像“ E ngine-X”)Web服务器。 后端数据存储在M ySQL数据库中,动态处理由P HP处理。
本指南演示了如何在Ubuntu 18.04服务器上安装LEMP。 Ubuntu操作系统负责处理第一个要求。 我们将介绍如何让其他组件进入正常运行状态。
先决条件
在完成本教程之前,您应该使用sudo
权限在您的服务器上拥有一个常规的非root用户帐户。 通过完成我们针对Ubuntu 18.04的初始服务器设置指南来设置此帐户。
一旦您的用户可用,您就可以开始本指南中概述的步骤。
第1步 - 安装Nginx Web服务器
为了向我们的网站访问者展示网页,我们将采用Nginx,一个现代化的高效Web服务器。
此过程中使用的所有软件都来自Ubuntu的默认软件包存储库。 这意味着我们可以使用apt
套件管理套件来完成必要的安装。
由于这是我们第一次使用apt
进行这个会话,所以首先更新服务器的包索引。 接下来,安装服务器:
sudo apt update
sudo apt install nginx
在Ubuntu 18.04上,Nginx配置为在安装后开始运行。
如果您正在运行ufw
防火墙,如初始安装指南中所述,您需要允许连接到Nginx。 Nginx在安装时向ufw
注册自己,所以这个过程非常简单。
建议您启用最受限制的配置文件,该配置文件仍将允许您想要的流量。 由于您尚未在本指南中为您的服务器配置SSL,因此您只需要允许端口80
上的流量。
输入以下命令启
sudo ufw allow 'Nginx HTTP'
您可以通过运行以验证更改:
sudo ufw status
该命令的输出将显示允许HTTP通信:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
通过添加新的防火墙规则,您可以通过在Web浏览器中访问服务器的域名或公共IP地址来测试服务器是否启动并运行。
如果您没有指向服务器的域名,并且您不知道服务器的公共IP地址,则可以通过运行以下命令找到它:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
这将打印出几个IP地址。 你可以在你的网页浏览器中依次尝试。
作为替代,您可以查看从互联网上的其他位置查看哪个IP地址可访问:
curl -4 icanhazip.com
输入您在网络浏览器中收到的地址,它会将您带到Nginx的默认登录页面:
http://server_domain_or_IP
如果你看到上面的页面,你已经成功安装了Nginx。
第2步 - 安装MySQL来管理站点数据
现在你已经有了一个Web服务器,你需要安装MySQL(一个数据库管理系统)来存储和管理你的站点的数据。
输入以下命令安装MySQL:
sudo apt install mysql-server-5.7
MySQL数据库软件现已安装,但其配置尚未完成。
为了确保安装,MySQL提供了一个脚本,用于询问我们是否要修改某些不安全的默认值。 输入以下命令启动脚本:
sudo mysql_secure_installation
这个脚本会要求你提供一个在MySQL系统中使用的密码。 之后,它会问你是否要配置验证VALIDATE PASSWORD PLUGIN
。
警告:启用此功能是一个判断呼叫。 如果启用,与指定条件不匹配的密码将被MySQL拒绝并出现错误。 如果您将弱密码与自动配置MySQL用户凭证的软件(例如用于phpMyAdmin的Ubuntu软件包)结合使用,这会造成问题。 禁用验证是安全的,但您应该始终使用强大,唯一的数据库凭证密码。
回答是,或者其他任何事情都可以继续而不启用。
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
如果您启用了验证,那么脚本还会要求您选择一个密码验证级别。 请记住,如果您输入2 - 表示最强级别 - 尝试设置不包含数字,大写和小写字母以及特殊字符的密码或基于常用字典单词的密码时,您将收到错误。
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
如果您启用了密码验证,则会显示现有root密码的密码强度,并询问您是否要更改该密码。 如果您对当前密码感到满意,请在提示处输入N
作为“否”
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
对于其余问题,您应该按Y
并在每个提示处按ENTER
键。 这将删除一些匿名用户和测试数据库,禁用远程root登录,并加载这些新规则,以便MySQL立即尊重我们所做的更改。
在这一点上,您的数据库系统现在已经建立,您可以继续安装PHP。
第3步 - 安装PHP进行处理
您现在已经安装了Nginx来为您的页面和MySQL安装,以存储和管理您的数据。 但是,您仍然没有任何可以生成动态内容的内容。 这是PHP进场的地方。
由于Nginx不像其他Web服务器那样包含本机PHP处理,因此您需要安装php-fpm
,它代表“fastCGI进程管理器”。 我们会告诉Nginx将PHP请求传递给这个软件进行处理。
安装此模块以及一个附加的帮助程序包,该程序包允许PHP与数据库后端进行通信。 安装将引入必要的PHP核心文件。 输入以下内容来完成此操
sudo apt install php-fpm php-mysql
您现在已经安装了PHP组件,但您需要进行轻微的配置更改以使您的设置更安全。
以root权限打开主要的php-fpm
配置文件:
sudo nano /etc/php/7.2/fpm/php.ini
在这个文件中,找到设置cgi.fix_pathinfo
的参数。 这将用分号(;)注释掉,默认设置为“1”。
这是一个非常不安全的设置,因为它告诉PHP尝试执行最近的文件,如果找不到请求的PHP文件,它可以找到它。 这可以允许用户以一种允许他们执行不应允许执行的脚本的方式制作PHP请求。
通过取消注释并将其设置为“0”来更改这两个条件,如下所示:
cgi.fix_pathinfo=0
完成后保存并关闭文件。 然后,输入以下命令重新启动您的PHP处理器
sudo systemctl restart php7.2-fpm
这将实施您所做的更改。
第4步 - 配置Nginx使用PHP处理器
目前,您已安装了所有必需的组件。 您仍然需要做的唯一配置更改是告诉Nginx使用PHP处理器来处理动态内容。
这是在服务器块级完成的(服务器块与Apache的虚拟主机类似)。 输入以下命令打开默认的Nginx服务器模块配置文件:
sudo nano /etc/nginx/sites-available/default
目前,除去注释,Nginx的默认服务器块文件如下所示:
. . .
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}
}
. . .
您需要对此服务器块进行一些更改:
- 首先,将
index.php
添加为index
指令的第一个值,以便在请求目录时提供名为index.php
文件(如果可用)。 - 修改
server_name
指令以指向您的服务器的域名或公共IP地址。 - 对于实际的PHP处理,取消注释处理PHP请求的文件段,方法是从每行的前面删除磅符号(#)。 这将是
location ~\.php$
位置块,包含fastcgi-php.conf
片段,以及与php-fpm
关联的套接字。 - 此外,使用相同的方法取消处理
.htaccess
文件的位置块的注释。 Nginx不处理这些文件。 如果这些文件中的任何一个碰巧进入文档根目录,则不应将其提供给访问者。
下面的文字突出了必须做出的改变:
. . .
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 your_server_domain_or_IP;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
. . .
最后, location ~ \.php$
块中fastcgi_pass
指令引用的文件之间可能存在差异。 您必须确保该文件的名称与实际存储在服务器上/run/php
目录中的名称一致。 要检查这一点,请保存该文件并关闭文本编辑器,然后运行以下命令:
ls /run/php/
Outputphp7.2-fpm.pid php7.2-fpm.sock
在这个例子中,你可以看到有问题的文件实际上是php 7.2 -fpm.sock
,而不是php7.0-fpm.sock
,这是location ~ \.php$
指令中列出的。 如果您的计算机上存在类似的不一致,请再次打开/etc/nginx/sites-available/default
文件并更新fastcgi_pass
指令:
sudo nano /etc/nginx/sites-available/default
. . .
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
. . .
再次保存并关闭文件。 然后,通过输入以下命令来测试您的配置文件中的语法错
sudo nginx -t
如果有任何错误报告,请返回并重新检查您的文件,然后再继续。
准备就绪后,重新加载Nginx进行必要的更改:
sudo systemctl reload nginx
这就结束了LEMP的安装和配置。 但是,确认所有组件都可以相互通信是明智的。
第5步 - 创建一个PHP文件来测试配置
现在应该完成LEMP的设置。 您可以测试它来验证Nginx能否将.php
文件正确地传递给PHP处理器。
为此,请使用文本编辑器在文档根目录中创建名为info.php
的测试PHP文件:
sudo nano /var/www/html/info.php
将下列行输入到新文件中。 这是有效的PHP代码,将返回有关您的服务器的信息:
<?php
phpinfo();
完成后,保存并关闭文件。
现在,您可以通过访问服务器的域名或公共IP地址,然后/info.php
在您的Web浏览器中访问此页面:
http://your_server_domain_or_IP/info.php
您应该看到一个由PHP生成的网页,其中包含有关您的服务器的信息:
如果你看到一个看起来像这样的页面,你已经成功地用Nginx设置了PHP处理。
验证Nginx正确呈现页面后,最好移除您创建的文件,因为它实际上可以为未经授权的用户提供关于您的配置的一些提示,以帮助他们尝试插入。如果以后需要,可以随时重新生成该文件。
现在,通过输入以下命令来删除文件:
sudo rm /var/www/html/info.php
有了这个,你现在在你的Ubuntu 18.04服务器上有了一个完全配置和运行的LEMP。
结论
LEMP是一个功能强大的平台,可让您设置和服务于您服务器上的几乎任何网站或应用程序。
您可以从这里采取一些后续步骤。 例如,你应该确保连接到你的服务器是安全的。 为此,您可以使用Let's Encrypt来保护您的Nginx安装 。 按照本指南,您将为您的服务器获得免费的TLS / SSL证书,从而允许其通过HTTPS提供内容。