天天看点

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

centos 下安装 lemp 服务(nginx、mariadb/mysql 和 php)

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

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

<a target="_blank"></a>

让我们从它的官方的 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 -ivh http://nginx.org/packages/centos/6/noarch/rpms/nginx-release-centos-6-0.el6.ngx.noarch.rpm

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

warning: /var/tmp/rpm-tmp.kttvhd: header v4 rsa/sha1 signature, key id 7bd9bf62: nokey

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

$ sudo systemctl start nginx

$ sudo systemctl enable nginx

$ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent

$ sudo firewall-cmd --reload

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

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

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

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

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

$ sudo yum install mariadb-server

$ sudo systemctl start mariadb

$ sudo systemctl enable mariadb

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

$ sudo yum install mysql-server

$ sudo service mysqld start

$ sudo chkconfig mysqld on

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

$ sudo mysql_secure_installation

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

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

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

$ sudo yum install php php-fpm php-mysql

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

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

在安装 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 ,然后把它放到自动启动服务列表。

$ sudo systemctl start php-fpm

$ sudo systemctl enable php-fpm

$ sudo chkconfig php-fpm on

$ sudo service php-fpm start

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

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

$ sudo systemctl disable httpd

$ sudo chkconfig httpd off

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

$ sudo vi /etc/nginx/conf.d/default.conf

server {

listen 80;

server_name www.server_domain.com;

root /usr/share/nginx/html;

index index.php index.html index.htm;

location / {

}

# redirect server error pages to the static page /50x.html

error_page 500 502 503 504 /50x.html;

location = /50x.html {

# nginx passes php scripts to fastcgi server via a tcp/9000 socket

# this setting much be consistent with /etc/php-fpm.d/www.conf

# try_files prevents nginx from passing bad scripts to fastcgi server

location ~ \.php$ {

try_files $uri =404;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

fastcgi_param script_filename $document_root$fastcgi_script_name;

include fastcgi_params;

nginx 的默认工作线程数(在 /etc/nginx/nginx.conf 文件中指定的)是 1,让我们也来调整一下这个数字。通常来说我们创建的工作线程数应该和 cpu 核数相同。要确信您的 cpu 的核数,请运行下面这命令:

$ grep processor /proc/cpuinfo | wc -l

如果您的 cpu 是 4 核的,就如下所示修改 /etc/nginx/nginx.conf 文件。

$ sudo vi /etc/nginx/nginx.conf

worker_processes 4;

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

cgi.fix_pathinfo=0

date.timezone = "prc"

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

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

$ sudo systemctl restart nginx

$ sudo systemctl restart php-fpm

$ sudo service nginx restart

$ sudo service php-fpm restart

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

&lt;?php phpinfo(); ?&gt;

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

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

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

原文发布时间:2014-11-27

本文来自云栖合作伙伴“linux中国”