CentOS 下安装 LEMP 服务(nginx、MariaDB/MySQL 和 php)

Dan Nanni 的头像

·

·

·

55,800 次阅读

LEMP 组合包是一款日益流行的网站服务组合软件包,在许多生产环境中的核心网站服务上起着强有力的作用。正如其名称所暗示的, LEMP 包是由 Linux、nginx、MariaDB/MySQL 和 PHP 组成的。在传统的 LAMP 包中使用的 Apache HTTP 协议服务器性能低下而且难于大规模集群,相比来说 nginx 的高性能及轻量级等特性,正是其的替代方案。 MariaDB 是一款社区支持驱动的 MySQL 数据库的分支,其功能更多性能更佳。PHP,服务端编程语言,具体是由 PHP FastCGI 的增强版 PHP-FPM 组件来处理,生成网页动态内容。

(LCTT 译注:为何采用 LEMP 而不是 LNMP 的缩写?据 https://lemp.io/ 的解释:Nginx 的发音是 Engine-X,重要的发音而不是首字母,而且 LEMP 实际上是可读的,而 LNMP 看起来只是字母表。)

这篇文章里,我们示范如何在 CentOS 操作平台上安装 LEMP 包。我们安装的目标是 CentOS 6 和 CentOS 7 两个操作平台,如有必要会指出它们的不同。

第一步: Nginx

让我们在 CentOS 上安装 nginx 作为第一步,然后对它作些基本的配置,比如使其能引导时启动和对防火墙做个性化设置

安装 Nginx

让我们从它的官方的 RPM 源来安装一个预构建的稳定版本的 nginx 包。

在 CentOS 7 系统上:

$ sudo rpm --import http://nginx.org/keys/nginx_signing.key
$ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
$ sudo yum install nginx 

在 CentOS 6 系统上:

$ sudo rpm --import http://nginx.org/keys/nginx_signing.key
$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
$ sudo yum install nginx 

注意在安装 nginx RPM 包之前,如果您没有导入 nginx 的官方 GPG 密钥的话,会出一如下所示的警告:

warning: /var/tmp/rpm-tmp.KttVHD: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY

启动 Nginx

安装完成后,nginx 是不会自动启动的。现在让我们来启动它吧,还要做些配置让其可以随着操作系统启动而启动。我们也需要在防火墙里打开 TCP/80 端口,以使得可以远程访问 nginx 的 web 服务。所有这些操作、设置都只需要输入如下命令就可实现。

在 CentOS 7 系统上:

$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
$ sudo firewall-cmd --reload 

在 CentOS 6 系统上:

$ sudo service nginx start
$ sudo chkconfig nginx on
$ sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$ sudo service iptables save 

测试 Nginx

nginx 的默认文档要目录是 /usr/share/nginx/html。默认的 index.html 文件一定已经在这目录下了。让我们检测下是否可以访问到这个测试 web 页,输入 http://nginx的ip地址/ 访问。

如果您看到的是如上所示的页面的话,说明 nginx 已经正常启动。继续往下。

第二步: MariaDB/MySQL

下一步就是安装 LEMP 包的数据库组件。CentOS/RHEL 6 或早期的版本中提供的是 MySQL 的服务器/客户端安装包,但 CentOS/RHEL 7 已使用了 MariaDB 替代了默认的 MySQL。作为 MySQL 的简单替代品,MariaDB 保证了与 MySQL 的 API 和命令行用法方面最大的兼容性。下面是关于怎么在 CentOS 上安装和配置 MaraDB/MySQL 的操作示例。

在 CentOS 7 系统上:

如下所示操作来安装 MariaDB 服务/客户端包以及启动 MariaDB 服务。

$ sudo yum install mariadb-server
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb 

在 CentOS 6 系统上:

如下示,安装 MySQL 服务/客户端包并且启动 MySQL 服务。

$ sudo yum install mysql-server
$ sudo service mysqld start
$ sudo chkconfig mysqld on 

在成功启动 MariaDB/MySQL 服务后,执行在 MariaDB/MySQL 服务包中的脚本。这一次的运行会为为数据库服务器进行一些安全强化措施,如设置(非空)的 root 密码、删除匿名用户、锁定远程访问。

 $ sudo mysql_secure_installation

这就是数据库的设置。现在进行下一步。

第三步: PHP

PHP 是 LEMP 包中一个重要的组件,它负责把存储在 MariaDB/MySQL 服务器的数据取出生成动态内容。为了 LEMP 需要,您至少需要安装上 PHP-FPM 和 PHP-MySQL 两个模块。PHP-FPM(FastCGI 进程管理器)实现的是 nginx 服务器和生成动态内容的 PHP 应用程序的访问接口。PHP-MySQL 模块使 PHP 程序能访问 MariaDB/MySQL 数据库。

安装 PHP 模块

在 CentOS 7 系统上:

$ sudo yum install php php-fpm php-mysql 

在 CentOS 6 系统上:

首先,您需要从仓库中安装 REMI 库(参见本指南),并安装软件包。

$ sudo yum --enablerepo=remi install php php-fpm php-mysql 

在安装 PHP 时,得注意两个地方:

在 CentOS 6 系统中,安装 REMI仓库中最新的 php-mysql 模块时,MySQL 的服务端包和客户端包会被当做一部分依赖包而自动的更新。

在 CentOS 6 和 CentOS 7 中,在安装 PHP 包的同时会把 Apache web 服务器(即 httpd)当做它的依赖包一起安装。这会跟 nginx web 服务器起冲突。这个问题会在下一节来讨论。

取决于您的使用情况,可以使用 yum 命令来定制您的 PHP 引擎,也许会想安装下面的任意一个扩展 PHP 模块包。

  • php-cli: PHP 的命令行界面。从命令行里测试 PHP 时非常有用。
  • php-gd: PHP 的图像处理支持。
  • php-bcmath: PHP 的数学支持。
  • php-mcrypt: PHP 的加密算法支持 (例如 DES、Blowfish、CBC、 CFB、ECB ciphers 等)。
  • php-xml: PHP 的 XML 解析和处理支持。
  • php-dba: PHP 的数据抽象层支持。
  • php-pecl-apc: PHP 加速器/缓存支持。

安装时,要查看可用的 PHP 模块的完整列表的话,可以运行:

$ sudo yum search php- (CentOS 7)
$ sudo yum --enablerepo=remi search php- (CentOS 6)

启动 PHP-FPM

您需要启动 PHP-FPM ,然后把它放到自动启动服务列表。

在 CentOS 7 系统上:

$ sudo systemctl start php-fpm
$ sudo systemctl enable php-fpm

在 CentOS 6 系统上:

$ sudo chkconfig php-fpm on
$ sudo service php-fpm start 

第四步: 配置 LEMP 组合包

本教程的最后一步是调整 LEMP 组合包的配置。

使 Httpd 不可用

首先,让我们把早先随 PHP 包安装的 httpd 服务给禁用掉。

在 CentOS 7 系统上:

$ sudo systemctl disable httpd

在 CentOS 6 系统上:

$ sudo chkconfig httpd off 

配置 Nginx

接下来,让我们配置 nginx 虚拟主机,使得 nginx 可以通过 PHP-FPM 来处理 PHP 的任务。用文本编辑器打开 /etc/nginx/conf.d/default.conf ,然后按如下所示修改。

 $ sudo vi /etc/nginx/conf.d/default.conf 
worker_processes  4;

配置 PHP

接下来,让我们对 PHP 的配置文件 /etc/php.ini 做自定义设置。更具体的就是在 /etc/php.ini 文件中增加以下两行。

cgi.fix_pathinfo=0
date.timezone = "PRC"

为了安全起见,我们希望的是 PHP 解释器只是处理指定文件路径的文件任务,而不是预测搜索一些并不存在的文件任务。上面的第一行起的就是这个作用。(LCTT 译注:原文用的时区是“America/New York”,根据国内情况,应该用 PRC或 Asia 下的中国城市。)

第二行定义的是 PHP 中日期/时间相关函数使用相关的默认时区。使用本指南,找出您所在的时区,并设置相应 date.timezone 的值

测试 PHP

最后,让我们来测试下 nginx 是否能处理 PHP 页面。在测试之前,请确保重启 nginx 和 PHP-FPM。

在 CentOS 7 系统上:

$ sudo systemctl restart nginx
$ sudo systemctl restart php-fpm 

在 CentOS 6 系统上:

$ sudo service nginx restart
$ sudo service php-fpm restart 

创建一个叫名叫 test.php 的文件,然后写入如下内容,并放入 /usr/share/nginx/html 目录。

<?php phpinfo(); ?>

打开浏览器,输入 http://nginx的IP地址/test.php

如果您能看到如上所示的页面,说明设置的 LEMP 完全成功!


via: http://xmodulo.com/install-lemp-stack-centos.html

作者:Dan Nanni 译者:runningwater 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

28 条回复

  1. 微博评论 的头像
    微博评论

    为什么不叫lnmp组合

    来自泉州
  2. 微博评论 的头像
    微博评论

    学学先

    来自泉州
  3. 微博评论 的头像
    微博评论

    不要瞎起名字啊

    来自泉州
  4. 微博评论 的头像
    微博评论

    @Linux中国 人家是首字母组合,哪有把音标写上去的,不要杜撰好吗!你也不是权威

    来自泉州
  5. 微博评论 的头像
    微博评论

    是lnmp

    来自泉州
  6. 微博评论 的头像
    微博评论

    很及时 很有用

    来自泉州
  7. 微博评论 的头像
    微博评论

    不是LNMP吗

    来自泉州
  8. 微博评论 的头像
    微博评论

    有空看!

    来自泉州
  9. 微博评论 的头像
    微博评论

    LEMP是LNMP的小号吗?

    来自北京
  10. 微博评论 的头像
    微博评论

    回复@火云仙圣:又不是我杜撰的。

    来自北京
  11. 微博评论 的头像
    微博评论

    微博不是人工发的吧

    来自北京
  12. 微博评论 的头像
    微博评论

    回复@Linux中国:@Linux中国 即便不是你杜撰的,你也最好改正,错误的东西你也要传播吗?百度都没有,这不是理由!lemp lnmp希望你百度下

    来自北京
  13. 微博评论 的头像
    微博评论

    不知道何时出现了一个LEMP的缩写法,究竟应该称之为LNMP还是LEMP?支持LNMP的点"支持",支持LEMP的请"评论"。//@RSnoder:LEMP是LNMP的小号吗?

    来自北京
  14. 微博评论 的头像
    微博评论

    每次在openSUSE上部署都会有问题。到底是英语不过关。

    来自北京
  15. 微博评论 的头像
    微博评论

    是LNMP吧?

    来自北京
  16. 微博评论 的头像
    微博评论

    回复@火云仙圣:国外原文如此,而且不是一个地方这样说,话说好像lnmp才是我们国内杜撰的。

    来自北京
  17. 微博评论 的头像
    微博评论

    回复@Linux中国:好吧,尊重原文也对。

    来自北京
  18. GongBiao 的头像
    GongBiao

    哇,LEMP这个高端呀,有时间要测试研究一下!

    来自长沙
  19. 来自 - 广东佛山 的 Firefox/Windows 用户 的头像
    来自 – 广东佛山 的 Firefox/Windows 用户

    LEMP?LNMP?大家弄明白再评论吧,反正小编没乱搞

    来自佛山
  20. 来自 - 江西南昌 的 MSIE/Windows 用户 的头像
    来自 – 江西南昌 的 MSIE/Windows 用户

    百度了,lemp也可以这么叫,Nginx 发音为 Engine X….

    来自南昌
  21. 微博评论 的头像
    微博评论

    @蓝蓝小脚丫 挺好的!

  22. IAMblacker 的头像
    IAMblacker

    最后放test.php的文件夹位置错了~~~nginx配置文件里面是/usr/share/nginx/html,小编你写放在 /var/www/html/ 目录~~~~

    来自南昌
  23. linux 的头像
    linux

    谢谢指正!我修改啦~~

    来自北京
  24. 灰度龙 的头像
    灰度龙

    配置nginx的default.conf文件完成后,重启出现如下错误:
    nginx.service – nginx – high performance web server
       Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
       Active: failed (Result: exit-code) since 日 2015-06-14 21:30:10 CST; 45s ago
         Docs: http://nginx.org/en/docs/
      Process: 4954 ExecStop=/bin/kill -s QUIT $MAINPID (code=exited, status=0/SUCCESS)
      Process: 6469 ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)
    Main PID: 1695 (code=exited, status=0/SUCCESS)

    6月 14 21:30:10 localhost.localdomain systemd[1]: Starting nginx – high performance web server…
    6月 14 21:30:10 localhost.localdomain nginx[6469]: nginx: [emerg] invalid number of arguments in "try_files" directive in /e…onf:34
    6月 14 21:30:10 localhost.localdomain nginx[6469]: nginx: configuration file /etc/nginx/nginx.conf test failed
    6月 14 21:30:10 localhost.localdomain systemd[1]: nginx.service: control process exited, code=exited status=1
    6月 14 21:30:10 localhost.localdomain systemd[1]: Failed to start nginx – high performance web server.
    6月 14 21:30:10 localhost.localdomain systemd[1]: Unit nginx.service entered failed state.
    Hint: Some lines were ellipsized, use -l to show in full.
    当我去除不是很理解的:try_files $uri =404;这行后,重启正常。请问这行是怎么意思呢?

    来自上海
  25. linux 的头像
    linux

    有关 try_files 的解释可参见: http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
    在 0.7.51 之后,才支持 =404 这样的数字参数,所以请确认你没写错,你的 nginx 版本足够新。

    来自北京
  26. odo [Iron|Windows 7] 的头像
    odo [Iron|Windows 7]

    $ sudo yum php php-fpm php-mysql    此处命令是不是少了个install??

    来自东莞
  27. linux [Chrome 55.0|Mac 10.11] 的头像
    linux [Chrome 55.0|Mac 10.11]

    确实

    来自张家口
  28. odo [QQ Browser 9.5|Windows 7] 的头像
    odo [QQ Browser 9.5|Windows 7]

    原文,作者也是少了,挺粗心的哈…新手安装,肯定会莫名其妙。^_^

    来自韶关

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注