介绍
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。
步骤 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-fpm
和php5-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处理与Nginx。
在验证 Nginx 是否正确渲染页面后,最好删除您创建的文件,因为它实际上可以给未经授权的用户一些关于您的配置的提示,这可能有助于他们尝试打破。
现在,通过键入删除文件:
1sudo rm /var/www/html/info.php
您可以随时重建此文件,如果您需要它以后。
结论
您现在应该在您的 Debian 服务器上配置一个 LEMP 堆栈,这为您提供了一个非常灵活的基础,以便为您的访问者提供网页内容。