介绍
LEMP软件是一组可用于提供动态网页和Web应用程序的软件。 这是一个描述具有Nginx Web服务器的Linux操作系统的首字母缩略词。 后端数据存储在MySQL数据库中,动态处理由PHP处理。
在本指南中,我们将演示如何在Ubuntu 16.04服务器上安装LEMP。 Ubuntu操作系统负责处理第一个需求。 我们将描述如何使其余组件运行。
先决条件
在你完成本教程,你应该有你的服务器定期,非root用户帐户sudo
权限。 你可以学习如何填写我们建立这种类型的帐户的Ubuntu 16.04服务器初始设置 。
在您的用户可用后,使用该用户名登录您的服务器。 您现在可以开始本指南中概述的步骤。
第1步:安装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流量:
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地址。 您可以在您的网络浏览器中依次尝试每个。
或者,您可以检查从互联网上的其他位置查看哪个IP地址可访问:
curl -4 icanhazip.com
键入您在Web浏览器中收到的一个地址。 它应该带你到Nginx的默认着陆页:
http://server_domain_or_IP
如果你看到上面的页面,你已经成功安装了Nginx。
第2步:安装MySQL管理站点数据
现在我们有一个Web服务器,我们需要安装MySQL,一个数据库管理系统,以存储和管理我们的网站的数据。
您可以通过键入以下内容轻松安装:
sudo apt-get install mysql-server
您将被要求提供root(管理)密码以在MySQL系统中使用。
MySQL数据库软件现已安装,但其配置尚未完全完成。
为了确保安装,我们可以运行一个简单的安全脚本,询问我们是否要修改一些不安全的默认值。 通过键入以下内容开始脚本:
sudo 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为“无”的提示:
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键。 这将删除一些匿名用户和测试数据库,禁用远程根登录,并加载这些新规则,以便MySQL立即尊重我们所做的更改。
此时,您的数据库系统现已设置,我们可以继续。
第3步:安装PHP进行处理
我们现在安装了Nginx来为我们的页面和MySQL安装存储和管理我们的数据。 但是,我们还没有任何可以生成动态内容的东西。 我们可以使用PHP。
由于Nginx的不包含像其他一些Web服务器PHP原生处理,我们需要安装php-fpm
,主张“FastCGI进程管理器”。 我们将告诉Nginx将PHP请求传递给这个软件进行处理。
我们可以安装这个模块,并且还将获得一个额外的帮助包,它将允许PHP与我们的数据库后端进行通信。 安装将提取必要的PHP核心文件。 通过键入以下内容执行此操作:
sudo apt-get install php-fpm php-mysql
配置PHP处理器
我们现在已经安装了我们的PHP组件,但我们需要进行一些小的配置更改,以使我们的设置更安全。
打开主php-fpm
具有root权限的配置文件:
sudo nano /etc/php/7.0/fpm/php.ini
我们在该文件中寻找的是,设置参数cgi.fix_pathinfo
。 这将使用分号(;)注释掉,默认设置为“1”。
这是一个非常不安全的设置,因为它告诉PHP尝试执行最近的文件,如果找不到请求的PHP文件,它可以找到。 这基本上将允许用户以允许他们执行他们不应该被允许执行的脚本的方式来制作PHP请求。
我们将通过取消注释行并将其设置为“0”来更改这两个条件,如下所示:
cgi.fix_pathinfo=0
保存并在完成后关闭文件。
现在,我们只需要重新启动我们的PHP处理器,输入:
sudo systemctl restart php7.0-fpm
这将实施我们所做的改变。
第4步:配置Nginx使用PHP处理器
现在,我们安装了所有必需的组件。 唯一的配置更改我们仍然需要是告诉Nginx使用我们的PHP处理器的动态内容。
我们在服务器块级别上执行此操作(服务器块类似于Apache的虚拟主机)。 通过键入以下内容打开默认的Nginx服务器块配置文件:
sudo nano /etc/nginx/sites-available/default
目前,删除注释,Nginx默认服务器块文件看起来像这样:
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不处理这些文件。 如果任何这些文件碰巧进入文档根目录,则不应将其提供给访问者。
您需要进行的更改在下面的文本中是红色的:
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
第5步:创建一个PHP文件来测试配置
您的LEMP现在应该完全设置。 我们可以测试来验证Nginx的可以正确手.php
文件从我们的PHP处理器。
我们可以通过在我们的文档根中创建一个测试PHP文件来实现。 打开一个名为新文件info.php
在文本编辑器文档根目录中:
sudo nano /var/www/html/info.php
在新文件中键入或粘贴以下行。 这是有效的PHP代码,将返回有关我们的服务器的信息:
<?php
phpinfo();
完成后,保存并关闭文件。
现在,你可以通过访问您的服务器的域名或公网IP地址,然后在Web浏览器中访问此页面/info.php
:
http://server_domain_or_IP/info.php
您应该看到一个由PHP生成的网页,其中包含有关您的服务器的信息:
如果你看到一个类似这样的页面,你已经成功地设置了PHP处理Nginx。
验证Nginx正确呈现页面后,最好删除您创建的文件,因为它实际上可以向未经授权的用户提供有关您的配置的一些提示,可能有助于他们尝试插入。如果以后需要,可以随时重新生成此文件。
现在,通过键入以下内容删除该文件:
sudo rm /var/www/html/info.php
结论
您现在应该已经在您的Ubuntu 16.04服务器上配置了一个LEMP。 这为您向访问者提供Web内容提供了非常灵活的基础。