前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
LEMP 软件栈是一组软件,可用于提供动态网页和 Web 应用程序。这是一个首字母缩略词,描述了一个 Linux 操作系统,带有一个 Nginx(发音类似于“Engine-X”)Web 服务器。后端数据存储在 MySQL 数据库中,动态处理由 PHP 处理。
本指南演示了如何在 Ubuntu 18.04 服务器上安装 LEMP 软件栈。Ubuntu 操作系统会处理第一个要求。我们将描述如何启动其余组件。
先决条件
在完成本教程之前,您应该在服务器上拥有一个常规的非根用户帐户,具有 sudo
权限。通过完成我们的 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 流量:
状态: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 地址。您可以在 Web 浏览器中尝试每个 IP 地址。
作为替代方案,您可以检查从互联网其他位置查看的可访问的 IP 地址:
curl -4 icanhazip.com
在 Web 浏览器中输入您收到的地址,它将带您到 Nginx 的默认起始页:
http://server_domain_or_IP
!Nginx 默认页面
如果您收到一个显示 “Welcome to nginx” 的网页,那么您已成功安装了 Nginx。
步骤 2 – 安装 MySQL 以管理网站数据
现在您有了一个 Web 服务器,需要安装 MySQL(一个数据库管理系统)来存储和管理网站的数据。
通过输入以下命令安装 MySQL:
sudo apt install mysql-server
MySQL 数据库软件现在已安装,但其配置尚未完成。
为了保护安装,MySQL 自带一个脚本,将询问您是否要修改一些不安全的默认设置。通过输入以下内容启动脚本:
sudo mysql_secure_installation
此脚本将询问您是否要配置 VALIDATE PASSWORD PLUGIN
。
回答 Y
以启用,或者输入其他内容以继续而不启用。
VALIDATE PASSWORD PLUGIN 可用于测试密码并提高安全性。它检查密码的强度,并允许用户仅设置足够安全的密码。您想设置 VALIDATE PASSWORD 插件吗?
按 y|Y 以进行是,按任意其他键以进行否:
如果您启用了验证,脚本还将要求您选择密码验证级别。请记住,如果输入 2 – 表示最强级别 – 当尝试设置不包含数字、大写和小写字母以及特殊字符的密码,或者基于常见词典单词的密码时,您将收到错误。
有三个密码验证策略:
LOW 长度 >= 8
MEDIUM 长度 >= 8,数字,混合大小写和特殊字符
STRONG 长度 >= 8,数字,混合大小写,特殊字符和字典文件
请输入 0 = LOW,1 = MEDIUM 和 2 = STRONG:1
接下来,您将被要求提交并确认根密码:
请在此处设置 root 的密码。
新密码:
重新输入新密码:
对于其余的问题,您应该在每个提示处按 Y
并按 ENTER
键。这将删除一些匿名用户和测试数据库,禁用远程根登录,并加载这些新规则,以便 MySQL 立即遵守我们所做的更改。
请注意,在运行 MySQL 5.7(以及更高版本)的 Ubuntu 系统中,默认情况下 root MySQL 用户设置为使用 auth_socket
插件进行身份验证,而不是使用密码。这在许多情况下可以提供更高的安全性和可用性,但当您需要允许外部程序(例如 phpMyAdmin)访问用户时,可能会使事情变得复杂。
如果使用 auth_socket
插件访问 MySQL 与您的工作流程相符,您可以继续进行第 3 步。但是,如果您更喜欢在连接到 MySQL 作为 root 时使用密码,您需要将其身份验证方法从 auth_socket
切换到 mysql_native_password
。要执行此操作,请从终端打开 MySQL 提示:
sudo mysql
接下来,使用以下命令检查每个 MySQL 用户帐户使用的身份验证方法:
SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| 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;
±-----------------±------------------------------------------±----------------------±----------+
| 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)
此示例输出显示 **root** MySQL 用户现在使用密码进行身份验证。确认后,您可以退出 MySQL shell:
```custom_prefix(mysql>)
exit
此时,您的数据库系统已设置好,可以继续安装 PHP。
步骤 3 – 安装 PHP 并配置 Nginx 使用 PHP 处理器
Nginx 现在已安装用于提供页面服务,MySQL 也已安装用于存储和管理数据。然而,你仍然缺少能够生成动态内容的组件。这就是 PHP 发挥作用的地方。
由于 Nginx 不包含像一些其他 Web 服务器那样的原生 PHP 处理,你需要安装 php-fpm
,它代表 “fastCGI 进程管理器”。之后,你将告诉 Nginx 将 PHP 请求传递给这个软件进行处理。
安装 php-fpm
模块以及一个额外的辅助包 php-mysql
,它将允许 PHP 与你的数据库后端进行通信。安装将会拉取必要的 PHP 核心文件。通过输入以下命令来执行:
sudo apt install php-fpm php-mysql
即使所有必需的 LEMP 组件都已安装,你仍然需要进行一些配置更改,以便告诉 Nginx 使用 PHP 处理器来处理动态内容。
这是在服务器块级别完成的(服务器块类似于 Apache 的虚拟主机)。为此,在 /etc/nginx/sites-available/
目录中使用你喜欢的文本编辑器创建一个新的服务器块配置文件。在本例中,我们将使用 nano
,新的服务器块配置文件将命名为 your_domain
,你可以用你自己的信息替换它:
sudo nano /etc/nginx/sites-available/your_domain
通过创建一个新的服务器块配置文件,而不是编辑默认的配置文件,如果需要的话,你可以恢复默认配置。
将以下内容添加到你的新服务器块配置文件中,这些内容是从默认服务器块配置文件中提取并稍作修改:
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name your_domain;
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$
— 这个位置块通过指向fastcgi-php.conf
配置文件和php7.2-fpm.sock
文件来处理实际的 PHP 处理,它声明了与php-fpm
关联的套接字是什么。location ~ /\.ht
— 最后一个位置块处理.htaccess
文件,Nginx 不会处理这些文件。通过添加deny all
指令,如果任何.htaccess
文件不小心进入文档根目录,它们将不会提供给访问者。
添加完这些内容后,保存并关闭文件。如果你使用的是 nano
,你可以按 CTRL + X
然后输入 Y
和 ENTER
来完成。通过创建符号链接从你的新服务器块配置文件(在 /etc/nginx/sites-available/
目录中)到 /etc/nginx/sites-enabled/
目录来启用你的新服务器块:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
然后,从 /sites-enabled/
目录中取消链接默认配置文件:
sudo unlink /etc/nginx/sites-enabled/default
检查你的新配置文件是否存在语法错误:
sudo nginx -t
如果报告了任何错误,请返回并重新检查你的文件,然后继续。
当你准备好时,重新加载 Nginx 以进行必要的更改:
sudo systemctl reload nginx
这就完成了在 Ubuntu 18.04 服务器上安装和配置 LEMP 栈。然而,最好确认所有组件能够相互通信。
步骤 4 – 创建一个 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 生成的,包含有关你的服务器的信息:
!PHP 页面信息
如果你的页面如描述的那样,你已经成功地使用 Nginx 设置了 PHP 处理。
在验证 Nginx 是否正确呈现页面后,最好删除你创建的文件,因为它实际上可能会给未经授权的用户一些关于你配置的提示,这可能会帮助他们试图入侵。如果以后需要,你可以随时重新生成此文件。
现在,删除该文件:
sudo rm /var/www/html/info.php
通过这样,你在你的 Ubuntu 18.04 服务器上已经拥有一个完全配置和运行的 LEMP 栈。
结论
LEMP 栈是一个强大的平台,可以让您从服务器上设置和提供几乎任何网站或应用程序。
从这里开始,您可以采取一些下一步行动。例如,您应该确保与服务器的连接是安全的。为此,您可以使用 Let’s Encrypt 来保护您的 Nginx 安装。通过遵循这个指南,您将获得服务器的免费 TLS/SSL 证书,使其能够通过 HTTPS 提供内容。