欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

nginx+php+mysql之rpm包方式安装配置参考

程序员文章站 2022-04-20 19:56:41
...

这篇文章主要是记录了利用nginx,php,mysql构建一个web站点的一般过程。系统环境为CentOS6.3,为了避免源码编译过程中众多非预知的错误,linux下的软件大多直接以yum方式安装。 nginx -------------------- 因为最终要构建的是一个可供开发的web站点,安装ngi

这篇文章主要是记录了利用nginx,php,mysql构建一个web站点的一般过程。系统环境为CentOS6.3,为了避免源码编译过程中众多非预知的错误,linux下的软件大多直接以yum方式安装。

nginx

--------------------

因为最终要构建的是一个可供开发的web站点,安装nginx的时候需要一些软件作铺垫,它们包括:

GCC编译器:用来编译C语言程序,编译nginx源码必需的。

yum install –y gcc

PCRE库:Perl兼容正式表达式,如果在配置文件nginx.conf里面使用了正式表达式,那么在编译nginx时就必需把PCRE库编译进nginx。因为nginx的HTTP模块需要靠它来解析正则表达式。

yum install –y pcrepcre-devel

注:pcre-devel是使用PCRE做二次开发时所需要的开发库,包括头文件等,这也是编译nginx所必需的。

Zlib库:用于对HTTP包的内容做gzip格式的压缩,我们一般会在nginx.conf里面配置gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量。Zlib-devel是二次需要的库也需要。

yum install -y zlibzlib-devel

OpenSSL开发库:用于支持在SSL协议上传输HTTP,另外如果想使用MD5、SHA1等散列函数,那么也需要安装它。

yum install -yopenssl openssl-devel

从http://nginx.org/下载nginx的源码并解压,进入源码目录后,依次执行:

./configure

make

make install

默认安装在/usr/local/nginx目录下。

PHP

--------------------

yum安装php。

yum install –y php

[root@alex ]#rpm -qa | grep -i php

php-5.3.3-27.el6_5.x86_64

php-common-5.3.3-27.el6_5.x86_64 //php依赖包

php-cli-5.3.3-27.el6_5.x86_64 //php依赖包

php就这样安装好了,但此时nginx和php还是两个相对独立的组件,默认情况下没有建立直接的联系,也就是说nginx此时还不能解析php文件。作为一个轻量级的Web Server,nginx本身不支持对外部程序的直接调用或者解析,所有的外部程序(包括PHP解析)必须借助于FastCGI接口来调用。那为什么Apache服务器解析PHP的时候没有再额外安装FastCGI呢,因为Apache默认是用自带的mod_php模块运行php,实际上你也可以配置Apache使用FastCGI来执行PHP脚本,本文不作此讨论,这方面可以参考https://www.centos.bz/2011/12/configure-apache-run-php-as-fastcgi/

fastcgi的优点:

稳定:fastcgi是以独立的进程池运行cgi(可以同时启动多个CGI解释器进程),单独一个进程死掉,系统可以很轻易的将它丢弃,然后重新分配新的进程来运行处理逻辑。

性能:fastcgi把动态逻辑的处理从server中分离出来,大负荷的IO处理还是留给宿主server,这样宿主server可以一心一意作IO,对于一个普通的动态网页来说,逻辑处理可能只有一小部分,大量的图片等静态IO处理完全不需要逻辑程序的参与。

扩展性:fastcgi是一个中立的技术标准,完全可以支持任何语言写的处理程序 (php,java,perl,ruby,c++,python...)。

此外,Fastcgi还支持分布式运算。即运行FastCGI程序的主机可以与运行网站服务器的主机实现分离。

要想nginx服务器使用FastCGI执行PHP脚本解析还需要安装一个FastCGI进程管理器,通过它来维护cgi解释器进程。现在常用的是一个叫PHP-FPM的进程管理器,它是一个第三方的FastCGI进程管理器,作为PHP的一个补丁来开发,在安装的时候需要和PHP源一起编译,也就是说PHP-FPM被编译到PHP内核中。因为我们是通过rpm包的方式来安装,所以这里直接用yum来安装php-fpm就可以了。

yum install –y php-fpm

[root@alex~]# rpm -qa | grep php-fpm

php-fpm-5.3.3-27.el6_5.x86_64

[root@alex~]# rpm -ql php-fpm

/etc/logrotate.d/php-fpm

/etc/php-fpm.conf

/etc/php-fpm.d

/etc/php-fpm.d/www.conf

/etc/rc.d/init.d/php-fpm

/etc/sysconfig/php-fpm

/usr/sbin/php-fpm

/usr/share/doc/php-fpm-5.3.3

……

php-fpm有两种执行方式, 与Apache一样,他的进程数也是可以根据设置分为动态和静态两种方式,一种是直接开启指定数量的php-fpm进程,不再增加或者减少;另一种则是开始的时候开启一定数量的php-fpm进程,当请求量变大的时候,动态的增加php-fpm进程数到上限,当空闲的时候自动释放空闲的进程数到一个下限。下面给出我云主机上的php-fpm的配置实例。

[root@alex ~]# cat/etc/php-fpm.d/www.conf | grep -v ';' | grep -v ^$

[www]

listen = 127.0.0.1:9000 //监听本地主机9000端口,这个很重要!!

listen.allowed_clients = 127.0.0.1

user = apache

group = apache

pm = dynamic //动态方式

pm.max_children = 50 //最大可以增加到50个进程

pm.start_servers = 5 //起动的时候开起5个进程

pm.min_spare_servers = 5

pm.max_spare_servers = 35

slowlog =/var/log/php-fpm/www-slow.log

php_admin_value[error_log] =/var/log/php-fpm/www-error.log

php_admin_flag[log_errors] = on

php_value[session.save_handler] =files

php_value[session.save_path] =/var/lib/php/session

按照以上配置启动php-fpm,它会监听本主机的9000,拼接收发往该端口的php解析请求。php-fpm已经准备好了,后面还会要配置nginx让它将php文件的解释权转交给9000端口。

[root@alex ~]#/etc/init.d/php-fpm start

查看打开9000端口的php-fpm进程,好是1个主进程,5个子进程。

[root@alex ~]#lsof -i:9000

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

php-fpm26340 root 7u IPv4 3342038 0t0 TCP localhost:cslistener (LISTEN)

php-fpm 26341apache 0u IPv4 3342038 0t0 TCP localhost:cslistener (LISTEN)

php-fpm 26342apache 0u IPv4 3342038 0t0 TCP localhost:cslistener (LISTEN)

php-fpm 26343apache 0u IPv4 3342038 0t0 TCP localhost:cslistener (LISTEN)

php-fpm 26344apache 0u IPv4 3342038 0t0 TCP localhost:cslistener (LISTEN)

php-fpm 26345apache 0u IPv4 3342038 0t0 TCP localhost:cslistener (LISTEN)

接一来,我们将修改nginx的配置文件nginx.conf,使nginx通过FastCGI支持PHP。具体是删除location~\.php${…}设置段前面的”;”注释符。

[root@alex ]# vim/usr/local/nginx/conf/nginx.conf

# pass the PHP scriptsto 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;

}

注意:fastcgi_param为脚本文件请求的路径,nginx.conf默认情况下该行内容为:

fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

需要修改/scripts字段为$document_root。

通过上面的设置,并重新reload配置文件,nginx就知道把php文件传递到本机的9000端口上由fastcgi来处理了。

MySQL

--------------------

安装myql涉及到的软包括:

mysql:mysql客户端;

mysql-server:mysql服务器端;

php-mysql:为php扩展mysql提供库文件;

mysql-libs:mysql开发包;

通过下面的命令进行快速安装。

yum install –y mysql*

yum install –y php-mysql

[root@alex ~]# rpm -qa | grep mysql

mysql-5.1.73-3.el6_5.x86_64

mysql-server-5.1.73-3.el6_5.x86_64

php-mysql-5.3.3-27.el6_5.x86_64

mysql-libs-5.1.73-3.el6_5.x86_64

启动mysql服务器。

[root@alex ~]# /etc/init.d/mysqld start

[root@alex ~]# lsof -i:3306

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

mysqld 19492 mysql 10u IPv4 2203509 0t0 TCP *:mysql (LISTEN)

[root@alex ~]# ps aux | grep mysql | grep-v grep

root 2427 0.0 0.2 106060 1316 ? S May15 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql--socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid--basedir=/usr --user=mysql

mysql 2558 0.0 4.4 584452 22244 ? Sl May15 1:17 /usr/libexec/mysqld--basedir=/usr --datadir=/var/lib/mysql --user=mysql--log-error=/var/lib/mysql/alex.err --pid-file=/var/run/mysqld/mysqld.pid--socket=/var/lib/mysql/mysql.sock --port=3306

可以看出mysql数据库服务器已成功启动,并监听3306端口。

Mysql安装成功后,mysql管理员默认为root用户,但此root用户不同于Linux系统的root用户,它登陆mysql的初始密码为空,当客户端连接mysql时,只需要输入mysql命令即可,安全性太差。所以,有必要通过mysqladmin命令修改一下root用户连接mysql服务器时的密码。

[root@alex ~]#mysqladmin –u root passwordxxxxxxxx

现在用root帐户重新连接。

[root@alex ~]# mysql -u root -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 18

Server version: 5.1.73 Source distribution

mysql> show databases; //显示已存在的数据库

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| test |

+--------------------+

3 rows in set (0.00 sec)

mysql> use mysql; //打开mysql数据库

Database changed

mysql> show tables;

+---------------------------+

| Tables_in_mysql |

+---------------------------+

| columns_priv |

| db |

| event |

| func |

…..省略…..

| time_zone_transition |

| time_zone_transition_type |

| user |

+---------------------------+

23 rows in set (0.00 sec)

在nginx主目录下建立一个用php连接mysql的测试文件index.php。

[root@localhost html]vim index.php

echo "
---------------mysql-------------
";

$link = mysql_connect("localhost", "root","xxxxxx");

if ($link) echo "connect to mysql..........ok";

else echo "connect to mysql..........failed";

mysql_close();

?>

运行结果:

浏览器:http://ip地址/

---------------mysql-------------

connect tomysql..........ok