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

简介

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

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

准备

第一步、安装Nginx Web服务器

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

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

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

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流量:

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地址。您可以在Web浏览器中依次尝试每个IP地址。

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

curl -4 icanhazip.com

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

http://server_domain_or_IP
Nginx默认页面

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

第二步、安装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

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

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

如果您希望在以root身份连接到MySQL时使用密码,则需要将其身份验证方法从切换auth_socketmysql_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)

您可以在此示例输出中看到MySQL的root用户现在使用密码进行身份验证。在您自己的服务器上确认后,您可以退出MySQL shell:

exit

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

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

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

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

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

sudo apt install php-fpm php-mysql

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

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

sudo nano /etc/nginx/sites-available/example.com

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

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

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/目录创建符号链接来启用新服务器块:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

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

sudo nginx -t

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

准备好后,重新加载Nginx:

sudo systemctl reload nginx

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

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

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

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

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

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

<?php
phpinfo();

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

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

http://your_server_domain_or_IP/info.php

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

PHP页面信息

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

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

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

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》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

HTTP 协议漫谈

简介 网络上已经有不少介绍 HTTP 的好文章,对HTTP的一些细节介绍的比较好,所以本篇文章不会对 HTTP 的细节进行深究,而是从够高和更结构化的角度将 H...

314110
来自专栏大魏分享(微信公众号:david-share)

红帽技术干货速递系列之1:RHV4实验环境快速部署指南

大卫说: 本文是大卫同事马林根据实验完成的RHV4.0 step by step的安装步骤。这对于我们在PoC环境中部署RHV有很大的帮助。大卫也欢迎读者朋友们...

40940
来自专栏陈树义

高效开发技巧:为什么你下载Git项目这么慢?

笔者所在公司采用的是 GitLab 进行版本管理,但许多同事下载 Git 项目的路径是这样的: 打开浏览器 -> 输入网址 -> 查找项目地址 -> 复制项目...

37440
来自专栏云计算教程系列

如何在CentOS 7上将BIND配置为专用网络DNS服务器

管理服务器配置和基础架构的一个重要部分包括通过设置适当的域名系统(DNS),维护一种通过名称查找网络接口和IP地址的简便方法。使用完全限定的域名(FQDN)而不...

42300
来自专栏铭毅天下

干货 | Elasticsearch 集群健康值红色终极解决方案

题记 Elasticsearch当清理缓存( echo 3 > /proc/sys/vm/drop_caches )的时候,出现 如下集群健康值:red,红...

90980
来自专栏马洪彪

WCF IIS 部署错误处理

做Web接口,原来一直用Web Service的,但是.Net 3.5后,Web Service变成了WCF。代码的编写上,把WebMethod特性改成了Ope...

30070
来自专栏运维小白

Linux基础(day50)

12.10 Nginx访问日志 Nginx访问日志目录概要 日志格式 vim /usr/local/nginx/conf/nginx.conf //搜索log_...

22690
来自专栏运维小白

10.35 screen工具

screen工具 为了不让一个任务意外中断 nohup command & screen是一个虚拟终端 yum install -y screen screen...

21280
来自专栏python百例

119-比较文件的差异

python标准库提供了一个difflib,可以进行文件的比较,并且可以生成网页的形式。

19620
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Pydio托管文件共享服务器

随着云的采用增加,越来越多的数据被远程存储。从音乐到图片再到个人文档,很多人都将文件上传到他们不管理的服务器上。如果您希望将文件保存在您控制的服务器上,则可以使...

40400

扫码关注云+社区

领取腾讯云代金券