在CVM上搭建网页服务器(LNMP)

2018-07-18 14:52:26 浏览数 (1)

简介

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

本文演示了如何在Ubuntu 18.04服务器上安装LNMP。Ubuntu操作系统是第一要求。我们将描述如何启动和运行其余组件。

准备

  • 需要腾讯云CVM Ubuntu 18.04服务器,可以使用sudo命令的非root账户。

第一步、安装Nginx Web服务器

为了向我们的网站访问者显示网页,我们将采用现代高效的Web服务器Nginx。

此过程中使用的所有软件都将来自Ubuntu的默认软件包存储库。这意味着我们可以使用apt包管理套件来完成必要的安装。

由于这是我们第一次使用apt此会话,因此请先更新服务器的软件包。然后,安装Nginx

代码语言:txt复制
sudo apt update
sudo apt install nginx

在Ubuntu 18.04上,Nginx配置为在安装后开始运行。

如果您ufw防火墙正在运行,您将需要允许连接到Nginx。Nginx在安装时会在ufw注册自己,因此程序相当简单。

建议您启用限制性最强的配置文件,该配置文件仍允许您拥有所需的流量。由于您未在本指南中为服务器配置SSL,因此您只需要允许80端口上的流量。

输入以下内容即可:

代码语言:txt复制
sudo ufw allow 'Nginx HTTP'

您可以输入以下命令,来查看是否更改成功:

代码语言:txt复制
sudo ufw status

此命令的输出将显示允许HTTP流量:

代码语言:txt复制
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地址,则可以通过运行以下命令找到它:

代码语言:txt复制
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's//.*$//'

这将打印出几个IP地址。您可以在Web浏览器中依次尝试每个IP地址。

作为替代方案,您可以检查从Internet上的其他位置查看的可访问的IP地址:

代码语言:txt复制
curl -4 icanhazip.com

输入您在网络浏览器中收到的地址,它将带您进入Nginx的默认网页:

代码语言:txt复制
http://server_domain_or_IP
Nginx默认页面Nginx默认页面

如果您看到上面的页面,则表示您已成功安装Nginx。

第二步、安装MySQL以管理站点数据

现在您已拥有Web服务器,您需要安装MySQL(数据库管理系统)来存储和管理您站点的数据。

输入以下命令安装MySQL:

代码语言:txt复制
sudo apt install mysql-server-5.7

现在已安装MySQL数据库软件,但配置尚未完成。

为了确保安装,MySQL附带了一个脚本,询问我们是否要修改一些不安全的默认值。键入以下命令启动脚本:

代码语言:txt复制
sudo mysql_secure_installation

这里将要求您提供在MySQL系统中使用的密码。之后,它会询问您是否要配置VALIDATE PASSWORD PLUGIN

警告:启用此功能是一种判断调用。如果启用,MySQL将拒绝与指定条件不符的密码并显示错误。如果您将弱密码与自动配置MySQL用户凭据的软件结合使用,例如phpMyAdmin的Ubuntu软件包,则会出现问题。保持禁用验证是安全的,但是您应该始终为数据库凭据使用的是唯一而且安全性高的密码。

输入Y同意或者其他任意键表示不同意

代码语言:txt复制
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 - 表示最强级别 - 在尝试设置任何不包含数字,大写和小写字母以及特殊字符的密码或基于常用字典单词的密码时,您都将收到错误提示。

代码语言:txt复制
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

代码语言:txt复制
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

对于其他问题,您应该在每次提示时按下YENTER按键。这将删除一些匿名用户和测试数据库,禁用远程root登录,并加载这些新规则,以便MySQL立即遵守我们所做的更改。

请注意,在运行MySQL 5.7(及更高版本)的Ubuntu系统中,MySQL的root的用户设置为默认使用auth_socket插件进行身份验证,而不是使用密码。在许多情况下,这允许更高的安全性和可用性,但是当您需要允许外部程序(例如,phpMyAdmin)访问用户时,它也会使事情变得复杂。

如果您希望在以root身份连接到MySQL时使用密码,则需要将其身份验证方法从切换auth_socketmysql_native_password。为此,请从终端打开MySQL提示符:

代码语言:txt复制
sudo mysql

接下来,使用以下命令检查每个MySQL用户帐户使用的身份验证方法:

代码语言:txt复制
SELECT user,authentication_string,plugin,host FROM mysql.user;
代码语言:txt复制
 ------------------ ------------------------------------------- ----------------------- ----------- 
| 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为您选择的强密码:

代码语言:txt复制
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

然后,运行FLUSH PRIVILEGES告诉服务器重新加载授权表,并使您的新更改生效:

代码语言:txt复制
FLUSH PRIVILEGES;

再次检查每个用户使用的身份验证方法,以确认root用户不再使用该auth_socket插件进行身份验证:

代码语言:txt复制
SELECT user,authentication_string,plugin,host FROM mysql.user;
代码语言:txt复制
 ------------------ ------------------------------------------- ----------------------- ----------- 
| 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:

代码语言:txt复制
exit

此时,您的数据库系统现已设置完毕,您可以继续安装PHP。

第三步、安装PHP并配置Nginx以使用PHP处理

您现在已经安装了Nginx来为您的页面和MySQL安装以存储和管理您的数据。但是,您仍然没有任何可以生成动态内容的东西。这就是PHP发挥作用的地方。

由于Nginx本身并不能处理PHP请求,因此您需要安装php-fpm,它代表“fastCGI进程管理器”。我们将告诉Nginx将PHP请求传递给该软件进行处理。Nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx。

安装此模块以及一个允许PHP与数据库后端通信的附加帮助程序包。安装将引入必要的PHP核心文件。键入以下命令:

代码语言:txt复制
sudo apt install php-fpm php-mysql

您现在已经安装了所有必需的LNMP组件,但您仍需要进行一些配置更改,以便告诉Nginx将PHP处理器用于动态内容。

这是在服务器完成的(服务器块类似于Apache的虚拟主机)。为此,请在/etc/nginx/sites-available/目录中打开新的服务器块配置文件。在此示例中,新服务器块配置文件已命名example.com,但您可以命名成你喜欢的名字:

代码语言:txt复制
sudo nano /etc/nginx/sites-available/example.com

通过编辑新的服务器块配置文件,而不是编辑默认配置文件,这样的话就轻松的恢复默认配置。

将以下内容(从默认服务器块配置文件中获取并略微修改)添加到新服务器块配置文件中:

代码语言:txt复制
server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name example.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/目录创建符号链接来启用新服务器块:

代码语言:txt复制
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

输入以下命令测试新配置文件的是否有语法错误:

代码语言:txt复制
sudo nginx -t

如果报告了任何错误,请返回并重新检查您的文件,然后再继续。

准备好后,重新加载Nginx:

代码语言:txt复制
sudo systemctl reload nginx

这样就完成了LNMP的安装和配置。下一步,要谨慎地确认所有组件都可以彼此通信。

第四步、创建PHP文件以测试配置

到现在已经设置您的LNMP。您可以测试它以验证Nginx是否可以正确地将.php文件传送到PHP处理器。

在这里,我们可以使用nano编辑创建一个info.php

代码语言:txt复制
sudo nano /var/www/html/info.php

在新文件中输入下面这段diamante。这是有效的PHP代码,它将返回有关您的服务器的信息:

代码语言:txt复制
<?php
phpinfo();

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

如下所示,现在您通过您的域名或者IP地址来访问info.php

代码语言:txt复制
http://your_server_domain_or_IP/info.php

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

PHP页面信息PHP页面信息

如果您看到一个看起来像这样的页面,那么您已成功使用Nginx设置PHP处理。

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

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

代码语言:txt复制
sudo rm /var/www/html/info.php

有了它,您现在可以在Ubuntu 18.04服务器上拥有一个完全配置且运行正常的LNMP。

结论

LNMP是一个功能强大的平台,允许您从服务器设置和服务几乎任何网站或应用程序。欢迎购买腾讯云服务器进行尝试。


参考文献:《How To Install Linux, Nginx, MySQL, PHP (LEMP stack) on Ubuntu 18.04》

0 人点赞