如何在CentOS 7上使用软件集合安装和配置LEMP

在本指南中,我们将演示如何在CentOS 7服务器上安装LEMP。 CentOS操作系统负责第一项要求(即Linux)。我们将介绍如何使用软件集合安装其余组件,然后将其配置为提供简单的网页。

作者选择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脚本,用于定义使用包含的应用程序(如PATHLD_LIBRARY_PATHMANPATH所需的环境变量。 这些脚本作为/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
● 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。 在继续之前,使用以下命令启用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”来更改这两个条件:

71 / php.ini'> / etc / opt / rh / rh-php 71 /php.ini
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,请查找设置usergroup并将其值从“apache”更改为“nginx”:

71 / php-fpm.d / www.conf'> / etc / opt / rh / rh-php 71 /php-fpm.d/www.conf
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块将如下所示:

在/ etc / nginx的/网站可用/默认
...
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代码,将返回有关您的服务器的信息:

112 / root / usr / share / nginx / html / info.php'> / opt / rh / rh-nginx 112 /root/usr/share/nginx/html/info.php
<?php phpinfo(); ?>

完成后,保存并关闭文件。 然后,访问您的服务器的域名或公共IP地址,然后/info.php ,在您的Web浏览器中访问此页面:

http://server_domain_or_IP/info.php

您将看到一个由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

如果感兴趣,您可以在官方网站上找到关于软件收藏的更多信息。