我们都知道如果想运行一个网站或者手机app的话,必须需要后端服务,也就是服务器的支持。这样你在访问网页的时候服务器才能给你想要的东西,今天我将给大家讲述下如何在Ubuntu 16.x中安装Linux,Nginx,Mysql,PHP等这四个合并起来被称为LEMP
有的教程称 LNMP
,使其Nginx的发音是
nginx [engine x]
他是一个HTTP和反向代理服务器。
介绍
LEMP集成软件是一组可用于服务于动态web页面和web应用程序的软件。这是一个描述Linux操作系统和Nginx web服务器的缩写词。后端数据存储在MySQL数据库中和动态处理由PHP处理。
在这篇文章中,我将给大家讲解如何在Ubuntu 16.04服务器上安装LEMP软件集。在安装之前,你必须拥有服务器上sudo特权即使root帐户。这样你才能按照下面的教程进行学习。如果你是root用户,请使用该用户名登录到您的服务器。现在,您已经准备好开始安装的步骤。
LEMP安装
步骤1:安装Nginx Web服务器
我将使用Nginx,一种现代、高效的web服务器。我在这个过程中使用的所有软件都将直接来自Ubuntu的默认包存储库。这意味着我可以使用apt包管理套件来完成安装。由于这是我第一次为这个会话使用apt,所以我应该首先更新本地包索引,然后安装服务器:
1 2 | $ sudo apt-get update $ sudo apt-get install nginx |
在Ubuntu 16.04中,Nginx被配置为在安装后就开始运行。如果您有运行的ufw防火墙,如我们的初始设置指南所述,您将需要允许连接到Nginx。Nginx在安装时向ufw注册,因此过程非常简单。建议您启用最严格的配置文件,该配置文件仍然允许您想要的流量。由于我们还没有为我们的服务器配置SSL,我们只需要允许端口80上的通信。你可以通过输入:
1 | $ sudo ufw allow 'Nginx HTTP' |
您可以通过输入以下命令来验证:
1 | $ sudo ufw status |
你应该看到HTTP流量允许在显示的输出:
1 2 3 4 5 6 7 8 9 | Output Status: 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地址,你可以通过在你的终端输入以下其中一个来找到它:
1 | $ ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//' |
接下来将会输出几个IP地址。您可以在web浏览器中依次尝试它们。
另一种选择是,你可以从互联网上的其他地方查看哪些IP地址是可访问的:
1 | $ curl -4 icanhazip.com |
在web浏览器地址栏中输出下面的URL
,它应该会带你到Nginx的默认登录页面:
1 | http://server_domain_or_IP |
如果您看到上面的页面,您已经成功安装了Nginx。
步骤2:安装MySQL来管理网站数据
现在我们有了一个web服务器,我们需要安装MySQL,一个数据库管理系统,来存储和管理我们站点的数据。你可以很容易地这个输入安装:
1 | $ sudo apt-get install mysql-server |
当你第一次安装完成后您将被要求提供一个在MySQL系统中使用的根(管理)密码。现在已经安装了MySQL数据库软件,但是它的配置还没有完全完成。为了确保安装的安全,我们可以运行一个简单的安全脚本,它将询问我们是否要修改一些不安全的默认设置。输入以下命令开始脚本:
1 | $ mysql_secure_installation |
这时要求您输入为MySQL根帐户设置的密码。接下来将询问您是否要配置验证密码插件VALIDATE PASSWORD PLUGIN
.。
回答y表示“是”,或者其他任何不启用的情况下继续。
1 2 3 4 5 6 | 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
最强级别,当您试图设置任何不包含数字、大小写字母和特殊字符的密码,或基于普通字典单词的密码时,您将收到错误。
1 2 3 4 5 6 7 | 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: <span class="highlight">1</span> |
如果您启用了密码验证,将显示现有根密码的密码强度,并询问您是否要更改该密码。如果您对当前的密码满意,在提示处输入n表示“no”:
1 2 3 4 | Using existing password for root. Estimated strength of the password: <span class="highlight">100</span> Change the password for root ? ((Press y|Y for Yes, any other key for No) : <span class="highlight">n</span> |
对于其他的问题,您应该在每个提示符处按Y并按回车键。这将删除一些匿名用户和测试数据库,禁用远程根登录,并加载这些新规则,以便MySQL立即尊重我们所做的更改。现在,您的数据库系统已经设置好了,我们可以继续安装下一步。
步骤3:安装PHP进行处理
现在我们已经安装了Nginx来服务我们的页面,安装了MySQL来存储和管理我们的数据。然而,我们仍然没有任何东西可以生成动态内容。我们可以使用PHP。由于Nginx不像其他web服务器那样包含本地PHP处理,我们需要安装PHP -fpm
,它代表“fastCGI进程管理器
”。我们将告诉Nginx
将PHP请求传递给该软件进行处理。我们可以安装这个模块,并获取一个额外的帮助包,它将允许PHP与我们的数据库后端进行通信。
1 | $ sudo apt-get install php-fpm php-mysql |
配置PHP处理器,现在我们已经安装了PHP组件,但是我们需要做一些配置更改,以使我们的设置更加安全。以root权限打开php-fpm
主配置文件:
1 | sudo nano /etc/php/7.0/fpm/php.ini |
我们在这个文件中寻找的是设置cgi.fix_pathinfo
的参数。这将用分号(;)注释掉,并默认设置为“1”。这是一个非常不安全的设置,因为它告诉PHP尝试执行它能找到的最近的文件,如果请求的PHP文件找不到。这基本上允许用户以一种允许他们执行不允许执行的脚本的方式来编写PHP请求。我们将通过取消注释行并将其设置为“0”来更改这两个条件,如下文件/etc/php/7.0/fpm/php.ini
所示:
1 | cgi.fix_pathinfo=0 |
完成后保存并关闭文件。现在,我们只需要重新启动我们的PHP处理器输入:
1 | $ sudo systemctl restart php7.0-fpm |
以上完成了php-fpm
配制,接下来我们在配制网站服务。
步骤4:配置Nginx以使用PHP处理器
现在,我们已经安装了所有必需的组件。我们还需要做的唯一配置更改是告诉Nginx使用我们的PHP处理器来处理动态内容。我们在服务器块级别上执行此操作(服务器块类似于Apache的虚拟主机)。打开默认的Nginx服务器块配置文件,输入:
1 | $ sudo nano /etc/nginx/sites-available/default |
目前,随着注释删除,Nginx默认服务器块文件/etc/nginx/sites-available/default
看起来像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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
文件的location块的注释。Nginx不处理这些文件。如果这些文件碰巧进入了文档根目录,就不应该向访问者提供这些文件。
你需要做的修改配制文件/etc/nginx/sites-available/default
是加粗的文字如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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; } } |
完成上述更改后,可以保存并关闭文件。测试你的配置文件语法错误键入:
1 | $ sudo nginx -t |
如果报告任何错误,请在继续之前返回并重新检查您的文件。当你准备好了重新加载Nginx配置。
1 | $ sudo systemctl reload nginx |
步骤5:创建一个PHP文件来测试配置
您的LEMP堆栈现在应该完全设置好了。我们可以测试它来验证Nginx是否能够正确地将. PHP文件传递给我们的PHP处理器。我们可以通过在文档根目录中创建一个测试PHP文件来实现这一点。在文本编辑器中,在文档根目录中打开一个名为info.php
的新文件:
1 | $ sudo nano /var/www/html/info.php |
在新文件/var/www/html/info.php
中键入或粘贴以下行。这是有效的PHP代码,将返回有关我们的服务器:
1 2 | <?php phpinfo(); |
完成后,保存并关闭文件。现在,您可以在web浏览器中访问这个页面,方法是访问服务器的域名或公共IP地址,后面跟着/info.php:
1 | http://server_domain_or_IP/info.php |
在你的浏览器你应该看到一个由PHP生成的网页,上面有关于你的服务器的信息:
如果您看到这样的页面,那么您已经成功地使用Nginx设置了PHP处理。在验证Nginx正确地呈现页面之后,最好删除您创建的文件,因为它实际上会给未授权用户一些关于您的配置的提示,可能会帮助他们试图进入。如果以后需要,总是可以重新生成这个文件。现在,删除文件输入:
1 | $ sudo rm /var/www/html/info.php |
总结
您现在应该在Ubuntu 16.04服务器上配置了一个LEMP堆栈,这为你向访问者提供web内容提供了一个非常灵活的基础。