介绍
LEMP 软件堆栈是一组可用于提供动态网页和 Web 应用程序的软件。 这是描述带有 Nginx Web 服务器的 Linux 操作系统的首字母缩略词。 后端数据存储在 MySQL 数据库中,动态处理由 PHP 处理。
在本指南中,您将使用操作系统提供的软件包在 Debian 服务器上安装 LEMP 堆栈。
先决条件
要完成本指南,您需要:
- 具有
sudo
权限的非 root 用户的 Debian 8 服务器。 您可以在我们的 Initial Server Setup with Debian 8 指南中设置具有这些权限的用户。
第 1 步 — 安装 Nginx Web 服务器
为了向我们的网站访问者显示网页,我们将使用 Nginx,一种现代、高效的网络服务器。
我们将用于此过程的所有软件将直接来自 Debian 的默认软件包存储库。 这意味着我们可以使用apt
包管理套件来完成安装。
由于这是我们第一次在此会话中使用 apt
,我们应该从更新本地包索引开始。 然后我们可以安装服务器:
sudo apt-get update sudo apt-get install nginx
在 Debian 8 上,Nginx 配置为在安装时开始运行。
如果您正在运行 ufw
防火墙,则需要允许连接到 Nginx。 您应该启用仍然允许您想要的流量的最严格的配置文件。 由于我们还没有为我们的服务器配置 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 地址。 您可以在您的网络浏览器中依次尝试它们中的每一个。
作为替代方案,您可以检查从 Internet 上的其他位置查看的 IP 地址是可访问的:
curl -4 icanhazip.com
键入您在 Web 浏览器中收到的地址之一。 它应该带你到 Nginx 的默认登录页面:
http://server_domain_or_IP
如果你看到上面的页面,你已经成功安装了 Nginx。
第 2 步 — 安装 MySQL 以管理站点数据
现在我们有了一个 Web 服务器,我们需要安装 MySQL,一个数据库管理系统,来存储和管理我们网站的数据。
您可以通过键入以下内容轻松安装:
sudo apt-get install mysql-server
您将被要求提供在 MySQL 系统中使用的 root(管理)密码,并且您需要确认该密码。
MySQL 数据库软件现已安装,但其配置尚未完全完成。
为了确保安装安全,我们可以运行一个简单的安全脚本,询问我们是否要修改一些不安全的默认值。 通过键入以下内容开始脚本:
sudo mysql_secure_installation
您将被要求输入您为 MySQL root 帐户设置的密码。 然后系统会询问您是否要更改该密码。 如果您对当前密码感到满意,请在提示符处输入 N
表示“否”:
Using existing password for root. Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping.
对于脚本询问的其余问题,您应该按 Y
,然后在每个提示符处按 ENTER
键。 这将删除一些匿名用户和测试数据库,禁用远程 root 登录,并加载这些新规则,以便 MySQL 立即尊重您所做的更改。
至此,您的数据库系统现已设置完毕并受到保护。 让我们设置 PHP。
第 3 步 — 安装 PHP 进行处理
我们现在安装了 Nginx 来服务我们的页面,并安装了 MySQL 来存储和管理我们的数据。 但是,我们仍然没有任何可以生成动态内容的东西。 这就是 PHP 的用武之地。
由于 Nginx 不像其他一些 Web 服务器那样包含原生 PHP 处理,我们需要安装 fpm
,它代表“fastCGI 进程管理器”。 我们将告诉 Nginx 将 PHP 请求传递给该软件进行处理。 我们还将安装一个额外的帮助程序包,它允许 PHP 与我们的 MySQL 数据库后端进行通信。 安装将引入必要的 PHP 核心文件以使其工作。
由于许可问题,这些软件包在默认存储库中不可用,因此我们必须修改存储库源以将它们拉入。
在文本编辑器中打开 /etc/apt/sources.list
:
sudo nano /etc/apt/sources.list
然后,对于每个源,将 contrib
和 non-free
存储库附加到每个源。 进行这些更改后,您的文件应如下所示:
/etc/apt/sources.list
... deb http://mirrors.digitalocean.com/debian jessie main contrib non-free deb-src http://mirrors.digitalocean.com/debian jessie main contrib non-free deb http://security.debian.org/ jessie/updates main contrib non-free deb-src http://security.debian.org/ jessie/updates main contrib non-free # jessie-updates, previously known as 'volatile' deb http://mirrors.digitalocean.com/debian jessie-updates main contrib non-free deb-src http://mirrors.digitalocean.com/debian jessie-updates main contrib non-free
保存并退出文件。 然后更新您的来源:
sudo apt-get update
然后安装 php5-fpm
和 php5-mysql
模块:
sudo apt-get install php5-fpm php5-mysql
我们现在已经安装了 PHP 组件,但是我们需要对配置进行一些细微的更改以使我们的设置更加安全。
以 root 权限打开主 php-fpm
配置文件:
sudo nano /etc/php5/fpm/php.ini
在文件中查找设置 cgi.fix_pathinfo
的参数。 这将用分号 (;) 注释掉并默认设置为“1”。
这是一个非常不安全的设置,因为如果找不到请求的 PHP 文件,它会告诉 PHP 尝试执行它可以找到的最近的文件。 这基本上将允许用户以允许他们执行不应被允许执行的脚本的方式制作 PHP 请求。
我们将通过取消注释该行并将其设置为“0”来更改这两个条件,如下所示:
/etc/php5/fpm/php.ini
cgi.fix_pathinfo=0
完成后保存并关闭文件。
现在,我们只需要通过键入以下内容来重新启动 PHP 处理器:
sudo systemctl restart php5-fpm
这将实现我们所做的更改。
第 4 步 — 配置 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 your_server_ip; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~ /\.ht { deny all; } }
完成上述更改后,您可以保存并关闭文件。
通过键入以下内容来测试配置文件的语法错误:
sudo nginx -t
如果报告任何错误,请返回并重新检查您的文件,然后再继续。
准备好后,重新加载 Nginx 以进行必要的更改:
sudo systemctl reload nginx
第 5 步 — 创建一个 PHP 文件来测试配置
您的 LEMP 堆栈现在应该已完全设置。 我们可以对其进行测试以验证 Nginx 可以正确地将 .php
文件交给我们的 PHP 处理器。
我们可以通过在我们的文档根目录中创建一个测试 PHP 文件来做到这一点。 在文本编辑器的文档根目录中打开一个名为 info.php
的新文件:
sudo nano /var/www/html/info.php
将以下行键入或粘贴到新文件中。 这是有效的 PHP 代码,它将返回有关我们服务器的信息:
/var/www/html/info.php
<?php phpinfo(); ?>
完成后,保存并关闭文件。
现在,您可以在您的网络浏览器中访问此页面,方法是访问您的服务器的域名或公共 IP 地址,后跟 /info.php
:
http://server_domain_or_IP/info.php
您应该会看到一个由 PHP 生成的网页,其中包含有关您的服务器的信息:
如果你看到一个像这样的页面,那么你已经成功地使用 Nginx 设置了 PHP 处理。
在验证 Nginx 正确呈现页面后,最好删除您创建的文件,因为它实际上可以为未经授权的用户提供一些有关您的配置的提示,这可能有助于他们尝试闯入。
现在,通过键入以下内容删除文件:
sudo rm /var/www/html/info.php
如果以后需要,您可以随时重新生成此文件。
结论
您现在应该在 Debian 服务器上配置了 LEMP 堆栈。 这为您为访问者提供 Web 内容提供了非常灵活的基础。