介绍
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发布工具:
代码语言:javascript复制sudo yum install centos-release-scl
然后使用以下命令查看可用SCL包的列表:
代码语言:javascript复制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服务:
代码语言:javascript复制sudo systemctl start rh-nginx112-nginx
通过输入systemctl status
命令确认Nginx正在运行:
sudo systemctl status rh-nginx112-nginx
代码语言:javascript复制● 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,这可以通过以下命令来完成:
代码语言:javascript复制sudo yum install firewalld
然后,启动Firewalld服务:
代码语言:javascript复制sudo systemctl start firewalld
接下来,添加一些防火墙规则以允许SSH访问您的服务器,并添加Nginx的HTTP和HTTPS连接:
代码语言:javascript复制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以实现新的防火墙规则:
代码语言:javascript复制sudo firewall-cmd --reload
通过添加这些的防火墙规则,您可以通过访问Web浏览器中的服务器域名或公共IP地址来测试服务器是否已启动和运行。
如果没有指向服务器的域名,并且不知道服务器的公共IP地址,则可以在终端中输入以下内容:
代码语言:javascript复制curl -4 icanhazip.com
在网页浏览器的地址栏中输入产生的IP地址,您将看到Nginx的默认页面:
代码语言:javascript复制http://server_domain_or_IP
如果您看到此页面,您已经成功安装了Nginx。在继续之前,可以使用以下命令设置Nginx自启动:
代码语言:javascript复制sudo systemctl enable rh-nginx112-nginx
现在安装了Nginx服务器,您可以继续安装MariaDB数据库软件。
第三步、安装MariaDB来管理站点数据
现在我们有了一个Web服务器,是时候安装MariaDB了,它是MySQL的替代插件,用于存储和管理站点的数据。使用以下命令安装MariaDB。
代码语言:javascript复制sudo yum install rh-mariadb102
安装完成后,使用以下命令启动MariaDB服务:
代码语言:javascript复制sudo systemctl start rh-mariadb102-mariadb
这样,就可以安装并运行MariaDB。然而,它的配置尚未完成。为了保护安装,MariaDB附带了一个安全脚本,它提示您修改一些不安全的默认设置。通过输入以下命令运行脚本:
代码语言:javascript复制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。使用以下命令可以做到:
代码语言:javascript复制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”来更改这两个条件,如下所示:
代码语言:javascript复制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处理器:
代码语言:javascript复制sudo systemctl start rh-php71-php-fpm
然后启用php-fpm
:
sudo systemctl enable rh-php71-php-fpm
这样,您已经成功地将PHP安装到您的服务器上。但是,它仍然必须配置为与您已安装的其他软件一起工作,以使您的服务器能够正确地服务于您站点的内容。
第五步、配置Nginx以使用PHP处理
此时,您已经安装了LNMP的所有必需组件。您需要进行的配置更改是告诉Nginx将您的PHP处理器用于动态网页展示。此配置更改是在服务器块级别进行的(服务器块类似于Apache的虚拟主机)。通过输入以下命令打开默认的Nginx服务器块配置文件:
代码语言:javascript复制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;
#}
}
...
完成更改后,可以保存文件并退出编辑器。接下来,通过运行以下命令测试配置文件中的语法错误:
代码语言:javascript复制source /opt/rh/rh-nginx112/enable
sudo nginx -t
如果报告了任何错误,请返回并在继续之前重新检查文件。
配置文件有效后,重新加载Nginx以实现您所做的更改:
代码语言:javascript复制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代码,它将返回有关服务器的信息:
代码语言:javascript复制<?php phpinfo(); ?>
完成后,保存并关闭文件。然后,访问服务器的域名或公共IP地址,然后访问Web浏览器中的此页面。/info.php
:
http://server_domain_or_IP/info.php
您将看到PHP生成的包含服务器信息的网页:
如果您看到一个类似于此的页面,您已经成功地使用Nginx设置了PHP。在验证Nginx正确后,最好删除您创建的文件,因为它实际上可以向未经授权的用户提供一些有关您系统配置的提示,这些提示可能会帮助他们入侵。如果以后需要,可以随时重新生成该文件。
通过输入以下内容删除该文件:
代码语言:javascript复制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》