如何在CentOS 7安装网页服务器(LNMP)

介绍

LNMP是一组可用于为动态网页和Web应用程序提供服务的软件。这是一个描述Linux操作系统的首字母缩略词,带有Nginx Web服务器。后端数据存储在MySQL数据库中,动态处理由PHP 处理。

  • Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
  • Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
  • Mysql是一个小型关系型数据库管理系统。
  • PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。

这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

LNMP组件有时使用CentOS 7Epel储存库安装。但是,这个存储库安装包太旧。例如,您不能从Epel安装任何高于5.4.16的PHP版本。为了获得更新版本的软件,建议您使用Software Collections(也称为SCLS)。SCLS是RedHat提供的开发人员资源的集合,它允许您在同一系统上使用多个版本的软件,而不影响以前安装的软件包。

在本教程中,您将在CentOS 7服务器上安装一个LNMP。您将使用Software Collection存储库安装其余组件,然后将其配置为服务于一个简单的网页。

准备

在开始本教程之前,您应该先获取一台已经设置好可以使用sudo命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器

在您的服务器上启用防火墙,如果您使用的是腾讯云的CVM服务器,您可以直接在腾讯云控制台中的安全组进行设置。

第一步、启用软件集合存储库

我们先安装安装CentOS Linux Software Collections发布工具:

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的文件中.

现在,您可以开始安装本教程中的软件包了。

第二步、安装NginxWeb服务器

为了向访问者展示网页,我们将使用Nginx,一种现代化、高效的Web服务器。使用以下yum命令安装Nginx。请确和你想要安装的Nginx版本;

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访问您的服务器,并添加Nginx的HTTP和HTTPS连接:

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

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

如果没有指向服务器的域名,并且不知道服务器的公共IP地址,则可以在终端中输入以下内容:

curl -4 icanhazip.com

在网页浏览器的地址栏中输入产生的IP地址,您将看到Nginx的默认页面:

http://server_domain_or_IP

如果您看到此页面,您已经成功安装了Nginx。在继续之前,可以使用以下命令设置Nginx自启动:

sudo systemctl enable rh-nginx112-nginx

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

第三步、安装MariaDB来管理站点数据

现在我们有了一个Web服务器,是时候安装MariaDB了,它是MySQL的替代插件,用于存储和管理站点的数据。使用以下命令安装MariaDB。

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,所以可能没有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。

第四步、安装和配置PHP以进行处理

现在您已经安装了Nginx来服务您的页面,并安装了MariaDB来存储和管理您的数据。但是,您仍然没有安装任何可以生成动态网站内容工具。所以我们要安装PHP。

由于Nginx不像其他Web服务器一样包含PHP脚本解释器,所以需要安装php-fpm。稍后,您将配置Nginx将PHP请求传递给php-fpm进行处理。

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,找到usergroup的行,并将它们的值从“Apache”更改为“nginx”:

user = nginx
group = nginx

然后保存并关闭文件。接下来,输入以下命令启动PHP处理器:

sudo systemctl start rh-php71-php-fpm

然后启用php-fpm

sudo systemctl enable rh-php71-php-fpm

这样,您已经成功地将PHP安装到您的服务器上。但是,它仍然必须配置为与您已安装的其他软件一起工作,以使您的服务器能够正确地服务于您站点的内容。

第五步、配置Nginx以使用PHP处理

此时,您已经安装了LNMP的所有必需组件。您需要进行的配置更改是告诉Nginx将您的PHP处理器用于动态网页展示。此配置更改是在服务器块级别进行的(服务器块类似于Apache的虚拟主机)。通过输入以下命令打开默认的Nginx服务器块配置文件:

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

取消注释location ~ \.php$及其内容,方法是从每一行的开头移除(#)。您还需要更改fastcgi_param选项为SCRIPT FILENAME $document_root$fastcgi_script_name。进行必要的更改后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,那么只需要确认LNMP配置是否能够正确地为站点的访问者提供内容。

第六步、创建用于测试配置的PHP文件

您的LNMP现在已经完全设置,您可以对它进行测试,以验证nginx是否能够正确地处理。.php文件发送到PHP处理器。这是通过在我们的文档根目录中创建一个测试PHP文件来完成的。

在文档root目录中新建一个名为info.php的文件:

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

将以下一行添加到新文件中。这是PHP代码,它将返回有关服务器的信息:

<?php phpinfo(); ?>

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

http://server_domain_or_IP/info.php

您将看到PHP生成的包含服务器信息的网页:

如果您看到一个类似于此的页面,您已经成功地使用Nginx设置了PHP。在验证Nginx正确后,最好删除您创建的文件,因为它实际上可以向未经授权的用户提供一些有关您系统配置的提示,这些提示可能会帮助他们入侵。如果以后需要,可以随时重新生成该文件。

通过输入以下内容删除该文件:

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

这样,您已经确认在您的服务器上正确安装和配置了LNMP的所有组件。

结语

您现在CentOS 7服务器上有了一个完全配置的LNMP。这为您提供了一个非常灵活的基础,为您的访问者提供网页内容。感谢您的阅读,更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《How to Install and Configure a LEMP Stack using Software Collections on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑白安全

8种DOS命令

  它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:...

2222
来自专栏程序员互动联盟

【专业技术】Chromium浏览器的Content模块设计意图

Content 模块概述 “content”模块放在src \content里面,并使用多进程浏览器沙盒模块来呈现页面所需的核心代码。它包括所有的网络平台功能(...

3067
来自专栏WD学习记录

Linux学习笔记(1)

计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。操作系统接管硬件后,首先读入/boot目录下的文件。

2091
来自专栏云计算教程系列

如何在Ubuntu上使用Webhooks和Slack部署React

Webhook,也就是人们常说的钩子,是一个很有用的工具。你可以通过定制 Webhook 来监测你在 Github.com 上的各种事件,最常见的莫过于 pus...

2332
来自专栏老码农专栏

原 荐 介绍一个 Java 程序运行时版本信

2248
来自专栏企鹅号快讯

如何搭建Nginx服务器做到负载均衡?

小白,这是一篇关于:使用tomcat和Nginx进行配合做负载均衡和静态与动态资源分配的文章,春招前学一下~ 好的,大佬! 1.什么是Nginx? Nginx也...

3195
来自专栏小狼的世界

Gearman的问题分析与深入研究

Gearman作为一个优秀的分布式解决方案,已经被众多的公司或者团队所采用,我在之前的一篇文章中也有过介绍。但是目前对于woker的执行状态和结果监控,特别是放...

1152
来自专栏散尽浮华

Tomcat集群环境下session共享方案梳理(1)-通过memcached(MSM)方法实现

对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块。要实现这一点...

9129
来自专栏王亮的专栏

基于腾讯云大数据套件 TBDS 的 flume 异常问题排查过程

长期运营中发现部署了 flume 集群的磁盘满,经过排查发现 flume 的日志目录导致。这里记录下来我的具体排查过程及解决方案。

3.1K3
来自专栏Java帮帮-微信公众号-技术文章全总结

Loadrunner11的使用图解,测试并发,性能等的具体步骤

每次开启电脑都需要破解一次Lr,汉化版的有问题,建议使用英文版的。我测试的环境是Windows7+IE8+LR11。(在Windows10上试过,谷歌和IE11...

1583

扫码关注云+社区

领取腾讯云代金券