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

作者选择了 Apache Software Foundation作为 Write for Donations计划的一部分,接受100美元的捐款。

介绍

一个LEMP软件堆栈是一组开源软件,通常被安装在一起,使服务器能够托管动态网站和Web应用程序. 这个术语实际上是一个简称,代表了 L inux操作系统,与 ** E** Nginx网页服务器(取代了LAMP堆栈的Apache组件) 网站数据存储在一个 ** M** ySQL数据库(使用MariaDB),并由 ** P** HP处理动态内容。

LEMP 堆栈组件有时会使用 CentOS 7 EPEL 存储库安装。然而,这个存储库包含过时的软件包,例如,您不能从 EPEL 安装任何高于 5.4.16 的 PHP 版本,尽管这个版本没有得到支持(http://php.net/supported-versions.php)。为了获得更新的软件版本,建议您使用软件集合,也称为 SCL。 SCL 是由 RedHat 提供的开发人员资源集合,允许您在同一系统上使用多个软件版本,而不会影响之前安装的软件包。

在本指南中,您将在 CentOS 7 服务器上安装一个 LEMP 堆栈. CentOS 操作系统负责 Linux 组件。 您将使用 Software Collections 存储库安装剩余的组件,然后将其配置为提供简单的 Web 页面。

前提条件

在开始本教程之前,您应该按照 CentOS 7 初始服务器设置指南(https://andsky.com/tech/tutorials/initial-server-setup-with-centos-7)设置 CentOS 7 服务器,包括一个非 root 用户。

步骤 1 – 启用软件收藏库

若要访问 CentOS 的 SCLs,请安装 CentOS Linux 软件集合版本文件:

1sudo yum install centos-release-scl

使用以下命令查看可用的 SCL 包列表:

1yum --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 套件提供的壳脚本定义了使用所包含的应用程序所需的环境变量,如 PATHLD_LIBRARY_PATHMANPATH. 这些脚本存储在文件系统中作为 /opt/rh/package-name/enable

现在您已经准备好开始安装本指南中描述的包。

步骤 2:安装 Nginx Web 服务器

为了向访问者显示网页,我们将使用现代、高效的网页服务器NGINX。

请确保用您想要安装的 Nginx 版本代替突出值;最新的版本将具有包名称中最高的数字(本文写作时的 112):

1sudo yum install rh-nginx112

完成安装后,请启动 Nginx 服务:

1sudo systemctl start rh-nginx112-nginx

通过输入systemctl status命令确认 Nginx 正在运行:

1sudo systemctl status rh-nginx112-nginx
 1[secondary_label Output]
 2 rh-nginx112-nginx.service - The nginx HTTP and reverse proxy server
 3   Loaded: loaded (/usr/lib/systemd/system/rh-nginx112-nginx.service; disabled; vendor preset: disabled)
 4   Active: active (running) since Fri 2018-03-19 15:15:43 UTC; 1min 17s ago
 5 Main PID: 10556 (nginx)
 6   CGroup: /system.slice/rh-nginx112-nginx.service
 7           ├─10556 nginx: master process /opt/rh/rh-nginx112/root/usr/sbin/nginx
 8           ├─10557 nginx: worker process
 9           └─10558 nginx: worker process
10
11Mar 19 15:15:43 lemp-centos-222 systemd[1]: Starting The nginx HTTP and reverse proxy server...
12Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: the configuration file /etc/opt/rh/rh-nginx... ok
13Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: configuration file /etc/opt/rh/rh-nginx112/...ful
14Mar 19 15:15:43 lemp-centos-222 systemd[1]: Started The nginx HTTP and reverse proxy server.
15Hint: Some lines were ellipsized, use -l to show in full.

在此时,您的服务器可能容易受到未经授权的用户未经授权的访问。 若要解决此问题,请使用 firewalld 设置防火墙。

1sudo yum install firewalld

然后,启动 Firewalld 服务:

1sudo systemctl start firewalld

接下来,添加一些防火墙规则,以允许 SSH 访问您的服务器,以及 HTTP 和 HTTPS 连接到 Nginx:

1sudo firewall-cmd --permanent --add-service=ssh
2sudo firewall-cmd --zone=public --permanent --add-service=http
3sudo firewall-cmd --zone=public --permanent --add-service=https

重新加载 firewalld 以执行新的防火墙规则:

1sudo firewall-cmd --reload

了解有关防火墙d 的更多信息,请参阅 如何在 CentOS 7 上使用防火墙D设置防火墙

随着这些新的防火墙规则的添加,您可以通过访问您的服务器的域名或公共 IP 地址在您的 Web 浏览器中测试服务器是否正在运行。

如果你没有域名指向你的服务器,而你不知道你的服务器的公共IP地址,你可以通过输入你的终端来找到它:

1curl -4 icanhazip.com

将结果的 IP 地址输入到您的 Web 浏览器的地址栏中,您应该看到 Nginx 的默认定位页面:

1http://server_domain_or_IP

Nginx default page

如果您看到此页面,您已成功安装了 Nginx. 继续前,请使用以下命令启动 Nginx 启动:

1sudo systemctl enable rh-nginx112-nginx

现在安装了 Nginx 服务器,您可以继续安装 MariaDB 数据库软件。

步骤 3 — 安装 MariaDB 来管理网站数据

现在,我们有一个Web服务器,是时候安装MariaDB,MySQL的落入替代品,以存储和管理您的网站的数据。

再次,用您想要安装的版本号替换突出的值,最高的数字是最新的可用版本(在本文写作时是102):

1sudo yum install rh-mariadb102

安装完成后,请使用以下命令启动 MariaDB 服务:

1sudo systemctl start rh-mariadb102-mariadb

有了它,MariaDB 已安装并运行,但其配置尚未完成。

为了确保安装,MariaDB 安装了安全脚本,提示您修改一些不安全的默认设置。

1source /opt/rh/rh-mariadb102/enable
2mysql_secure_installation

提示会问你当前的 root 密码. 因为你刚刚安装了 MySQL,你很可能没有一个,所以通过按ENTER来空放它。 然后提示会问你是否想要设置 root 密码。 继续进去,输入Y,然后遵循说明:

 1. . .
 2Enter current password for root (enter for none):
 3OK, successfully used password, moving on...
 4
 5Setting the root password ensures that nobody can log into the MariaDB
 6root user without the proper authorization.
 7
 8Set root password? [Y/n] Y
 9New password: password
10Re-enter new password: password
11Password updated successfully!
12Reloading privilege tables..
13 ... Success!
14. . .

对于其他问题,请通过每个提示按ENTER键来接受默认值. 这将删除一些匿名用户和测试数据库,禁用远程根登录,并加载这些新规则,以便MariaDB立即实施我们所做的更改。

这里要做的最后一件事是允许 MariaDB 启动,请使用以下命令:

1sudo systemctl enable rh-mariadb102-mariadb

此时,您的数据库系统已设置,您可以继续在您的服务器上设置PHP。

步骤 4 – 安装和配置 PHP 用于处理

你现在安装了 Nginx 来服务你的页面,安装了 MariaDB 来存储和管理你的数据,但是,你仍然没有安装任何可以生成动态内容的东西。

由于 Nginx 不会像其他一些 Web 服务器那样包含原生 PHP 处理,所以您需要安装「php-fpm」,即fastCGI 流程管理器

安装此模块,并获取一个帮助包,这将允许PHP与您的数据库后端进行通信。

1sudo yum install rh-php71-php-fpm rh-php71-php-mysqlnd

您的 PHP 组件现在已安装,但您应该做一些微小的配置更改,以加强您的设置的安全性。

打开主php.ini配置文件,使用 root 权限:

1sudo vi /etc/opt/rh/rh-php71/php.ini

在此文件中,寻找设置 cgi.fix_pathinfo 的参数. 此将用半列(;)评论并默认设置为1

这是一个非常不安全的设置,因为它告诉PHP试图执行最接近的文件,如果无法找到所请求的PHP文件。

通过不评论行并将其设置为0来更改这两个条件:

1[label /etc/opt/rh/rh-php71/php.ini]
2cgi.fix_pathinfo=0

完成后保存并关闭文件(按ESC,输入:wq,然后按Enter).

接下来打开 php-fpm 配置文件 www.conf:

1sudo vi /etc/opt/rh/rh-php71/php-fpm.d/www.conf

由于您的服务器上安装了 Nginx,请找到设置用户的行,并将其值从apache更改为nginx:

1[label /etc/opt/rh/rh-php71/php-fpm.d/www.conf]
2user = nginx
3group = nginx

然后保存并关闭文件。

接下来,通过键入开始您的PHP处理器:

1sudo systemctl start rh-php71-php-fpm

然后启用 php-fpm 开始启动:

1sudo systemctl enable rh-php71-php-fpm

但是,它仍然必须配置为与您安装的其他软件一起工作,以允许您的服务器正确地服务您的网站内容。

步骤 5 — 配置 Nginx 以使用 PHP 处理器

此时,您已安装了 LEMP 堆栈所需的所有组件,您唯一需要进行的配置更改是告诉 Nginx 使用您的 PHP 处理器进行动态内容。

此配置更改发生在服务器块级别上(服务器块类似于Apache的虚拟主机)。

1sudo vi /etc/opt/rh/rh-nginx112/nginx/nginx.conf

通过从每个行开始删除英镑符号(# )来解除位置 ~.php$块(处理PHP请求的文件部分,位于服务器块内)及其内容,您还需要更新fastcgi_param选项到SCRIPT FILENAME $document_root$fastcgi_script_name

完成必要的更改后,服务器块将看起来如下:

 1[label /etc/nginx/sites-available/default]
 2...
 3server {
 4    listen 80 default_server;
 5    listen       [::]:80 default_server;
 6    server_name _;
 7    root         /opt/rh/rh-nginx112/root/usr/share/nginx/html;
 8
 9    # Load configuration files for the default server block.
10    include      /etc/opt/rh/rh-nginx112/nginx/default.d/*.conf;
11
12    location / {
13    }
14
15    error_page 404 /404.html;
16    location = /40x.html {
17    }
18
19    error_page 500 502 503 504  /50x.html;
20    location = /50x.html {
21    }
22
23    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
24    #
25    #location ~ \.php$ {
26    #    proxy_pass http://127.0.0.1;
27    #}
28
29    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
30    #
31    location ~ \.php$ {
32        root html;
33        fastcgi_pass 127.0.0.1:9000;
34        fastcgi_index index.php;
35        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
36        include fastcgi_params;
37    }
38
39    # deny access to .htaccess files, if Apache's document root
40    # concurs with nginx's one
41    #
42    #location ~ /\.ht {
43    #    deny all;
44    #}
45}
46...

完成更改后,您可以保存文件并退出编辑器。

接下来,通过运行以下命令来测试配置文件的语法错误:

1source /opt/rh/rh-nginx112/enable
2sudo nginx -t

如果报告了任何错误,请返回并重新检查您的文件,然后继续。

一旦配置文件有效,请重新加载 Nginx 以实现所做的更改:

1sudo systemctl reload rh-nginx112-nginx

现在 Nginx、PHP 和 MariaDB 已安装和配置,只需要确认 LEMP 堆栈配置能够正确地为您的网站访问者提供内容。

步骤 6 — 创建一个PHP文件来测试配置

您的 LEMP 堆栈现在已经完全设置,您可以测试它来验证 Nginx 是否能够正确将.php 文件发送到您的 PHP 处理器。

在文档根中打开一个名为info.php的新文件:

1sudo vi /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

将下列行添加到新文件中. 这是有效的 PHP 代码,将返回有关您的服务器的信息:

1[label /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php]
2<?php phpinfo(); ?>

当你完成时,保存并关闭文件,然后,通过访问你的服务器的域名或公共IP地址,然后访问这个页面在你的Web浏览器中,然后是 /info.php:

1http://server_domain_or_IP/info.php

您将看到一个由PHP生成的网页,其中包含有关您的服务器的信息:

PHP page info

如果你看到一个看起来像这样的页面,你已经成功地设置了PHP处理与Nginx。

在验证 Nginx 是否正确渲染页面后,最好删除您创建的文件,因为它实际上可以给未经授权的用户一些关于您的配置的提示,这可能有助于他们尝试打破。

通过键入删除文件:

1sudo rm /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

通过此,您已经确认了 LEMP 堆栈的所有组件在您的服务器上正确安装和配置。

结论

您现在在 CentOS 7 服务器上拥有完全配置的 LEMP 堆栈,为您的访问者提供非常灵活的基础。

SCL 还用于安装各种版本的软件,并在它们之间切换,您可以通过运行查看系统上所有安装的集合的列表:

1scl --list

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

Published At
Categories with 技术
comments powered by Disqus