centos 5.6安装nginx+mysql+php(php-fpm)+phpmyadmin总结

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

花了3天的时间配置了nginx+mysql+php(php-fpm)+phpmyadmin因为开始根本就没有自己动手去配置过文件,所以自己研究一天时间,在这段时间遇到很多问题,有些时候还搞不清楚fastcgi和php-fpm和lighttpd和spawn-fcgi的关系,走了不少的弯路,以下总结一下。
    原来很多人都用 Lighttpd 的 Spawn-fcgi 进行 FastCGI 模式下的管理工作,不过有不少缺点。而 PHP-fpm 的出现多少缓解了一些问题,但 PHP-fpm 有个缺点就是要重新编译,这对于一些已经运行的环境可能有不小的风险(refer)。

原来 spawn-fcgi 版本也比较乱的,期待独立后的项目能更稳定一些。这会给很多 Web 站点带来便利。

PHP-FPM 是 一个 PHP FastCGI 进程管理器

FastCGI是一个可伸缩的,高速地在web server和脚本语言间交互的接口。FastCGI的主要优点是把动态语言和web server分离开来。这种技术允许把web server和动态语言运行在不同的主机上,以大规模扩展和改进安全性而不损失生产效率。

php-fpm可以和任何支持远端FastCGI的web server工作。

 CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等

Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M


目前在HTTPServer这块基本可以看到有三种stack比较流行:

>Apache+mod_php5

>lighttp+spawn-fcgi

>nginx+PHP-FPM

三者后两者性能可能稍优,但是Apache由于有丰富的模块和功能,目前来说仍旧是老大。有人测试nginx+PHP-FPM在高并发情况下可能会达到 Apache+mod_php5的5~10倍,现在nginx+PHP-FPM使用的人越来越多。

下面着重介绍stack:

Apache+mod_php5和nginx+PHP-FPM的安装和配置。对于lighttpd+spawn-fcgi,由于我个人没有怎么用过,所以 如下不准备介绍,感兴趣可以查阅资料。

我们很久一段时间使用经典的Apache+mod_php:

Apache对PHP的支持是通过Apache的模块来支持的。如果曾源代码编译安装php的话,如果希望Apache支持PHP的话,在./configure步骤需要指定--with-apxs2=/usr/local/apache2/bin/apxs 表示告诉编译器通过Apache的mod_php5/apxs来提供对PHP5的解析;

而且在最后一步make install的时候我们会看到将动态链接库libphp5.so(Apache模块)拷贝到apache2的安装目录的modules目录下,并且还需 要在 模块加载进来,从而实现Apache对php的支持。

1)由于该模式实在太经典了,因此这里关于安装部分不准备详述了,相对来说比较简单。

2)这里之所以仍旧列出来Apache+mod_php5来讨论,是因为:

看过上一篇文章的话,我们知道nginx一般包括两个用途HTTPServer和Reverse Proxy Server(反向代理服务器)。

我们介绍了如何在前端部署nginx作为reverse proxy server,后端布置多个Apache来实现机群系统server cluster架构的。

因此,实际生产中,我们仍旧能够保留Apache+mod_php5的经典App Server,而仅仅使用nginx来当做前端的reverse proxy server来实现代理和负载均衡。 因此,建议nginx(1个或者多个)+多个apache的架构继续使用下去。

1)通过上面的分析,尽管我们可以仍旧保留Apache+mod_php来处理PHP,所有的静态文件和负载均衡由顶在前端的nginx来完成,但是由 于nginx和PHP-FPM各自的优越性,使得nginx+PHP-FPM的组合的性能已经很超越Apache+mod_php。

因此很多人渐渐放弃了Apache+mod_php的组合了,而完全使用nginx+PHP-FPM来实现对PHP的处理。

因此现在出现了新的名词叫做LEMP(Linux+EngineX(nginx)+MySQL+PHP),慢慢要代替经典很多年的 LAMP 。

2)甚至出现一种新的server cluster:

其中看不到Apache的影子了,全部由nginx来搞定。nginx轻量型,高性能,高灵活性使得它完全能够应付过来。

由于PHP-FPM是C/S结构,因此我们前端保留nginx来做负载均衡;对于之前后端的各个Apache服务器,我们不需要安装Apache了,对 PHP重新编译安装使其以PHP-FPM方式支持FastCGI;

然后在nginx中配置将客户端的php请求分别pass到后台的多个运行的PHP-FPM,后者进行处理然后返回给nginx,然后显示给用户。整个过 程可以完全不要Apache。

3) 下面我们具体来介绍如何来安装和简单配置

nginx+PHP+PHP-FPM+MySQL.

这里之所以首先要安装MySQL,是因为之后编译安装PHP的时候,可以直接指定对MySQL的支持。

我们知道PHP对MySQL的支持是通过PHP扩展实现的。

上面先介绍一下,言归正传

刚开始检查一下 yum-fastestmirror.noarch软件包,如果没有请用yum -y install 来安装。

添加安装源 

rpmforge源
[root@localhost ~]# rpm -ivh rpmforge-release-0.5.2-2.el5.rf

启用 EPEL

[root@localhost ~]#rpm -ivh epel-release-5-4


Centos 默认官方源中没有nginx 和 php-fpm 所以必须添加第三方源,不然就只能自己编译了。

启用CENTOS的额加包。如果不安装,可能会出现不能安装NGINX的问题

添加[CentALT]源
在/etc/yum.repo.d 目下创建 alt.ru.repo 文件内容如下:

[CentALT]
name=CentALT Packages for Enterprise Linux 5 - $basearch
baseurl=http://centos.alt.ru/repository/centos/5/$basearch/
enabled=1
gpgcheck=0

装好之后一定要yum -y update一下


第一步:安装mysql5.0,并设置开机自动启动mysql
[root@localhost ~] yum  -yinstall mysql mysql-server

[root@localhost ~]# service mysqld  start

[root@localhost ~]# chkconfig   mysqld on

[root@localhost ~]# mysqladmin  -u   root   password  ******(密码)

[root@localhost ~]# netstat -alp|grep 'mysql'
tcp        0      0 *:mysql                     *:*                         LISTEN      2647/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     9262   2647/mysqld         /var/lib/mysql/mysql.sock


 第二步:安装Nginx
[root@localhost ~]# yum -y install nginx

[root@localhost ~]# chkconfig nginx on

[root@localhost ~]# service nginx start

[root@localhost ~]# netstat -lp|grep 'nginx'
tcp        0      0 *:irdmi                     *:*                         LISTEN      2722/nginx.conf     
[root@localhost ~]chkconfig  php-fpm on

[root@localhost ~]# service php-fpm start

注意:您可以通过使用rpm -ql nginx来查看安装nginx的RPM包时,都安装了哪些文件
[root@localhost ~]# rpm -ql nginx
/etc/logrotate.d/nginx
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/conf.d/geo.data
/etc/nginx/conf.d/ssl.conf
/etc/nginx/conf.d/upstream-fair.conf
/etc/nginx/conf.d/virtual.conf
/etc/nginx/fastcgi.conf
/etc/nginx/fastcgi.conf.default
/etc/nginx/fastcgi_params
/etc/nginx/fastcgi_params.default
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/mime.types.default
/etc/nginx/nginx.conf//nginx的主配置文件:/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/etc/nginx/scgi_params
/etc/nginx/scgi_params.default
/etc/nginx/uwsgi_params
/etc/nginx/uwsgi_params.default
/etc/nginx/win-utf
/etc/pam.d/nginx
/etc/rc.d/init.d/nginx
/etc/sysconfig/nginx
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/auto/nginx
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/auto/nginx/nginx.so
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/nginx.pm
/usr/sbin/nginx
/usr/share/doc/nginx-1.0.4
/usr/share/doc/nginx-1.0.4/CHANGES
/usr/share/doc/nginx-1.0.4/CHANGES.mod_zip
/usr/share/doc/nginx-1.0.4/CHANGES.nginx_uploadprogress_module
/usr/share/doc/nginx-1.0.4/ChangeLog.ngx_http_auth_pam_module-1.2
/usr/share/doc/nginx-1.0.4/Changelog.nginx_upload_module
/usr/share/doc/nginx-1.0.4/LICENSE
/usr/share/doc/nginx-1.0.4/README
/usr/share/doc/nginx-1.0.4/README.mod_zip
/usr/share/doc/nginx-1.0.4/README.nginx-upstream-fair
/usr/share/doc/nginx-1.0.4/README.nginx_uploadprogress_module
/usr/share/doc/nginx-1.0.4/README.ngx_http_auth_pam_module-1.2
/usr/share/doc/nginx-1.0.4/example.php.nginx_upload_module
/usr/share/doc/nginx-1.0.4/nginx.conf.mod_zip
/usr/share/doc/nginx-1.0.4/nginx.conf.nginx_upload_module
/usr/share/doc/nginx-1.0.4/upload.html.nginx_upload_module
/usr/share/man/man3/nginx.3pm.gz
/usr/share/nginx
/usr/share/nginx/html //nginx默认站点的工作目录:/usr/share/nginx/html
/usr/share/nginx/html/404.html
/usr/share/nginx/html/50x.html
/usr/share/nginx/html/index.html
/var/lib/nginx
/var/lib/nginx/tmp
/var/log/nginx


第三步:安装PHP5

在使用FastCGI方式运行php的时候,如果我们改变了php.ini的设置,就得重新启动php的fastcgi守护程序。如果你的系统负载 比较大的话,这个重启过程或许会让你的系统中断服务一段时间。php-fpm就是为了解决这个问题而诞生的,它可以在php的fastcgi进程不中断的 情况下重新加载你改动过的php.ini。而且php-fpm可以不用再依赖其它的fastcgi启动器,比如lighttpd的spawn-fcgi,对于我来说终于可以摆脱lighttpd的影子了。

[root@localhost ~]# yum install  php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-snmp php-mcrypt php-mhash php-mbstring php-dba php-bcmath php-tidy php-ncurses php-jpgraph

第四步:配置php
[root@localhost ~]# echo cgi.fix_pathinfo = 1 >>/etc/php.ini


第五步:配置Nginx
[root@localhost ~]#  vi /etc/nginx/nginx.conf
worker_processes  5; #增加worker process的数量
keepalive_timeout  3; #设置keepalive_timeout为一个合理值
#修改默认的虚拟主机
server {
listen       80;//端口可以自己修改
server_name  _;
location / {
root   /usr/share/nginx/html;
index  index.php index.html index.htm;//添加index.php
}
error_page  404              /404.html;
location = /404.html {
root   /usr/share/nginx/html;
}
error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   /usr/share/nginx/html;
}
location ~ \.php$ {
root           /usr/share/nginx/html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html/$fastcgi_script_name;
include        fastcgi_params;
}
location ~ /\.ht {
deny  all;
}

//nginx配置文件nginx.conf带中文解释 
#使用小号
user nobody;

#开启进程数
worker_processes 8;

#制定进程到cpu(四cpu:0001 0010 0100 1000)
worker_cpu_affinity 0001 0010 0100 1000 0001 0010 0100 1000;

#每个进程最大打开文件数
worker_rlimit_nofile 10240;

#进程号保存文件
pid logs/nginx.pid;

events {
#使用epoll(linux2.6的高性能方式)
use epoll;
#每个进程最大连接数(最大连接=连接数x进程数)
worker_connections 10240;
}

http {

#文件扩展名与文件类型映射表
include mime.types;

#默认文件类型
default_type text/html;

#日志文件格式
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#日志文件
access_log /dev/null;

#长链接超时时间
keepalive_timeout 30;

#打开gzip压缩
gzip on;
#最小压缩文件大小
gzip_min_length 1000;
#压缩缓冲区
gzip_buffers 4 8k;
#压缩类型
gzip_types text/* text/css application/javascript application/x-javascript;
#压缩比率
gzip_comp_level 9;
#压缩通过代理的所有文件
gzip_proxied any;
#vary header支持
gzip_vary on;
#压缩版本(默认1.1,前端为squid2.5使用1.0)
gzip_http_version 1.0;
#输出缓冲区
output_buffers 4 32k;
#输出拆包大小
postpone_output 1460;

#接收header的缓冲区大小
client_header_buffer_size 128k;
large_client_header_buffers 4 256k;

#客户端发送header超时
client_header_timeout 1m;
#客户端发送内容超时
client_body_timeout 1m;
#发送到客户端超时
send_timeout 1m;
#开启高效文件传输模式
sendfile on;
#捕捉代理端的http错误
#proxy_intercept_errors on;
#默认编码
charset GBK;

#默认域名(不能访问)
server {include port.conf;server_name null;location / {root /dev/null;log_not_found off;}}

#嵌套upstream.conf
include upstream.conf;

#嵌套servers/*.com;
include servers/*.com;
include servers/*.net;
include servers/*.org;
include servers/*.com.cn;
include servers/*.cn;


第六步:测试Nginx
[root@localhost ~]# touch /usr/share/nginx/html/index.php
[root@localhost ~]# vi /usr/share/nginx/html/index.php
<?php
phpinfo();
?>
[root@localhost ~]# service nginx restart
[root@localhost~]# elinks http://192.168.20.154  //用esc就可以到主菜单。

第七步:安装phpmyadmin
[root@localhost ~]# wget http://nchc.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.4.2/phpMyAdmin-3.4.2-all-languages.tar
[root@localhost ~]# tar -zxvf phpMyAdmin-3.4.2-all-languages.tar

[root@localhost ~]# mv phpMyAdmin-3.2.5-all-languages phpmyadmin

[root@localhost ~]# mv phpmyadmin /usr/share/nginx/html/

[root@localhost ~]# cd  /usr/share/nginx/html/phpadmin

[root@localhost phpmyadmin]# cp config.sample.inc.php config.inc.php

[root@localhost phpmyadmin]# vi  config.inc.php

cfg['blowfish_secret'] = 'zh888blogcom'//加密密匙,可随意更改

$cfg['Servers'][$i]['auth_type'] = 'cookie'; // 认证方式 (config, http or cookie based)?
$cfg['Servers'][$i]['host'] = 'localhost';// MySQL的主机名称或者IP地址
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysql';

下来是指定系统管理员用户名和密码:

$cfg['Servers'][$i]['controluser'] = 'root';// MySQL用户,如 root
$cfg['Servers'][$i]['controlpass'] = '123456'; // MySQL用户密码

[root@localhost ~]# vi  /etc/php.ini
extension = mysql.so

[root@localhost ~]# service mysqld restart
[root@localhost ~]# service nginx restart
[root@localhost ~]# elinks http://192.168.20.154/phpmyadmin/index.php

这个是安装 MySQL 时指定的,照填写就ok了。

[root@localhost ~]#elinks 192.168.20.154/phpmyadmin就可以看到了。

安装遇到的问题:

错误一:
phpMyAdmin - Error
Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.
[root@localhost ~]# chown root:nginx /var/lib/php/session/


错误二: phpmyadmin主页面上 "链接表的额外特性尚未激活" 的错误
[root@localhost ~]# mysql -u root -p <  /usr/share/nginx/html/phpmyadmin/scripts/create_tables.sql
[root@localhost ~]# vi  /usr/share/nginx/html/phpmyadmin/config.inc.php
/* User for advanced features */
$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = 'XXXXX'; #这里输入root用户的密码
/* Advanced phpMyAdmin features */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
/* Contrib / Swekey authentication */
$cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey-pma.conf';

Nginx指令
-c </path/to/config> 为 Nginx 指定一个配置文件,来代替缺省的
-t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
-v 显示 nginx 的版本
-V 显示 nginx 的版本,编译器版本和配置参数


 


本文转自zh888 51CTO博客,原文链接:http://blog.51cto.com/zh888/589951,如需转载请自行联系原作者


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
关系型数据库 MySQL Linux
Linux联网安装MySQL Server
Linux联网安装MySQL Server
13 0
|
4天前
|
关系型数据库 MySQL Linux
centos7安装mysql-带网盘安装包
centos7安装mysql-带网盘安装包
33 2
|
8天前
|
关系型数据库 MySQL 数据库
Docker安装MySQL
Docker安装MySQL
14 1
|
8天前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL 安装及连接
MySQL 安装及连接
25 0
|
10天前
|
关系型数据库 MySQL 数据库
docker自定义安装mysql 5.7
docker自定义安装mysql 5.7
19 0
|
12天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)
|
1月前
|
关系型数据库 MySQL 数据库连接
关于MySQL-ODBC的zip包安装方法
关于MySQL-ODBC的zip包安装方法
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
99 1
|
30天前
|
关系型数据库 MySQL 数据库
rds安装数据库客户端工具
安装阿里云RDS的数据库客户端涉及在本地安装对应类型(如MySQL、PostgreSQL)的客户端工具。对于MySQL,可选择MySQL Command-Line Client或图形化工具如Navicat,安装后输入RDS实例的连接参数进行连接。对于PostgreSQL,可以使用`psql`命令行工具或图形化客户端如PgAdmin。首先从阿里云控制台获取连接信息,然后按照官方文档安装客户端,最后配置客户端连接以确保遵循安全指引。
82 1