云网牛站
所在位置:首页 > Linux云服务器 > 如何在Ubuntu 18.04上安装Linux,Nginx,MySQL,PHP(LEMP堆栈)

如何在Ubuntu 18.04上安装Linux,Nginx,MySQL,PHP(LEMP堆栈)

2018-05-28 12:02:18作者:MTPAS稿源:技术啦

本文介绍如何在Ubuntu 18.04服务器上安装LEMP堆栈。Ubuntu操作系统负责处理第一个要求。我们将介绍如何让其他组件进入正常运行状态。

LEMP软件堆栈是一组可用于为动态网页和Web应用程序提供服务的软件。这是一个描述Linux操作系统的首字母缩略词,带有一个Nginx(发音像“Engine-X”)Web服务器。后端数据存储在MySQL数据库中,动态处理由PHP 处理。

如何在Ubuntu 18.04上安装Linux,Nginx,MySQL,PHP(LEMP堆栈)

 

先决条件

在完成本教程之前,您应该在服务器上拥有具有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通信:

如何在Ubuntu 18.04上安装Linux,Nginx,MySQL,PHP(LEMP堆栈)

通过添加新的防火墙规则,您可以通过在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

如何在Ubuntu 18.04上安装Linux,Nginx,MySQL,PHP(LEMP堆栈)

如果你看到上面的页面,你已经成功安装了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软件包)结合使用,这会造成问题。禁用验证是安全的,但您应该始终使用强大,唯一的数据库凭证密码。

回答Y是,或其他任何事情都可以继续而不启用。

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组件,但您需要进行轻微的配置更改以使您的设置更安全。

php-fpm以root权限打开主配置文件:

sudo nano /etc/php/7.2/fpm/php.ini

在这个文件中,找到设置的参数cgi.fix_pathinfo。这将用分号(;)注释掉,默认设置为“1”。

这是一个非常不安全的设置,因为它告诉PHP尝试执行最近的文件,如果找不到请求的PHP文件,它可以找到它。这可以允许用户以一种允许他们执行不应允许执行的脚本的方式制作PHP请求。

通过取消注释并将其设置为“0”来更改这两个条件,如下所示:

/etc/php/7.2/fpm/php.ini

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的默认服务器块文件如下所示:

在/etc/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;

}

}

...

您需要对此服务器块进行一些更改:

1.首先,添加指令index.php的第一个值,index以便index.php在请求目录时提供名为的文件(如果可用)。

2.修改server_name指令以指向您的服务器的域名或公共IP地址。

3.对于实际的PHP处理,取消注释处理PHP请求的文件段,方法是从每行的前面删除磅符号(#)。这将是location ~.php$位置块,包含的fastcgi-php.conf片段和与之关联的套接字php-fpm。

4.此外,.htaccess使用相同的方法取消处理文件的位置块的注释。Nginx不处理这些文件。如果这些文件中的任何一个碰巧进入文档根目录,则不应将其提供给访问者。

下面的文字突出了必须做出的改变:

在/etc/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;

}

}

...

最后,块fastcgi_pass内的指令引用的文件可能存在差异location ~ .php$。您必须确保该文件的名称与实际存储在/run/php服务器目录中的名称一致。要检查这一点,请保存该文件并关闭文本编辑器,然后运行以下命令:

ls /run/php/

php7.2-fpm.pid  php7.2-fpm.sock

在这个例子中,你可以看到有问题的文件实际上不是,这是指令中列出的内容。如果您的机器上存在类似的不一致,请再次打开文件并更新指令:php7.2-fpm.sockphp7.0-fpm.socklocation ~ .php$/etc/nginx/sites-available/defaultfastcgi_pass

sudo nano /etc/nginx/sites-available/default

在/etc/nginx的/网站可用/默认

...

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代码,将返回有关您的服务器的信息:

/var/www/html/info.php

<?php

phpinfo();

完成后,保存并关闭文件。

现在,您可以访问您的服务器的域名或公共IP地址,然后在您的Web浏览器中访问此页面/info.php:

http://your_server_domain_or_IP/info.php

您应该看到一个由PHP生成的网页,其中包含有关您的服务器的信息:

如何在Ubuntu 18.04上安装Linux,Nginx,MySQL,PHP(LEMP堆栈)

如果你看到一个看起来像这样的页面,你已经成功地用Nginx设置了PHP处理。

验证Nginx正确呈现页面后,最好移除您创建的文件,因为它实际上可以为未经授权的用户提供关于您的配置的一些提示,以帮助他们尝试插入。如果以后需要,可以随时重新生成该文件。

现在,通过输入以下命令来删除文件:

sudo rm /var/www/html/info.php

有了这个,你现在在你的Ubuntu 18.04服务器上有了一个完全配置和运行的LEMP堆栈。

 

结论

LEMP堆栈是一个功能强大的平台,可让您设置和服务于您服务器上的几乎任何网站或应用程序。

您可以采取一些后续步骤。例如,你应该确保连接到你的服务器是安全的。可以参考Ubuntu 16.04安装配置Nginx使用Let‘s Encrypt一文。按照本指南,您将为您的服务器获得免费的TLS/SSL证书,从而允许其通过HTTPS提供内容。

 

相关主题

详细步骤,如何在Ubuntu 18.04中安装MySQL 8服务器

精选文章
热门文章