如何在 Debian 8 上安装 Linux、Nginx、MySQL 和 PHP(LEMP 堆栈

介绍

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

在本指南中,您将使用操作系统提供的包在 Debian 服务器上安装 LEMP 堆栈。

前提条件

要完成本指南,您将需要:

  • 具有sudo特权的非根用户的 Debian 8 服务器. 您可以在我们的 Debian 8 初始服务器设置指南中设置具有这些特权的用户。

步骤1:安装 Nginx Web 服务器

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

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

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

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

在 Debian 8 上, 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 数据库软件已安装,但其配置尚未完全完成。

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

1sudo mysql_secure_installation

您将被要求输入您为 MySQL **root ** 帐户设置的密码,然后您将被问及您是否想要更改该密码。

1Using existing password for root.
2
3Setting the root password ensures that nobody can log into the MySQL
4root user without the proper authorisation.
5
6You already have a root password set, so you can safely answer 'n'.
7
8Change the root password? [Y/n] n
9 ... skipping.

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

此时,您的数据库系统已设置和安全,让我们设置PHP。

步骤 3 – 安装 PHP 来处理

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

由于 Nginx 不会像其他一些 Web 服务器那样包含原生 PHP 处理,所以我们需要安装 fpm,即fastCGI 流程管理器。我们会告诉 Nginx 将 PHP 请求传递给该软件进行处理,我们还会安装一个额外的辅助包,允许 PHP 与我们的 MySQL 数据库备份进行通信。

这些包由于许可问题在默认存储库中不可用,所以我们必须修改存储库源以将其拉入。

在文本编辑器中打开 /etc/apt/sources.list:

1sudo nano /etc/apt/sources.list

然后,对于每个源,将贡献非免费存储库附加到每个源。

 1[label /etc/apt/sources.list]
 2...
 3deb http://mirrors.digitalocean.com/debian jessie main contrib non-free
 4deb-src http://mirrors.digitalocean.com/debian jessie main contrib non-free
 5
 6deb http://security.debian.org/ jessie/updates main contrib non-free
 7deb-src http://security.debian.org/ jessie/updates main contrib non-free
 8
 9# jessie-updates, previously known as 'volatile'
10deb http://mirrors.digitalocean.com/debian jessie-updates main contrib non-free
11deb-src http://mirrors.digitalocean.com/debian jessie-updates main contrib non-free

保存和退出文件,然后更新您的来源:

1sudo apt-get update

然后安装php5-fpmphp5-mysql模块:

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

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

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

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

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

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

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

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

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

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

1sudo systemctl restart php5-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 请求的文件的一部分。这将是 location ~.php$ 位置块,包含的 fastcgi-php.conf 片段,以及与 php-fpm 相关的插槽。
  • 我们还将解除处理 .htaccess 文件的位置块。 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.php index.html index.htm index.nginx-debian.html;
 8
 9    server_name your_server_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:/var/run/php5-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
3  phpinfo();
4?>

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

现在,您可以通过访问您的服务器的域名或公共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

您可以随时重建此文件,如果您需要它以后。

结论

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

Published At
Categories with 技术
comments powered by Disqus