如何在 Ubuntu 16.04 中安装 Linux、Nginx、MySQL 和 PHP(LEMP 协议栈

介绍

LEMP软件堆栈是一组软件,可用于服务动态网页和Web应用程序. 这是描述Linux操作系统的缩写,具有NginxWeb服务器。

在本指南中,我们将展示如何在Ubuntu 16.04服务器上安装LEMP堆栈。Ubuntu操作系统照顾第一个要求。

前提条件

在完成本教程之前,您应该在您的服务器上拥有sudo特权的常规非根用户帐户,您可以通过完成我们的 Ubuntu 16.04初始服务器设置来学习如何设置此类帐户。

一旦你有你的用户可用,登录你的服务器用这个用户名. 你现在准备开始在本指南中描述的步骤。

步骤1:安装 Nginx Web 服务器

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

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

由于这是我们第一次在这个会话中使用apt,我们应该从更新本地包索引开始,然后我们可以安装服务器:

1sudo apt-get update
2sudo apt-get install nginx

在 Ubuntu 16.04 上, Nginx 配置为在安装时启动。

如果您有ufw防火墙运行,正如我们最初的安装指南中所述,您将需要允许连接到 Nginx。

建议您启用最限制的配置文件,仍然允许您想要的流量. 由于我们尚未为我们的服务器配置SSL,在本指南中,我们只需要允许端口80上的流量。

你可以通过键入来实现这一点:

1sudo ufw allow 'Nginx HTTP'

您可以通过键入检查更改:

1sudo ufw status

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

1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere                  
7Nginx HTTP ALLOW Anywhere                  
8OpenSSH (v6)               ALLOW Anywhere (v6)             
9Nginx HTTP (v6)            ALLOW Anywhere (v6)

随着新的防火墙规则的添加,您可以通过访问您的服务器的域名或公共 IP 地址在您的 Web 浏览器中测试服务器是否正在运行。

如果您没有指向您的服务器的域名,并且您不知道您的服务器的公共IP地址,您可以通过键入您的终端中的下列内容之一来找到它:

1ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

這將打印出幾個IP地址,您可以在您的網頁瀏覽器中嘗試每一個。

另一种方式是,你可以检查哪个IP地址是从互联网上的其他位置访问的:

1curl -4 icanhazip.com

输入您在 Web 浏览器中接收的地址之一. 它应该带您到 Nginx 的默认定位页面:

1http://server_domain_or_IP

Nginx default page

如果您看到上面的页面,您已经成功安装了 Nginx。

步骤 2:安装MySQL来管理网站数据

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

您可以通过键入轻松安装:

1sudo apt-get install mysql-server

您将被要求提供一个根(管理)密码,用于MySQL系统中使用。

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

为了确保安装,我们可以运行一个简单的安全脚本,它会问我们是否想要修改一些不安全的默认设置。

1mysql_secure_installation

您将被要求输入您为 MySQL 根帐户设置的密码,接下来,您将被问及是否要配置VALIDATE PASSWORD PLUGIN

<$>[warning] 警告: 启用此功能是一种判断呼叫。如果启用,不符合指定的标准的密码将被MySQL错误拒绝,这将导致问题,如果您与自动配置MySQL用户凭证的软件一起使用弱密码,如Ubuntu软件包为phpMyAdmin。安全地将验证禁用,但您应该始终使用强有力的、独特的数据库凭证密码。

答案 y 是的,或任何其他继续不允许。

1VALIDATE PASSWORD PLUGIN can be used to test passwords
2and improve security. It checks the strength of password
3and allows the users to set only those passwords which are
4secure enough. Would you like to setup VALIDATE PASSWORD plugin?
5
6Press y|Y for Yes, any other key for No:

如果您已启用验证,您将被要求选择一个密码验证级别. 请记住,如果您输入 2 ,对于最强的级别,您将收到错误,当您尝试设置任何不包含数字,顶部和底部字母和特殊字符的密码,或基于常见字典单词的密码。

1There are three levels of password validation policy:
2
3LOW Length >= 8
4MEDIUM Length >= 8, numeric, mixed case, and special characters
5STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
6
7Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

如果您启用了密码验证,将显示现有根密码的密码强度,并询问您是否想要更改该密码。

1Using existing password for root.
2
3Estimated strength of the password: 100
4Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

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

此时,您的数据库系统已设置,我们可以继续前进。

步骤 3: 安装 PHP 处理

我们现在安装了 Nginx 来服务我们的页面,安装了 MySQL 来存储和管理我们的数据,但我们仍然没有任何可以生成动态内容的东西。

由于 Nginx 不会像其他一些 Web 服务器那样包含原生 PHP 处理,所以我们需要安装「php-fpm」,即fastCGI 流程管理器

我们可以安装此模块,还会获取一个额外的辅助包,允许PHP与我们的数据库后端进行通信。

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

配置 PHP 处理器

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

打开带 root 特权的主要 php-fpm 配置文件:

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

我们在这个文件中寻找的是设置cgi.fix_pathinfo的参数,这将用半列(;)评论并默认设置为1

这是一个非常不安全的设置,因为它告诉PHP试图执行最接近的文件,如果无法找到所请求的PHP文件。

我们将通过不评论行来改变这两个条件,并将其设置为0如下:

1[label /etc/php/7.0/fpm/php.ini]
2cgi.fix_pathinfo=0

保存并关闭文件,当你完成。

现在,我们只需要通过键入重新启动我们的PHP处理器:

1sudo systemctl restart php7.0-fpm

这将实现我们所做的变化。

步骤 4:配置 Nginx 以使用 PHP 处理器

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

我们在服务器块级别上做这件事(服务器块类似于Apache的虚拟主机)。

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

目前,随着评论被删除,Nginx默认服务器封锁文件看起来像这样:

 1[label /etc/nginx/sites-available/default]
 2server {
 3    listen 80 default_server;
 4    listen [::]:80 default_server;
 5
 6    root /var/www/html;
 7    index index.html index.htm index.nginx-debian.html;
 8
 9    server_name _;
10
11    location / {
12        try_files $uri $uri/ =404;
13    }
14}

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

  • 首先,我们需要将 index.php 添加为我们的 index.php 指令的第一个值,以便在被请求的目录时,如果有可用,将名为 index.php 的文件提供服务。
  • 我们可以修改 server_name 指令,以指向我们的服务器的域名或公共 IP 地址。
  • 对于实际的 PHP 处理,我们只需要删除处理 PHP 请求的文件的一部分,通过删除每个行前的 pound 符号(# )。

您需要做的更改在下面的文本中是红色的:

 1[label /etc/nginx/sites-available/default]
 2server {
 3    listen 80 default_server;
 4    listen [::]:80 default_server;
 5
 6    root /var/www/html;
 7    index index.php index.html index.htm index.nginx-debian.html;
 8
 9    server_name server_domain_or_IP;
10
11    location / {
12        try_files $uri $uri/ =404;
13    }
14
15    location ~ \.php$ {
16        include snippets/fastcgi-php.conf;
17        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
18    }
19
20    location ~ /\.ht {
21        deny all;
22    }
23}

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

通过键入测试您的配置文件的语法错误:

1sudo nginx -t

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

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

1sudo systemctl reload nginx

步骤 5:创建一个PHP文件来测试配置

我们可以测试它来验证 Nginx 是否能正确地将.php 文件发送给我们的 PHP 处理器。

我们可以通过在我们的文档根中创建测试PHP文件来做到这一点,在文档根中打开一个名为info.php的新文件:

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

输入或粘贴下列行到新文件. 这是有效的PHP代码,将返回有关我们的服务器的信息:

1[label /var/www/html/info.php]
2<?php
3phpinfo();

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

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

1http://server_domain_or_IP/info.php

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

PHP page info

如果你看到一个看起来像这样的页面,你已经成功地设置了PHP处理与Nginx。

在验证 Nginx 是否正确渲染页面后,最好删除您创建的文件,因为它实际上可以给未经授权的用户一些关于您的配置的提示,这可能有助于他们尝试打破。

现在,通过键入删除文件:

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

结论

您现在应该在 Ubuntu 16.04 服务器上配置一个 LEMP 堆栈,这为您提供了一个非常灵活的基础,以便为您的访问者提供网页内容。

Published At
Categories with 技术
comments powered by Disqus