如何在Ubuntu 16.04中安装Linux,Nginx,MySQL,PHP(LNMP堆栈)

介绍

LNMP软件堆栈是一组可用于为动态网页和Web应用程序提供服务的软件。它是一个描述带有Nginx Web服务器的Linux操作系统的首字母缩写词。其后端数据存储在MySQL数据库中,动态处理由PHP处理。

在本教程中,我们将演示如何在Ubuntu 16.04服务器上安装LNMP堆栈。Ubuntu操作系统将负责其第一个需求。我们还将学习如何启动和运行其余组件。

准备

在开始本教程之前,一台已经设置好可以使用sudo命令的非root账号的Ubuntu 16.04服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

一旦您的用户为可用状态,请使用该用户名登录您的服务器。您现在应该已准备好开始安装。

第一步:安装Nginx Web服务器

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

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

由于这是我们第一次使用apt,我们应该从更新本地包索引开始。之后开始安装服务器:

$ sudo apt-get update
$ sudo apt-get install nginx

在Ubuntu 16.04上,Nginx配置为在安装时开始运行。

如果您正在运行ufw防火墙,如我们的准备教程中所述,您将需要允许连接到Nginx。Nginx 在安装时用的是ufw注册,因此程序非常简单。

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

您可以输入以下命令启用此功能

$ sudo ufw allow 'Nginx HTTP'

您可以输入以下内容来验证更改:

$ sudo ufw status

您应该在显示的输出中看到允许的HTTP流量:

Output
Status: 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地址:

$ curl -4 icanhazip.com

输入您在Web浏览器中收到的地址之一。它应该将您转到Nginx的默认登陆页面:

http://server_domain_or_IP

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

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

现在我们已经有了一个Web服务器,我们需要安装数据库管理系统MySQL,来存储和管理我们站点的数据。

您可以通过输入以下命令安装:

$ sudo apt-get install mysql-server

系统将要求您提供root(管理)密码,以便在MySQL系统中使用。

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

为了保证安装,我们可以运行一个简单的安全脚本,询问我们是否要修改一些不安全的默认值。输入以下命令开始脚本:

$ mysql_secure_installation

系统将要求您输入为MySQL root帐户设置的密码。接下来,系统将询问您是否要配置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代表“no”:

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进行处理

我们现在已经安装了Nginx来为我们的页面服务,也安装了MySQL来存储和管理我们的数据。但是,我们仍然没有任何可以生成动态内容的内容。针对这个,我们可以使用PHP。

由于Nginx不像其他一些Web服务器那样包含本机PHP处理,因此我们需要安装php-fpm,它代表“fastCGI进程管理器”。我们要让Nginx将PHP请求传递给该软件进行处理。

我们可以安装这个模块,并且获取一个额外的帮助程序包,允许PHP与我们的数据库后端进行通信。安装将引入必要的PHP核心文件。输入以下命令:

$ sudo apt-get install php-fpm php-mysql

配置PHP处理器

我们现在已经安装了PHP组件,但是我们需要进行轻微的配置更改以使我们的设置更安全。

使用root权限打开主配置文件php-fpm

$ sudo nano /etc/php/7.0/fpm/php.ini

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

这是一个非常不安全的设置,因为它告诉PHP尝试执行它找不到所请求的PHP文件时可以找到的最接近的文件。这基本上允许用户以允许他们执行不应该被允许执行的脚本的方式来创建PHP请求。

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

/etc/php/7.0/fpm/php.ini
cgi.fix_pathinfo=0

完成后保存并关闭文件。

现在,我们只需输入以下命令重新启动PHP处理器:

$ sudo systemctl restart php7.0-fpm

这将实现我们所做的更改。

第四步:配置Nginx以使用PHP处理器

现在,我们已经安装了所有必需的组件。我们仍然需要的唯一配置更改是告诉Nginx将我们的PHP处理器用于动态内容。

我们在服务器块级别执行此操作(服务器块类似于Apache的虚拟主机)。输入以下命令,打开默认的Nginx服务器块配置文件:

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

目前,删除注释后,Nginx默认服务器块文件如下所示:

/etc/nginx/sites-available/default
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;
    }
}
​

我们需要为我们的网站对此文件进行一些更改。

  • 首先,我们需要添加index.php作为index指令的第一个值,以便index.php在请求目录时提供命名的文件(如果可用)。
  • 我们可以修改server_name指令以指向我们服务器的域名或公共IP地址。
  • 对于实际的PHP处理,我们只需要通过从每行前面删除井号(#)来取消注释处理PHP请求的文件段。这将是location ~\.php$位置块,包含的fastcgi-php.conf代码段和与之关联的套接字php-fpm
  • 我们还将使用相同的方法取消注释处理.htaccess文件的位置块,因为Nginx不会处理这些文件。如果这些文件中的任何一个恰好进入文档根目录,则不应向访问者提供这些文件。

您需要进行的更改在下面的文本中显示为#内容代码#:

/etc/nginx/sites-available/default
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 #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;
    }#
}
​

完成上述更改后,您可以保存并关闭该文件。

输入以下命令测试配置文件中的语法错误:

$ sudo nginx -t

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

准备好后,重新加载Nginx以进行必要的更改:

$ sudo systemctl reload nginx

第五步:创建PHP文件以测试配置

现在应该完全设置您的LNMP堆栈。我们可以测试它以验证Nginx是否可以正确地将.php文件传递给我们的PHP处理器。

我们可以通过在文档根目录中创建测试PHP文件来完成此操作。在文本编辑器中打开一个名为info.php的新文件:

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

在新文件中输入或粘贴以下行。这是有效的PHP代码,它将返回有关我们服务器的信息:

/var/www/html/info.php
<?php
phpinfo();

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

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

http://server_domain_or_IP/info.php

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

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

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

输入以下命令删除文件:

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

结论

您现在应该在Ubuntu 16.04服务器上配置LNMP堆栈。这为您为访问者提供Web内容提供了非常灵活的基础。更多Linux教程请前往腾讯云+社区学习更多知识。


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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GreenLeaves

pl/sql developer安装配置

pl/sql developer是一款第三方的oracle数据库管理工具,是比较受欢迎的一款oracle开发工具,下面将介绍它的安装配置过程。 1、首先去官网下...

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

如何在Ubuntu 14.04上使用Nginx和Php-fpm安全地托管多个网站

众所周知,LEMP堆栈(Linux,nginx,MySQL,PHP)为运行PHP站点提供了无与伦比的速度和可靠性。但是,这种流行的堆栈的其他特性,如安全性和隔离...

23720
来自专栏散尽浮华

nginx限制上传大小和超时时间设置说明/php限制上传大小

现象说明: 在服务器上部署了一套后台环境,使用的是nginx反向代理tomcat架构,在后台里上传一个70M的视频文件,上传到一半就失效了! 原因是nginx配...

82070
来自专栏XAI

Nginx+Tomcat+Redis负载均衡Session共享实现超级简单(CentOS6.9系统 Java版本)

第一步Nginx+Tomcat 实现负载均衡的测试  相关软件环境 软件名称 版本号 版本说明 Java 1.7 linux版本 Tomcat 8...

521110
来自专栏马涛涛的专栏

Session

类比:session相当于发会员卡,会员卡上只有卡号(sessionID)。下次去健身房的时候,只要看卡号上,就能确定你本人的去他信息。 而cookie相当于把...

23830
来自专栏芋道源码1024

全面了解 Nginx 到底能做什么

本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得。...

11220
来自专栏大数据和云计算技术

MongoDB系列11:Munin监控MongoDB

Munin是一个网络资源监控工具,可以帮助分析资源趋势。默认提供了大量的分析图形。以下讲述如何设置MongoDB的Munin监控插件。

20230
来自专栏LinXunFeng的专栏

MAC OSX安装Python环境 + Visual Studio Code

16230
来自专栏coder修行路

python爬虫番外篇(一)进程,线程的初步了解

整理这番外篇的原因是希望能够让爬虫的朋友更加理解这块内容,因为爬虫爬取数据可能很简单,但是如何高效持久的爬,利用进程,线程,以及异步IO,其实很多人和我一样,故...

20960
来自专栏Janti

kafka学习笔记——基本概念与安装

Kafka是一个开源的,轻量级的、分布式的、具有复制备份、基于zooKeeper协调管理的分布式消息系统。

10130

扫码关注云+社区

领取腾讯云代金券