作者选择Apache Software Foundation作为Write for DOnations计划的一部分,获得100美元的捐赠。
介绍
LEMP软件是一组开源软件,通常安装在一起使服务器能够托管动态网站和Web应用程序。 这个术语实际上是一个代表L inux操作系统的首字母缩写,其中E Nginx Web服务器(取代了LAMP的Apache组件)。 站点数据存储在M ySQL数据库(使用MariaDB)中,动态内容由P HP处理。
LEMP组件有时使用CentOS 7 EPEL存储库进行安装。 但是,此存储库包含过时的软件包。 例如,您不能从EPEL安装任何高于5.4.16的PHP版本,即使此版本长时间不受支持。 为了获得更新版本的软件,建议您使用软件集合,也称为SCL。 SCL是由RedHat提供的开发人员资源的集合,它允许您在同一系统上使用多个版本的软件,而不影响以前安装的软件包。
在本指南中,您将在CentOS 7服务器上安装LEMP。 CentOS操作系统负责Linux组件。 您将使用软件集合存储库安装其余组件,然后将其配置为提供简单的网页。
先决条件
在开始本教程之前,您应该按照CentOS 7初始服务器设置指南设置CentOS 7服务器 ,其中包括sudo非root用户。
第1步 - 启用软件集合存储库
为了访问CentOS的SCL,安装CentOS Linux软件集合版本文件:
sudo yum install centos-release-scl
使用以下命令查看可用的SCL包列表:
yum --disablerepo='*' --enablerepo='centos-sclo-rh' --enablerepo='centos-sclo-sclo' list available
为避免任何系统范围的冲突,SCL软件包安装在/opt/rh
目录中。 例如,您可以在CentOS 7机器上安装Python 3.5而不删除或干扰Python 2.7。
SCL软件包的所有配置文件都存储在/etc/opt/rh/
目录中的相应目录中。 SCL包提供了shell脚本,用于定义使用包含的应用程序(如PATH
, LD_LIBRARY_PATH
和MANPATH
所需的环境变量。 这些脚本作为/opt/rh/ package-name /enable
存储在文件系统中。
现在您已准备好开始安装本指南中概述的软件包。
第2步 - 安装Nginx Web服务器
为了向访问者显示网页,我们将采用Nginx,一个现代,高效的Web服务器。
使用以下yum
命令安装Nginx。 确保使用您要安装的Nginx版本替换突出显示的值; 最新版本的软件包名称中包含最多的数字(本文撰写时为112
):
sudo yum install rh-nginx112
一旦完成安装,请启动Nginx服务:
sudo systemctl start rh-nginx112-nginx
通过输入systemctl status
命令确认Nginx正在运行:
sudo systemctl status rh-nginx112-nginx
Output● rh-nginx112-nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/rh-nginx112-nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2018-03-19 15:15:43 UTC; 1min 17s ago
Main PID: 10556 (nginx)
CGroup: /system.slice/rh-nginx112-nginx.service
├─10556 nginx: master process /opt/rh/rh-nginx112/root/usr/sbin/nginx
├─10557 nginx: worker process
└─10558 nginx: worker process
Mar 19 15:15:43 lemp-centos-222 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: the configuration file /etc/opt/rh/rh-nginx... ok
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: configuration file /etc/opt/rh/rh-nginx112/...ful
Mar 19 15:15:43 lemp-centos-222 systemd[1]: Started The nginx HTTP and reverse proxy server.
Hint: Some lines were ellipsized, use -l to show in full.
此时,您的服务器可能容易受到未授权用户的未经授权的访问。 要解决这个问题,请使用firewalld设置防火墙。 您可能需要先安装firewalld,可以使用以下命令完成:
sudo yum install firewalld
然后,启动firewalld服务:
sudo systemctl start firewalld
接下来,添加一些防火墙规则以允许SSH访问您的服务器,以及HTTP和HTTPS连接到Nginx:
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https
重新加载firewalld以实施新的防火墙规则:
sudo firewall-cmd --reload
如何在CentOS 7上使用FirewallD设置防火墙,详细了解firewalld。
通过添加这些新的防火墙规则,您可以通过在Web浏览器中访问服务器的域名或公共IP地址来测试服务器是否启动并运行。
如果您没有指向服务器的域名,并且您不知道服务器的公有IP地址,则可以在终端中输入以下内容来查找它:
curl -4 icanhazip.com
在网络浏览器的地址栏中输入结果IP地址,您应该看到Nginx的默认登录页面:
http://server_domain_or_IP
如果你看到这个页面,你已经成功安装了Nginx。 在继续之前,使用以下命令启用Nginx启动引导:
sudo systemctl enable rh-nginx112-nginx
现在已经安装了Nginx服务器,您可以继续安装MariaDB数据库软件。
第3步 - 安装MariaDB来管理站点数据
现在我们有了一个Web服务器,现在是时候安装MariaDB的替代品,以便为您的网站存储和管理数据。
使用以下命令安装MariaDB。 同样,将高亮显示的值替换为您想要安装的版本号,最高版本号是最新版本(本文撰写时为102
):
sudo yum install rh-mariadb102
安装完成后,使用以下命令启动MariaDB服务:
sudo systemctl start rh-mariadb102-mariadb
与此同时,MariaDB已安装并正在运行。 但是,其配置尚未完成。
为了确保安装,MariaDB安装了一个安全脚本,提示您修改一些不安全的默认设置。 输入以下命令来运行脚本:
source /opt/rh/rh-mariadb102/enable
mysql_secure_installation
提示符会询问您当前的root密码。 由于您刚刚安装了MySQL,因此很可能不会有一个,因此请按ENTER
将其留空。 然后提示符会询问您是否要设置root密码。 继续并输入Y
,然后按照说明进行操作:
. . .
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorization.
Set root password? [Y/n] Y
New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
... Success!
. . .
对于其余的问题,通过每个提示按ENTER
键接受默认值。 这将删除一些匿名用户和测试数据库,禁用远程root登录,并加载这些新规则,以便MariaDB立即实现我们所做的更改。
这里要做的最后一件事是让MariaDB在启动时启动。 使用以下命令来执行此操作:
sudo systemctl enable rh-mariadb102-mariadb
此时,您的数据库系统现在已经建立,您可以继续在服务器上设置PHP。
第4步 - 安装和配置PHP进行处理
您现在已经安装了Nginx来为您的页面提供服务并安装MariaDB以存储和管理您的数据。 但是,您仍然没有安装可以生成动态内容的任何内容。 这是PHP进来的地方。
由于Nginx不像其他Web服务器那样包含本机PHP处理,因此您需要安装php-fpm
,它代表“fastCGI进程管理器”。 稍后,您将配置Nginx将PHP请求传递给该软件进行处理。
安装这个模块,并获取一个帮助程序包,它允许PHP与数据库后端进行通信。 安装将引入必要的PHP核心文件。 输入以下内容来完成此操
sudo yum install rh-php71-php-fpm rh-php71-php-mysqlnd
你的PHP组件现在已经安装好了,但是为了提高你的安装的安全性,你应该做一些小的配置改变。
以root权限打开主php.ini
配置文件:
sudo vi /etc/opt/rh/rh-php71/php.ini
在这个文件中,查找设置cgi.fix_pathinfo
的参数。 这将用分号(;)注释掉,默认设置为“1”。
这是一个非常不安全的设置,因为它告诉PHP尝试执行最近的文件,如果找不到请求的PHP文件,它可以找到它。 这基本上允许用户以一种允许他们执行脚本的方式制作PHP请求,而这些脚本不应该被允许执行。
通过取消注释并将其设置为“0”来更改这两个条件:
cgi.fix_pathinfo=0
完成后保存并关闭文件(按ESC
,输入:wq
,然后按Enter
)。
接下来,打开php-fpm配置文件www.conf
:
sudo vi /etc/opt/rh/rh-php71/php-fpm.d/www.conf
默认情况下,该文件被配置为与Apache服务器一起使用。 由于您的服务器上已安装Nginx,请查找设置user
和group
并将其值从“apache”更改为“nginx”:
user = nginx
group = nginx
然后保存并关闭文件。
接下来,输入以下命令来启动您的PHP处理器
sudo systemctl start rh-php71-php-fpm
然后启用启动时启动php-fpm:
sudo systemctl enable rh-php71-php-fpm
有了这个,你已经成功地将PHP安装到你的服务器上。 但是,它仍然必须配置为与您安装的其他软件一起工作,以便您的服务器正确地为您的网站内容提供服务。
第5步 - 配置Nginx使用PHP处理器
此时,您已安装了LEMP的所有必需组件。 您仍然需要做的唯一配置更改是告诉Nginx使用您的PHP处理器来处理动态内容。
此配置更改在服务器块级别上进行(服务器块与Apache的虚拟主机类似)。 输入以下命令打开默认的Nginx服务器模块配置文件:
sudo vi /etc/opt/rh/rh-nginx112/nginx/nginx.conf
通过从每行的开头删除磅符号(#),取消注释location ~ \.php$
block(处理PHP请求的文件段,可在server
块中找到)及其内容。 您还需要更新fastcgi_param
选项,如下面红色部分所示。 更新这一行将通知PHP它可以找到要处理的文件的文档根目录的位置。
进行必要的更改后, server
块将如下所示:
...
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /opt/rh/rh-nginx112/root/usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/opt/rh/rh-nginx112/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
...
当您进行更改时,您可以保存该文件并退出编辑器。
接下来,通过运行以下命令来测试配置文件的语法错误:
source /opt/rh/rh-nginx112/enable
sudo nginx -t
如果有任何错误报告,请返回并重新检查您的文件,然后再继续。
一旦您的配置文件有效,请重新加载Nginx以实施您所做的更改:
sudo systemctl reload rh-nginx112-nginx
既然已经安装并配置了Nginx,PHP和MariaDB,那么剩下要做的就是确认LEMP配置能够正确地向网站访问者提供内容。
第6步 - 创建一个PHP文件来测试配置
您的LEMP现在已经完成设置,您可以对其进行测试,以验证Nginx能够将.php
文件正确地传送到您的PHP处理器。 这是通过在我们的文档根中创建一个测试PHP文件来完成的。
在文档根目录中打开一个名为info.php
的新文件:
sudo vi /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php
将以下行添加到新文件。 这是有效的PHP代码,将返回有关您的服务器的信息:
<?php phpinfo(); ?>
完成后,保存并关闭文件。 然后,访问您的服务器的域名或公共IP地址,然后/info.php
,在您的Web浏览器中访问此页面:
http://server_domain_or_IP/info.php
您将看到一个由PHP生成的网页,其中包含有关您的服务器的信息:
如果你看到一个看起来像这样的页面,你已经成功地用Nginx设置了PHP处理。
验证Nginx正确呈现页面后,最好移除您创建的文件,因为它实际上可以为未经授权的用户提供关于您的配置的一些提示,以帮助他们尝试插入。如果以后需要,可以随时重新生成该文件。
输入以下命令删除文件:
sudo rm /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php
因此,您已确认您的LEMP的所有组件都已在服务器上正确安装和配置。
结论
您现在在您的CentOS 7服务器上拥有完全配置的LEMP。 这为您为访问者提供Web内容提供了非常灵活的基础。
SCL也用于安装各种版本的软件并在它们之间切换。 您可以运行以下命令查看系统上所有已安装集合的列表:
scl --list
如果感兴趣,您可以在官方网站上找到关于软件收藏的更多信息。