简介LEMP栈是一系列用于开发动态网页和web应用的软件集合,LEMP描述了Linux操作系统、NginxwebServer、以及后端数据存储MySQL/MariaDB数据库和服务器端动态脚本语言PHP。在本教程中,我们将演示如何在Ubuntu16.04服务器中安装完整的LEMP堆栈。首先,你需要一个运行良好的Ubuntu操作系统。我使用的是虚拟机VirtualBox中安装的Ubuntu16.04LTS系统。接下来介绍一下如何安装和配置其他组件。先决条件在完成本教程之前,您应该在Ubuntu系统上拥有一个具有“sudo”权限的常规非根帐户。您可以按照教程使用Ubuntu16.04服务器进行初始设置来了解如何设置此类帐户。一旦您的常规用户帐户可用,请使用该帐户登录您的服务器。现在让我们开始按照本教程的步骤进行操作!第1步:安装Nginx网络服务器为了向我们的网站访问者显示网页,我们将使用Nginx,一种现代、高效的网络服务器。我们在安装LEMP堆栈时使用的所有组件都来自Ubuntu的默认包存储库。这意味着我们可以使用apt包管理套件来完成所有安装。由于这是我们第一次在此会话中使用apt,因此我们应该首先更新本地包索引。然后重新安装服务器:sudoapt-getupdatesudoapt-getinstallnginx在Ubuntu16.04上,Nginx在安装时开始运行配置。如果您正在运行ufw防火墙,正如我们的初始设置教程所说,您必须允许它连接到Nginx。因为Nginx在安装时注册了自己的ufw,所以安装过程相当简单。建议您启用运行所需的最严格的配置文件。由于我们还没有为我们的服务器配置SSL,对于本教程,我们只需要允许端口80上的连接。您可以通过键入以下内容启用此功能:sudoufwallow'NginxHTTP'您可以通过键入以下内容验证更改:sudoufwstatus您应该在显示的输出中看到允许的HTTP连接:OutputStatus:activeToActionFrom------------OpenSSHALLOWAnywhereNginxHTTPALLOWAnywhereOpenSSH(v6)ALLOWAnywhere(v6)NginxHTTP(v6)ALLOWAnywhere(v6)添加新的防火墙规则后,您可以通过访问服务器的域来测试服务器是否已启动并运行浏览器中的名称或公共IP地址。如果您没有指定您的服务器域名,并且您不知道您的服务器的公共IP地址,您可以通过在终端中输入以下内容之一来找到它:ipaddrshoweth0|grep网络|awk'{打印$2;}'|sed's/\/.*$//'这将打印出几个IP地址,你可以在浏览器中依次尝试每个IP。或者,您可以查看哪个IP地址可以从Internet上的其他地方访问:#eg。访问baidu.comcurl-4www.baidu.com输入你的公网IP地址或域名,应该会带你到Nginx的默认登录页面:http://server_domain_or_IP//以下两个地址是本地运行的http://localhost/http://127.0.0.1/如果看到如上图的页面,说明你已经成功安装Nginx服务器了。第2步:安装MySQL数据库现在我们有了一个Web服务器,我们需要安装MySQL,这是一个数据库管理系统,用于存储和管理我们网站的数据。您可以通过键入以下命令轻松安装:sudoapt-getinstallmysql-server您将被要求输入root(管理员)密码以在MySQL系统中使用。MySQL数据库软件现已安装,但其配置尚未完全完成。为了确保安装,我们可以运行一个简单的安全脚本,询问我们是否要修改一些不安全的默认设置。键入以下命令启动脚本:sudomysql_secure_installation您接下来将被要求输入您为MySQLroot帐户设置的密码。然后系统会询问您是否要配置VALIDATEPASSWORDPLUGIN。警告:启用此功能是一种判断调用。如果启用,不符合指定条件的密码将被MySQL拒绝并报错。如果您将弱密码与自动配置MySQL用户凭据的软件(例如phpMyAdmin的Ubuntu软件包)结合使用,这将导致问题。禁用验证是安全的,但您应该始终为数据库凭据使用强而独特的密码。输入y同意,或任何其他键取消调用。VALIDATEPASSWORDPLUGIN可用于测试密码并提高安全性。它检查密码的强度并允许用户只设置那些足够安全的密码。您想设置VALIDATEPASSWORD插件吗?按y|Y表示是,按任何其他键表示否:如果您启用验证,系统将要求您选择密码验证级别。请注意,如果输入2,最强级别,当您尝试设置任何不包含数字、大小写字母、特殊字符或基于常用词典单词的密码时,您将收到错误消息密码验证策略分为三级:LOWLength>=8MEDIUMLength>=8,numeric,mixedcase,andspecialcharactersSTRONGLength>=8,numeric,mixedcase,specialcharactersanddictionaryfilePleaseenter0=LOW,1=MEDIUMand2=STRONG:1如果启用了密码验证,则显示现有root密码的密码强度并询问您是否要更改它。如果您不想更改当前的root密码,请在提示“no”时输入n:Usingexistingpasswordforroot。密码的估计强度:100更改root的密码?((Pressy|YforYes,anyotherkeyforNo):n对于其余问题,您可以在每次提示时按Y并按Enter。这将删除一些匿名用户和测试数据库,禁用远程root登录,并加载这些新规则,以便MySQL立即启用我们所做的这些更改。此时,您的数据库系统现已设置。第3步:安装PHP我们现在已经安装了Nginx来访问我们的页面,并安装了MySQL来存储和管理我们的页面数据,但是目前我们还没有任何可以生成动态内容的东西,我们可以使用PHP来完成生成动态页面的功能,由于Nginx不包含原生的PHP处理,像其他一些web服务器一样,我们需要安装php-fpm,代表“fastCGI进程管理器”。我们配置Nginx,使其可以将PHP请求传递给php-fpm进行处理。我们安装了php-fpm组件,还将获得一个额外的帮助程序包,允许PHP进行通信与我们的数据库后端通信。安装ation将提取必要的PHP核心文件。通过键入以下命令执行此安装:sudoapt-getinstallphp-fpmphp-mysql配置PHP环境我们现在已经安装了PHP组件,但是我们需要进行一些小的配置更改以使我们的环境更安全。使用root权限打开主要的php-fpm配置文件:sudovim/etc/php/7.0/fpm/php.ini我们在这个文件中寻找的是一个名为cgi.fix_pathinfo的配置。这将用分号(;)注释掉,默认设置为“1”,并用分号(;)注释掉。这是一个非常不安全的设置,因为它告诉PHP,如果PHP请求找不到所需的文件,它将尝试执行最近的文件。基本上,这将允许用户以某种方式模拟PHP请求来执行不应执行的PHP脚本。我们将通过取消注释行并将其设置为“0”来更改此条件,如下所示:/etc/php/7.0/fpm/php.inicgi.fix_pathinfo=0完成后保存并关闭文件。现在,我们只需要重启PHP处理器:sudosystemctlrestartphp7.0-fpm重启后PHP服务将接受我们的更改。第4步:配置Nginx服务器以使用PHP现在,我们已经安装了所有必需的组件。唯一需要的配置是告诉Nginx使用PHP服务PHP文件。我们在服务器块级别执行此操作(服务器块类似于Apache的虚拟主机)。键入以下命令打开默认的Nginx服务器块配置文件:sudovim/etc/nginx/sites-available/default现在,打开默认文件后,删除所有注释,默认的Nginx服务器块文件如下所示:/etc/nginx/sites-available/defaultserver{listen80default_server;听[::]:80默认服务器;根/var/www/html;indexindex.htmlindex.htmindex.nginx-debian.html;服务器名称_;位置/{try_files$uri$uri/=404;我们需要对这些文件进行一些更改。首先,我们需要添加index.php作为index指令的第一个值,这样在请求设置的目录时就可以访问到index.php。修改server_name指令以指向我们服务器的域名或公共IP地址。对于处理PHP请求,我们只需要取消注释位于~.php$位置的代码段,其中包括fastcgi-php.conf,以及与PHP-fpm关联的接口。我们还将取消注释用于处理*.htaccees文件的代码。Nginx服务器不对这些文件负责,如果这些文件碰巧进入文档根目录,它们将不会提供给访问者。您需要进行的更改在[[]]包裹的代码下方:;">/etc/nginx/sites-available/defaultserver{listen80default_server;听[::]:80默认服务器;根/var/www/html;索引[[index.php]]索引。htmlindex.htmindex.nginx-debian.html;server_name[[server_domain_or_IP]];位置/{try_files$uri$uri/=404;}[[location~\.php${includesnippets/fastcgi-php.conf;fastcgi_passunix:/run/php/php7.0-fpm.sock;}]][[location~/\.ht{denyall;}]]}完成上述更改后,您可以保存并关闭文件。键入以下命令测试配置文件的语法错误:sudonginx-t如果报告了任何错误,请返回并在继续之前重新检查您的文件。准备就绪后,重新加载Nginx以接受上面所做的更改:sudosystemctlreloadnginx第5步:创建PHP文件测试配置您的LEMP堆栈现在应该已完全设置。我们可以对此进行测试,以验证Nginx是否可以正确地将.php文件交给我们的PHP处理器进行处理。在我们的文档根目录中创建一个名为info.php的测试文件。在文本编辑器的文档根目录中打开一个名为info.php的新文件:cd/var/www/html/sudotouchinfo.php在新文件中键入或粘贴以下代码,它将返回有关我们服务器信息的信息:/var/www/html/info.php