目录
介绍
LEMP是一组可用于提供动态网页和Web应用程序的软件。这是一个首字母缩写词,用于描述Linux操作系统和Nginx(发音为“ Engine-X”)Web服务器。后端数据存储在MySQL数据库中,动态处理由PHP 处理。
本指南演示了如何在Ubuntu 18.04服务器上安装LEMP。Ubuntu操作系统满足了第一个要求。我们将描述如何启动和运行其余组件。
准备工作
在完成本教程之前,您应该在服务器上拥有具有sudo
特权的常规非root用户。
用户配置完后,即可开始执行本指南中概述的步骤。
步骤1–安装Nginx Web服务器
为了向网站访问者显示网页,我们将使用Nginx(一种现代,高效的网络服务器)。
过程中使用的所有软件均来自Ubuntu的默认软件包存储库。这意味着我们可以使用apt
软件包管理套件来完成必要的安装。
由于这是我们第一次使用apt
此会话,因此首先更新服务器的软件包索引。之后,安装服务器:
sudo apt update
sudo apt install nginx
在Ubuntu 18.04上,Nginx配置为在安装后开始运行。
如果ufw
正在运行防火墙(如初始设置指南中所述),则需要允许连接到Nginx。Nginx ufw
在安装时向其注册,因此该过程非常简单。
建议您启用限制性最强的配置文件,该配置文件仍将允许所需的流量。由于本指南中尚未为服务器配置SSL,因此只需要允许port上的流量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
现在已安装MySQL数据库软件,但其配置尚未完成。
为了确保安装安全,MySQL附带了一个脚本,该脚本将询问我们是否要修改一些不安全的默认值。通过键入以下命令来启动脚本:
sudo mysql_secure_installation
该脚本将询问您是否要配置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密码:
Please set the password for root here.
New password:
Re-enter new password:
对于其余的问题,您应该在每个提示下按下Y
并ENTER
击键。这将删除一些匿名用户和测试数据库,禁用远程root登录,并加载这些新规则,以便MySQL立即尊重我们所做的更改。
请注意,在运行MySQL 5.7(及更高版本)的Ubuntu系统中,默认情况下,MySQL root用户设置为使用auth_socket
而不是密码进行身份验证。在许多情况下,这可以提高安全性和可用性,但是在需要允许外部程序(例如phpMyAdmin)访问用户时,也可能使事情复杂化。
如果使用auth_socket
适合您的工作流程,可以继续执行步骤3。但是,如果您希望用密码以root用户身份连接到MySQL时,则需要将其身份验证方法从切换auth_socket
为mysql_native_password
。为此,请从终端打开MySQL提示符:
sudo mysql
接下来,使用以下命令检查每个MySQL用户帐户使用的身份验证方法:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Output ------------------ ------------------------------------------- ----------------------- -----------
| user | authentication_string | plugin | host |
------------------ ------------------------------------------- ----------------------- -----------
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
------------------ ------------------------------------------- ----------------------- -----------
4 rows in set (0.00 sec)
在此示例中,您可以看到root用户实际上使用auth_socket
进行了身份验证。要将root帐户配置为使用密码进行身份验证,请运行以下ALTER USER
命令。确保更改password
为您选择的强密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
然后,运行FLUSH PRIVILEGES
告诉服务器重新加载授权并使新的更改生效:
FLUSH PRIVILEGES;
再次检查每个用户使用的身份验证方法,以确认root不再使用该auth_socket
进行身份验证:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Output ------------------ ------------------------------------------- ----------------------- -----------
| user | authentication_string | plugin | host |
------------------ ------------------------------------------- ----------------------- -----------
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
------------------ ------------------------------------------- ----------------------- -----------
4 rows in set (0.00 sec)
您可以在此示例输出中看到,MySQL root用户现在使用密码进行了身份验证。一旦在自己的服务器上确认了这一点,就可以退出MySQL Shell:
exit
注意:将MySQL的root用户配置为使用密码进行身份验证后,您将无法再sudo mysql
使用以前使用的命令访问MySQL 。您必须运行以下命令:
mysql -u root -p
输入刚刚设置的密码后,您将看到MySQL提示。
至此,您的数据库系统已经建立,您可以继续安装PHP。
步骤3 –安装PHP并配置Nginx以使用PHP处理器
现在,您已经安装了Nginx来提供页面服务,并安装了MySQL来存储和管理数据。但是,您仍然没有可以生成动态内容的任何东西。这就是PHP发挥作用的地方。
由于Nginx不像其他一些Web服务器那样包含本机PHP处理,因此您需要安装php-fpm
,它表示“ fastCGI进程管理器”。Nginx将PHP请求传递给该软件进行处理。
注意:universe
在安装php-fpm
软件包之前,您可能需要添加Ubuntu的存储库,其中包括由Ubuntu社区维护的免费和开源软件,具体取决于您的云提供商(如果使用的是国内的云服务商,可以略过这步,因为他们都有自己的软件源)。
您可以通过键入以下内容来执行此操作:
sudo add-apt-repository universe
安装该php-fpm
模块以及一个附加的帮助程序包,php-mysql
它将允许PHP与您的数据库后端进行通信。安装将提取必要的PHP核心文件。通过键入以下内容:
sudo apt install php-fpm php-mysql
现在,您已经安装了所有必需的LEMP堆栈组件,但是仍然需要进行一些配置更改,以使Nginx使用PHP处理器来处理动态内容。
这是在服务器块级别上完成的(服务器块类似于Apache的虚拟主机)。为此,请在/etc/nginx/sites-available/
目录中打开一个新的服务器块配置文件。在此示例中,新的服务器块配置文件名为example.com
,尽管您可以根据需要命名:
sudo nano /etc/nginx/sites-available/example.com
通过编辑一个新的服务器块配置文件,而不是编辑默认文件,您将能够在需要时轻松地恢复默认配置。
将以下内容(从默认服务器块配置文件中获取并稍作修改)添加到新的服务器块配置文件中:/etc/nginx/sites-available/anspoon.com
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name anspoon.com;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
这些指令和位置块的作用如下:
listen
—定义Nginx将监听的端口。在这种情况下,它将侦听80
端口HTTP的默认端口。root
—定义文档根目录,用于存储网站提供的文件。index
—配置Nginx优先处理index.php
请求索引文件时命名的服务文件(如果有)。server_name
—定义对服务器的给定请求应使用哪个服务器块。将此指令指向服务器的域名或公共IP地址。location /
—第一个位置块包含一个try_files
指令,该指令检查是否存在与URI请求匹配的文件。如果Nginx找不到合适的文件,它将返回404错误。location ~ \.php$
—该位置块通过将Nginx指向fastcgi-php.conf
配置文件和php7.2-fpm.sock
声明与哪个套接字相关的文件来处理实际的PHP处理php-fpm
。location ~ /\.ht
—最后一个位置块处理.htaccess
Nginx不处理的文件。通过添加deny all
指令,如果有任何.htaccess
文件碰巧进入文档根目录,则不会将其提供给访问者。
添加此内容后,保存并关闭文件。通过创建从新服务器块配置文件(在/etc/nginx/sites-available/
目录中)到/etc/nginx/sites-enabled/
目录的符号链接来启用新服务器块:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
然后,从/sites-enabled/
目录取消链接默认配置文件:
sudo unlink /etc/nginx/sites-enabled/default
注意:如果需要恢复默认配置,可以通过重新创建符号链接来完成,如下所示:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
通过键入以下内容来测试新配置文件的语法错误:
sudo nginx -t
如果报告了任何错误,请返回并重新检查文件,然后再继续。
准备就绪后,重新加载Nginx进行必要的更改:
sudo systemctl reload nginx
这样就完成了LEMP的安装和配置。但是,请确认所有组件都可以相互通信。
步骤4 –创建一个PHP文件以测试配置
您的LEMP现在已完全设置好了。您可以对其进行测试,以验证Nginx是否可以将.php
文件正确地传递给PHP处理器。
为此,请使用文本编辑器info.php
在文档根目录中创建一个测试PHP文件:
sudo vim /var/www/html/info.php
在新文件中输入以下行。这是有效的PHP代码,它将返回有关您的服务器的信息:/var/www/html/info.php
<?php
phpinfo();
完成后,保存并关闭文件。
现在,您可以在Web浏览器中访问此页面,方法是访问服务器的域名或公共IP地址,后跟/info.php
:
http://your_server_domain_or_IP/info.php
您应该看到由PHP生成的网页,其中包含有关服务器的信息:
如果看到一个类似这样的页面,则说明您已成功使用Nginx设置了PHP处理。
在确认Nginx正确呈现了页面之后,最好删除您创建的文件,因为它实际上可以为未经授权的用户提供有关您配置的一些提示,这些提示可能会帮助他们尝试闯入。您以后可以随时重新生成该文件。
现在,通过键入以下内容删除文件:
sudo rm /var/www/html/info.php
这样一来,在Ubuntu 18.04服务器上便拥有了一个完全配置且正常运行的LEMP堆栈。
结语
LEMP堆栈是一个功能强大的平台,可以让您设置和服务几乎所有网站或应用程序。
《如何在Ubuntu 18.04上安装Linux,Nginx,MySQL,PHP(LEMP)》有1条评论