作者选择了 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 套件提供的壳脚本定义了使用所包含的应用程序所需的环境变量,如 PATH
、 LD_LIBRARY_PATH
和 MANPATH
. 这些脚本存储在文件系统中作为 /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. 继续前,请使用以下命令启动 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处理与Nginx。
在验证 Nginx 是否正确渲染页面后,最好删除您创建的文件,因为它实际上可以给未经授权的用户一些关于您的配置的提示,这可能有助于他们尝试打破。
通过键入删除文件:
1sudo rm /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php
通过此,您已经确认了 LEMP 堆栈的所有组件在您的服务器上正确安装和配置。
结论
您现在在 CentOS 7 服务器上拥有完全配置的 LEMP 堆栈,为您的访问者提供非常灵活的基础。
SCL 还用于安装各种版本的软件,并在它们之间切换,您可以通过运行查看系统上所有安装的集合的列表:
1scl --list
如果您感兴趣,您可以在 官方网站上找到有关软件收藏的更多信息。