介绍
LEMP软件堆栈是一组开源软件,通常安装在一起,以使服务器能够托管动态网站和网络应用程序。该术语实际上是代表L inux操作系统的首字母缩写,使用E Nginx Web服务器(替代LAMP堆栈的Apache组件)。站点数据存储在M ySQL数据库(使用MariaDB)中,动态内容由P HP 处理。
在本指南中,我们将在CentOS 7 VPS上安装一个LEMP堆栈。CentOS将满足我们的第一个要求:一个Linux操作系统。
注:该LEMP堆栈可以自动在您的雾滴通过添加安装这个脚本启动时,它的用户数据。请阅读本教程,了解有关Droplet用户数据的更多信息。
先决条件
在开始本指南之前,您应该在您的服务器上设置一个单独的非root用户帐户。您可以通过完成CentOS 7初始服务器设置中的步骤1-4来了解如何执行此操作。
关于SELinux的注意事项:如果遇到Nginx未运行的问题,请确保您的Nginx配置文件的SELinux上下文正确或将SELinux模式更改为permissive
或disabled
。
第一步 - 安装Nginx
为了将网页显示给我们的网站访问者,我们将使用Nginx,一个现代化的高效网页服务器。
要添加CentOS 7 EPEL存储库,请打开终端并使用以下命令:
- sudo yum install epel-release
由于我们正在使用sudo
命令,这些操作将以root权限执行。它会询问您的常规用户密码,以验证您是否具有使用root权限运行命令的权限。
现在,您的服务器上安装了Nginx存储库,请使用以下yum
命令安装Nginx :
- sudo yum install nginx
之后,您的Web服务器已安装。
一旦安装,您可以在VPS上启动Nginx:
- sudo systemctl start nginx
您可以立即进行现场检查,以通过访问您的网络浏览器中的服务器的公共IP地址来验证一切都按计划进行(请参阅下一个标题下的注释,以了解您的公共IP地址是否没有此信息已经):
您将看到默认的CentOS 7 Nginx网页,这是为了信息和测试目的。它应该看起来像这样:
如果您看到此页面,则您的Web服务器现在已正确安装。
在继续之前,您将要做的是启用Nginx启动。使用以下命令执行此操作:
- sudo systemctl enable nginx
如何找到您的服务器的公共IP地址
如果您不知道您的服务器的公共IP地址是什么,您可以通过多种方法找到它。通常,这是您通过SSH连接到服务器的地址。
从命令行,你可以找到这几种方法。首先,您可以使用这些iproute2
工具通过键入以获取您的地址:
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
这将给你一两行。它们都是正确的地址,但是您的计算机可能只能使用其中的一个,所以请随时尝试一个。
另一种方法是使用外部方式告诉您它如何看到您的服务器。您可以通过向特定服务器询问您的IP地址来做到这一点:
- curl http://icanhazip.com
无论您用来获取IP地址的方法如何,您都可以将其输入到Web浏览器的地址栏中,以访问您的服务器。
第二步 - 安装MySQL(MariaDB)
现在我们的Web服务器启动并运行了,现在是安装MariaDB的时候了,这是一个MySQL插件替换。MariaDB是MySQL关系数据库管理系统的社区开发的分支。基本上,它将组织和访问我们的网站可以存储信息的数据库。
再次,我们可以yum
用来获取和安装我们的软件。这一次,我们还将安装一些其他“帮助”软件包,帮助我们使组件相互通信:
- sudo yum install mariadb-server mariadb
安装完成后,我们需要使用以下命令启动MariaDB:
- sudo systemctl start mariadb
现在我们的MySQL数据库正在运行,我们想要运行一个简单的安全脚本,它将删除一些危险的默认值,并锁定对我们的数据库系统的访问。运行以下操作启动交互式脚本:
- sudo mysql_secure_installation
提示将询问您当前的root密码。既然你刚刚安装了MySQL,你很可能没有一个,所以按Enter键留空。那么提示将询问您是否要设置root密码。继续输入Y
,并按照以下步骤进行:
对于其余的问题,您应该通过每个提示点击“ENTER”键接受默认值。这将删除一些示例用户和数据库,禁用远程root登录,并加载这些新规则,以便MySQL立即尊重我们所做的更改。
您最后要做的就是启动MariaDB。使用以下命令执行此操作:
- sudo systemctl enable mariadb
此时,您的数据库系统现在已经建立起来,我们可以继续前进。
第三步 - 安装PHP
PHP是我们设置的组件,它将处理代码以显示动态内容。它可以运行脚本,连接到我们的MySQL数据库以获取信息,并将处理的内容交给我们的Web服务器进行显示。
我们可以再次利用yum
系统来安装我们的组件。我们还将包括php-mysql和php-fpm软件包:
- sudo yum install php php-mysql php-fpm
配置PHP处理器
我们现在已经安装了我们的PHP组件,但是我们需要进行一些轻微的配置更改,使我们的安装更加安全。
使用root权限打开主php-fpm配置文件:
- sudo vi /etc/php.ini
我们在这个文件中寻找的是设置cgi.fix_pathinfo的参数。这将被分号与分号(;),默认设置为“1”。
这是一个非常不安全的设置,因为它告诉PHP尝试执行最接近的文件,如果PHP文件不完全匹配,它可以找到。这基本上将允许用户以允许他们执行不应该被允许执行的脚本的方式来制作PHP请求。
我们将通过取消注释行并将其设置为“0”来更改这两个条件:
cgi.fix_pathinfo=0
完成后保存并关闭文件。
接下来,打开php-fpm配置文件www.conf
:
- sudo vi /etc/php-fpm.d/www.conf
找到指定listen
参数的行,并更改它,如下所示:
listen = /var/run/php-fpm/php-fpm.sock
接下来,找到设置的线条listen.owner
和listen.group
并取消他们。他们应该是这样的:
listen.owner = nobody
listen.group = nobody
最后,找到设置user
并将group
其值从“apache”更改为“nginx”的行:
user = nginx
group = nginx
然后保存并退出。
现在,我们只需要键入以下命令即可启动PHP处理器:
- sudo systemctl start php-fpm
这将实施我们所做的改变。
接下来,启用php-fpm启动启动:
- sudo systemctl enable php-fpm
第四步 - 配置Nginx来处理PHP页面
现在,我们已经安装了所有必需的组件。我们仍然需要做的唯一配置更改是告诉Nginx将我们的PHP处理器用于动态内容。
我们在服务器块级别(服务器块类似于Apache的虚拟主机)执行此操作。通过键入以下内容打开默认的Nginx服务器块配置文件:
- sudo vi /etc/nginx/conf.d/default.conf
目前,删除注释后,Nginx默认服务器块如下所示:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
我们需要对我们网站的这个文件做一些修改。
- 首先,我们需要添加一个index.php选项作为我们的索引指令的第一个值,以允许在索引目录时提供PHP索引文件
- 我们还需要修改server_name指令以指向我们服务器的域名或公共IP地址
- 实际的配置文件包括一些定义错误处理例程的注释行。我们将取消这些功能的含义
- 对于实际的PHP处理,我们需要取消注释另一部分的一部分。我们还需要添加一个try_files指令,以确保Nginx不会将错误的请求传递给我们的PHP处理器
您需要做的更改在下面的文本中为红色。如果您愿意,您可以复制并粘贴所有内容,然后用server_name
相应的域名或IP地址替换值:
server {
listen 80;
server_name server_domain_name_or_IP;
# note that these lines are originally from the "location /" block
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
进行上述更改后,可以保存并关闭文件。
重新启动Nginx进行必要的更改:
- sudo systemctl restart nginx
第五步 - 在Web服务器上测试PHP处理
为了测试我们的系统正确配置PHP,我们可以创建一个非常基本的PHP脚本。
我们会把这个脚本叫做info.php
。为了让Apache找到文件并正确地提供文件,它必须保存到一个非常具体的目录中,这被称为“web root”。
在CentOS 7中,该目录位于/usr/share/nginx/html/
。我们可以通过键入以下内容在该位置创建文件:
- sudo vi /usr/share/nginx/html/info.php
这将打开一个空白文件。我们想在文件中放入以下文本,这是有效的PHP代码:
<?php phpinfo(); ?>
完成后,保存并关闭文件。
现在我们可以测试我们的Web服务器是否可以正确显示PHP脚本生成的内容。要想这样做,我们只需要在网页浏览器中访问这个页面。您将需要您的服务器的公共IP地址。
您要访问的地址将是:
你所来的页面应该是这样的:
这个页面从PHP的角度基本上给出了关于你的服务器的信息。它对于调试和确保您的设置正确应用是有用的。
如果这是成功的,那么你的PHP正在按预期工作。
您可能想在此测试后删除此文件,因为它实际上可能会向未经授权的用户提供有关您的服务器的信息。为此,您可以键入以下内容:
- sudo rm /usr/share/nginx/html/info.php
如果您以后再次访问该信息,您可以随时重新创建此页面。
结论
现在你已经安装了一个LEMP堆栈,你有很多选择下一步做什么。基本上,您已经安装了一个平台,允许您在服务器上安装大多数网站和网络软件。