安装环境centos5.4 64bit
参考链接
http://ixdba.blog.51cto.com/2895551/806622
http://www.aiezu.com/Article/Nginx_Php_Install.aspx
http://www.178-go.com/archives/nginx-troubleshooting.html(错误解决方法)
- 一 环境准备
- [root@centos6 ~]# yum install -y make gcc gcc-c++ zlib-devel libaio openssl openssl-devel autoconf libtool*
- 二安装nginx(这个是流媒体nginx的安装 如果不是视频网站的话nginx_mod_h264_streaming-2.2.7.tar.gz这个可以不用安装)
- 2 mkdir -p /usr/vm/server/
- 3 解压相关的源码包nginx_mod_h264_streaming-2.2.7.tar.gz,openssl-1.0.0d.tar.gz,pcre-8.10.tar.bz2,zlib-1.2.3.tar.gz到/usr/vm/server/目录下
- tar xf -C /usr/vm/server/
- 4.修改nginx_mod_h264_streaming-2.2.7的源代码:/usr/vm/server/nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c 158行左右 把如下内容注释掉(不要用#号注释 删掉或者用/* */)
- if (r->zero_in_uri)
- {
- return NGX_DECLINED;
- }
- 这一段。
- 3.进入到nginx-1.0.9 (--add-module参数不需要编译指定模块文件夹路径即可)
- 1)./configure --prefix=/usr/vm/server/nginx --add-module=/usr/vm/server/nginx_mod_h264_streaming-2.2.7 --with-http_ssl_module --with-pcre=/usr/vm/server/pcre-8.10 --with-openssl=/usr/vm/server/openssl-1.0.0d --with-zlib=/usr/vm/server/zlib-1.2.3 --with-http_flv_module --with-http_stub_status_module
- 2)make && make install clean
- 如此便编译安装成功
- 4.开机启动(注意修改nginx启动脚本的对应的路径)
- chkconfig --add nginx
- chkconfig nginx on
- 如执行 make && make install clean这一步报错如下
- /usr/vm/server/nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c: In function ‘ngx_streaming_handler’:
- /usr/vm/server/nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c:158: error: ‘ngx_http_request_t’ has no member named ‘zero_in_uri’
- make[1]: *** [objs/addon/src/ngx_http_h264_streaming_module.o] Error 1
- make[1]: Leaving directory `/root/nginx-1.0.9'
- make: *** [build] Error 2
- 原因:这是由于第4步没有把ngx_http_streaming_module.c 158行左右注释掉造成的
- 报如下错误
- /usr/vm/server/nginx_mod_h264_streaming-2.2.7/src/ngx_http_h264_streaming_module.c:2: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before string constant
- make[1]: *** [objs/addon/src/ngx_http_h264_streaming_module.o] Error 1
- make[1]: Leaving directory `/root/nginx-1.0.9'
- make: *** [build] Error 2
- 原因:是由于注释ngx_http_streaming_module.c 158行左右注释方式不对造成的 (我用#号注释 报的就是这种错误)
- 三 安装mysql
- 2 创建mysql的安装目录
- mkdir -p /usr/vm/db
- 3 添加用户
- adduser operu1
- passwd operu1
- groupadd oper
- usermod -g oper operu1
- 4
- chown -R operu1:oper /usr/vm
- 5 解压源码包
- tar vxf mysql-5.5.13.tar.gz
- cd mysql-5.5.13
- 6 mysql5.5以后是通过cmake来编译的 所以要安装cmake
- yum install cmake
- 7 cd mysql-5.5.13
- cmake -DCMAKE_INSTALL_PREFIX=/usr/vm/db/mysql5 -DMYSQL_UNIX_ADDR=/usr/vm/db/mysql5/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/usr/vm/db/mysql5/mysqldata -DMYSQL_USER=mysql(注意此用户) -DMYSQL_TCP_PORT=3306
- 报错如下
- Make Error at cmake/readline.cmake:82 (MESSAGE):
- Curses library not found. Please install appropriate package,
- remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
- Call Stack (most recent call first):
- cmake/readline.cmake:117 (FIND_CURSES)
- cmake/readline.cmake:213 (MYSQL_USE_BUNDLED_READLINE)
- CMakeLists.txt:250 (MYSQL_CHECK_READLINE)
- 8 错误提示是少安装了包
- yum install ncurses-devel
- yum install bison
- 9 重新进行cmake安装
- rm -rf CMakeCache.txt
- cmake -DCMAKE_INSTALL_PREFIX=/usr/vm/db/mysql5 -DMYSQL_UNIX_ADDR=/usr/vm/db/mysql5/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/usr/vm/db/mysql5/mysqldata -DMYSQL_USER=mysql -DMYSQL_TCP_PORT=3306
- 10 make && make install
- 11 复制配置文件
- cd /usr/vm/db/mysql5/support-files
- cp my-medium.cnf /etc/my.cnf
- 12 初始化安装数据库
- cd /usr/vm/db/mysql5/scripts
- ./mysql_install_db --user=operu1 --basedir=/usr/vm/db/mysql5/ --datadir=/usr/vm/db/mysql5/mysqldata/
- 13 设置mysqld的开机启动
- cd /usr/vm/db/mysql5/support-files
- cp mysql.server /etc/init.d/mysql5
- chmod 775 /etc/init.d/mysql
- chkconfig mysql5 on
- 14 /etc/init.d/mysql5 start
- 会报错 可能是权限的问题 把/usr/vm/db/mysql5/mysqldata/ /usr/vm/db/mysql5/tmp/ 参照15步进行修改
- 15 添加mysql用户 (因为在cmake编译安装的时候 -DMYSQL_USER=mysql有这一选项)
- useradd mysql
- chown -R mysql.mysql -R /usr/vm/db/mysql5/mysqldata/
- chown -R mysql.mysql -R /usr/vm/db/mysql5/tmp/
- 16 /etc/init.d/mysql5 start 启动成功
- Starting MySQL....... SUCCESS!
- ps -ef | grep mysql
- root 18264 1 0 11:36 pts/0 00:00:00 /bin/sh /usr/vm/db/mysql5/bin/mysqld_safe --datadir=/usr/vm/db/mysql5/mysqldata --pid-file=/usr/vm/db/mysql5/mysqldata/nagios.localdomain.pid
- mysql 18515 18264 0 11:36 pts/0 00:00:00 /usr/vm/db/mysql5/bin/mysqld --basedir=/usr/vm/db/mysql5 --datadir=/usr/vm/db/mysql5/mysqldata --plugin-dir=/usr/vm/db/mysql5/lib/plugin --user=mysql --log-error=/usr/vm/db/mysql5/mysqldata/nagios.localdomain.err --pid-file=/usr/vm/db/mysql5/mysqldata/nagios.localdomain.pid --socket=/usr/vm/db/mysql5/tmp/mysql.sock --port=3306
- root 22320 2692 0 13:56 pts/0 00:00:00 grep mysql
- 17 修改环境变量
- vi /etc/profile 添加如下内容
- export PATH=/usr/vm/db/mysql5/bin:$PATH
- alias mysql_start="mysqld_safe &"
- alias mysql_stop="mysqladmin –u root -p shutdown"
- 然后执行
- source /etc/profile
- 至此数据库的安装已经完成
- ########################################################################################################################################################################
- 四安装php所需的库
- 1 编译安装libxml2
- 注:libxml2是一个xml的c语言版的解析器,不仅支持c语言,还支持c++、php、Pascal、Ruby、Tcl等语言的绑定
- [root@centos6 LAMP]# pwd
- /tmp/LAMP
- [root@centos6 LAMP]# tar -zxvf libxml2-2.7.8.tar.gz
- [root@centos6 LAMP]# cd ./libxml2-2.7.8
- [root@centos6 libxml2-2.7.8]# ./configure --prefix=/usr/local/libxml2/
- [root@centos6 libxml2-2.7.8]# make;make install
- 2 编译安装libmcrypt
- 注:libmcrypt是加密算法扩展库。支持DES, 3DES, RIJNDAEL, Twofish, IDEA, GOST, CAST-256, ARCFOUR, SERPENT, SAFER+等算法。
- [root@centos6 LAMP]# pwd
- /tmp/LAMP
- [root@centos6 LAMP]# tar -zxvf libmcrypt-2.5.8.tar.gz
- [root@centos6 LAMP]# cd ./libmcrypt-2.5.8
- [root@centos6 libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt/
- [root@centos6 libmcrypt-2.5.8]# make;make install
- 3 编译安装zlib
- 注:zlib是提供数据压缩用的函式库
- [root@centos6 LAMP]# pwd
- /tmp/LAMP
- [root@centos6 LAMP]# tar -zxvf zlib-1.2.5.tar.gz
- [root@centos6 LAMP]# cd ./zlib-1.2.5
- [root@centos6 zlib-1.2.5]# ./configure --prefix=/usr/local/zlib/
- [root@centos6 zlib-1.2.5]# make ; make install
- 4 编译安装libpng
- [root@centos6 LAMP]# pwd
- /tmp/LAMP
- [root@centos6 LAMP]# tar -zxvf libpng-1.5.4.tar.gz
- [root@centos6 LAMP]# cd ./libpng-1.5.4
- [root@centos6 libpng-1.5.4]#
- ./configure --prefix=/usr/local/libpng/ --enable-shared
- [root@centos6 libpng-1.5.4]# make ; make install
- 5 编译安装jpeg
- [root@centos6 LAMP]# pwd
- /tmp/LAMP
- [root@centos6 LAMP]# tar -zxvf jpegsrc.v8c.tar.gz
- [root@centos6 LAMP]# cd ./jpeg-8c/
- [root@centos6 jpeg-8c]# mkdir /usr/local/jpeg/(创建jpeg软件的安装目录)
- [root@centos6 jpeg-8c]# mkdir /usr/local/jpeg/bin/(创建存放命令的目录)
- [root@centos6 jpeg-8c]# mkdir /usr/local/jpeg/lib/(创建jpeg库文件所在目录)
- [root@centos6 jpeg-8c]# mkdir /usr/local/jpeg/include/(创建存放头文件目录)
- [root@centos6 jpeg-8c]# mkdir -p /usr/local/jpeg/man/man1(建立存放手册的目录)
- [root@centos6 jpeg-8c]#
- ./configure --prefix=/usr/local/jpeg/ --enable-shared --enable-static(建立共享库使用的GNU的libtool和静态库使用的GNU的libtool)
- [root@centos6 jpeg-8c]# make ; make install
- 6 编译安装freetype
- [root@centos6 LAMP]# pwd
- /tmp/LAMP
- [root@centos6 LAMP]# tar -zxvf freetype-2.4.6.tar.gz
- [root@centos6 LAMP]# cd ./freetype-2.4.6
- [root@centos6 freetype-2.4.6]#
- ./configure --prefix=/usr/local/freetype/ --enable-shared
- [root@centos6 freetype-2.4.6]# make ;make install
- 7编译安装autoconf
- [root@centos6 LAMP]# pwd
- /tmp/LAMP
- [root@centos6 LAMP]# tar -zxvf autoconf-2.68.tar.gz
- [root@centos6 LAMP]# cd ./autoconf-2.68
- [root@centos6 autoconf-2.68]# ./configure
- [root@centos6 autoconf-2.68]# make ; make install
- 8编译安装GD
- [root@centos6 LAMP]# pwd
- /tmp/LAMP
- [root@centos6 LAMP]# tar -zxvf gd-2.0.35.tar.gz
- [root@centos6 LAMP]# cd gd
- cd 2.0.35
- [root@centos6 2.0.35]#
- ./configure --prefix=/usr/local/gd/ --with-zlib=/usr/local/zlib/ --with-jpeg=/usr/local/jpeg/ --with-png=/usr/local/libpng/ --with-freetype=/usr/local/freetype/
- [root@centos6 gd-2.0.35]# make ; make install
- 安装gd库时的解决方法
- 手动编译安装php环境安装gd库时报错如下
- make[2]: *** [gd_png.lo] 错误 1
- make[2]: Leaving directory `/opt/gd/2.0.35'
- make[1]: *** [all-recursive] 错误 1
- make[1]: Leaving directory `/opt/gd/2.0.35'
- make: *** [all] 错误 2
- 解决办法:
- vi gd_png.c
- 将
- #include “png.h” /* includes zlib.h and setjmp.h */
- 替换成:
- #include “/usr/local/libpng/include/png.h” /* includes zlib.h and setjmp.h */
- 然后再make就可以了
- 注:有部分文章把/usr/local/libpng/include/png.h写成了/usr/local/libpng/include.png.h,这是不对的)
- 五 安装php和php-pfm
- root@localhost local]#tar zxvf php-5.2.13.tar.gz
- tar -zxvf php-5.2.16.tar.gz
- gunzip php-5.2.16-fpm-0.5.14.diff.gz
- cd php-5.2.16/
- patch -p1 < ../php-5.2.16-fpm-0.5.14.diff(然后会出现提示 输入n两次就好)
- ./configure --prefix=/usr/local/php/ --with-libxml-dir=/usr/local/libxml2/ --with-jpeg-dir=/usr/local/jpeg/ --with-freetype-dir=/usr/local/freetype/ --with-gd=/usr/local/gd/ --with-zlib-dir=/usr/local/zlib/ --with-mcrypt=/usr/local/libmcrypt/ --with-mysqli=/usr/vm/db/mysql5/bin/mysql_config --enable-soap --enable-mbstring=all --enable-sockets --enable-fpm --enable-fastcgi --enable-ftp
- make
- make install
- make(如果报这种错误make: *** [ext/gd/libgd/gd_jpeg.lo] Error 1)
- 参考此链接
- http://hi.baidu.com/czjjzhao/blog/item/3daf4c2fd24c49241e308956.html
- make install
- 然后
- [root@centos6 php-5.3.7]#
- cp php.ini-dist /usr/local/php/lib/php.ini
- #vim /usr/local/php/lib/php.ini
- //这里需要将register_globals=Off更改on模式,还有时间格式改为本地
- (改成如下格式
- 691 #register_globals = Off
- 692 register_globals = on
- 999 date.timezone = PRC
- (修改php.ini ;date.timezone = 修改成 date.timezone = PRC)
- 六 配置与优化PHP-FPM
- PHP的全局配置文件是php.ini,在上面的步骤中,已经将此文件复制到了/usr/local/php/lib/php.ini下。可以根据每个应用需求的不同,对php.ini进行相应的配置。
- 下面重点介绍PHP-FPM引擎的配置文件。
- 根据上面指定的安装路径,PHP-FPM的默认配置文件为/usr/local/php/etc/php-fpm.conf。
- php-fpm.conf是一个XML格式的纯文本文件,其内容很容易看明白。这里重点介绍几个重要的配置标签:
- 标签listen_address是配置fastcgi进程监听的IP地址以及端口,默认是127.0.0.1:9000。
- <value name="listen_address">127.0.0.1:9000</value>
- 标签display_errors用来设置是否显示PHP错误信息,默认是0,不显示错误信息,设置为1可以显示PHP错误信息。
- <value name="display_errors">0</value>
- 标签user和group用于设置运行FastCGI进程的用户和用户组。需要注意的是,这里指定的用户和用户组要和Nginx配置文件中指定的用户和用户组一致。
- <value name="user">nobody</value>
- <value name="group">nobody</value>
- 标签max_children用于设置FastCGI的进程数。根据官方建议,小于2GB内存的服务器,可以只开启64个进程,4GB以上内存的服务器可以开启200个进程。
- <value name="max_children">5</value>
- 标签request_terminate_timeout用于设置FastCGI执行脚本的时间。默认是0s,也就是无限执行下去,可以根据情况对其进行修改。
- <value name="request_terminate_timeout">0s</value>
- 标签rlimit_files用于设置PHP-FPM对打开文件描述符的限制,默认值为1024。这个标签的值必须和Linux内核打开文件数关联起来,例如要将此值设置为65535,就必须在Linux命令行执行'ulimit -HSn 65536'。
- <value name="rlimit_files">1024</value>
- 标签max_requests指明了每个children最多处理多少个请求后便会被关闭,默认的设置是500。
- <value name="max_requests">500</value>
- 标签allowed_clients用于设置允许访问FastCGI进程解析器的IP地址。如果不在这里指定IP地址,Nginx转发过来的PHP解析请求将无法被接受。
- <value name="allowed_clients">127.0.0.1</value>
- 七 管理FastCGI进程
- 在配置完php-fpm后,就可以启动FastCGI进程了。启动fastcgi进程有两种方式:
- /usr/local/php/bin/php-cgi --fpm
- 或者
- /usr/local/php/sbin/php-fpm start (启动的时候要创建一个普通用户)
- [root@localhost php-5.2.16]# ps -ef | grep php-fpm
- root 8863 1 0 03:01 ? 00:00:00 /usr/local/php//bin/php-cgi --fpm --fpm-config /usr/local/php//etc/php-fpm.conf
- operu1 8864 8863 0 03:01 ? 00:00:00 /usr/local/php//bin/php-cgi --fpm --fpm-config /usr/local/php//etc/php-fpm.conf
- operu1 8865 8863 0 03:01 ? 00:00:00 /usr/local/php//bin/php-cgi --fpm --fpm-config /usr/local/php//etc/php-fpm.conf
- operu1 8866 8863 0 03:01 ? 00:00:00 /usr/local/php//bin/php-cgi --fpm --fpm-config /usr/local/php//etc/php-fpm.conf
- operu1 8867 8863 0 03:01 ? 00:00:00 /usr/local/php//bin/php-cgi --fpm --fpm-config /usr/local/php//etc/php-fpm.conf
- operu1 8868 8863 0 03:01 ? 00:00:00 /usr/local/php//bin/php-cgi --fpm --fpm-config /usr/local/php//etc/php-fpm.conf
- root 8871 4173 0 03:01 pts/1 00:00:00 grep php-fpm
- 建议采用第二种方式启动FastCGI进程。
- /usr/local/php/sbin/php-fpm还有其他参数,具体为start|stop|quit|restart|reload|logrotate。
- 每个启动参数的含义如下:
- ? start,启动PHP的FastCGI进程。
- ? stop,强制终止PHP的FastCGI进程。
- ? quit,平滑终止PHP的FastCGI进程。
- ? restart, 重启PHP的FastCGI进程。
- ? reload, 重新加载PHP的php.ini。
- ? logrotate, 重新启用log文件。
- reload是个很重要的参数,它可以在PHP的FastCGI进程不中断的情况下重新加载改动过的php.ini,因此通过php-fpm可以平滑变更FastCGI模式下的PHP设置。
- 八、配置Nginx来支持PHP
- Nginx的安装特别简单,前面已经对此进行了详细介绍,这里不再进行讲述。下面重点介绍Nginx如何通过php-fpm的FastCGI进程对PHP进行解析处理。
- 由于Nginx本身不会对PHP进行解析,因此要实现Nginx对PHP的支持,其实是将对PHP页面的请求交给fastCGI进程监听的IP地址及端口。如果把php-fpm当做动态应用服务器,那么Nginx其实就是一个反向代理服务器。Nginx通过反向代理功能实现对PHP的解析,这就是Nginx实现PHP动态解析的原理。
- 这里假定Nginx的安装目录为/usr/local,则Nginx配置文件的路径为/usr/local/nginx/conf/nginx.conf。下面是在Nginx下支持PHP解析的一个虚拟主机配置实例。
- server {
- listen 80;
- server_name www.t1.com;
- #charset koi8-r;
- #access_log logs/host.access.log main;
- location / {
- root /var/www/html;
- index index.html index.htm;
- }
- location ~ \.php$ {
- root /var/www/html;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;(php文件的存放路径)
- include fastcgi_params;
- }
- 通过location指令,将所有以php为后缀的文件都交给127.0.0.1:9000来处理,而这里的IP地址和端口就是FastCGI进程监听的IP地址和端口。
- fastcgi_param指令指定放置PHP动态程序的主目录,也就是$fastcgi_script_name前面指定的路径,这里是/usr/local/nginx/html目录,建议将这个目录与Nginx虚拟主机指定的根目录保持一致,当然也可以不一致。
- fastcgi_params文件是FastCGI进程的一个参数配置文件,在安装Nginx后,会默认生成一个这样的文件,这里通过include指令将FastCGI参数配置文件包含了进来。
- 接下来,启动nginx服务。
- /usr/local/nginx/sbin/nginx
- 到此为止,Nginx+PHP已经配置完成。