Nginx+mysql+php 在linux上安装

来源:互联网 发布:windows.old是什么 编辑:程序博客网 时间:2024/05/01 14:37

Nginx是一个高性能的HTTP和反向代理服务器,同时还是IMAP/POP3/SMTP代理服务器,该程序由俄罗斯Rambler.ru 站点开发,Nginx因为性能稳定、低系统资源消耗而闻名,近几年Nginx在国内已经成炙热化状态,比如像腾讯、网易、51CTO、迅雷、当当网、51、人人网等诸多大型网站都已经使用Nginx来做Web服务器,所以我们要学会运用Nginx还是非常有必要的,下面我们一起来看一下Nginx是如何在Linux平台上搭建的

 安装前首先使用yum命令安装、升级所需的程序库

   yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel ssse2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

一、安装MySQLssss

        目前web服务器已经很少有跑静态页面的,如果要跑动态网站那当然就离不开数据库,虽然在以前文章中有写MySQL是怎么安装的,但是感觉好久没装MySQL,现在只把步骤贴出来,就不做过多的讲解了

#useradd mysql

#tar zxvf mysql-5.0.40.tar.gz

#cd mysql-5.0.40

#./configure --prefix=/usr/local/mysql

#make && make install

#/usr/local/mysql/bin/mysql_install_db --user=mysql          //初始化MySQL数据库

#chown -R mysql /usr/local/mysql/var

#/usr/local/mysql/bin/mysqld_safe &          //启动MySQL

#/usr/local/mysql/bin/mysqladmin -u root password 123456    //设置MySQL密码

#cp support-files/my-medium.cnf /etc/my.cnf

#echo "/usr/local/mysql/bin/mysqld_safe &" >>/etc/rc.local

 

 

二、安装PCRE

         PCRE是perl所用到的正则表达式,目的是让所装的软件支持正则表达式。默认情况下,Nginx只处理静态的网页请求,也就是html.如果是来自动态的网页请求,比如*.php,那么Nginx就要根据正则表达式查询路径,然后把*.PHP交给PHP去处理

#rpm -qa | grep pcre              //查询系统中有没有安装PCRE,一般装系统是默认装有,所以我们要删掉系统自带的

#cp /lib/libpcre.so.0 /            //在删除系统自带的PCRE之前,要先备份一下libpcre.so.0这个文件,因为RPM包的关联性太强,在删除后没libpcre.so.0这个文件时我们装PCRE是装不上的

#rpm -e --nodeps pcre-6.6-1.1           //删除系统自带的PCRE

# tar zxvf pcre-8.00.tar.gz

#cd pcre-8.00

#cp /libpcre.so.0 /lib/              //把我们删除系统自带的PCRE之前备份的libpcre.so.0拷贝到/lib 目录下

#./configure         //配置PCRE,因为PCRE是一个库,而不是像pache、php、postfix等这样的程序,所以我们安装时选择默认路径即可,这样会在后面安装其它东西时避免一些不必要的麻烦,执行完这部后会显示出下图,上面显示了我们对PCRE的配置

#make && make install

 

Nginx: error while loading shared libraries: libpcre.so.1解决

注: 在有的操作系统上面,安装pcre后,安装的位置为/usr/local/lib/*pcre*
在redhat 64位机器之上有这样的情况.
在redhat 64位机器上, nginx可能读取的pcre文件为/lib64/libpcre.so.1文件.
所以在改用下面的软连接:
Shell代码  
[hadoop@SCLABHADOOP01 ~]$ ln -s /usr/local/lib/libpcre.so.1 /lib64/  

 

三、安装Nginx

       在网上,看到不少人装Nginx 时非常麻烦,配置时用了一大堆选项,请问你们真实现那么多功能么?害的我越看越郁闷。此次安装Nginx如果是按着上面笔者的步骤一步步走下来,安装Nginx时只需指定Nginx的安装路径即可

#tar zxvf nginx-0.8.24.tar.gz

#cd nginx-0.8.24

#./configure --prefix=/usr/local/nginx      //此处在本环节只需指定一个路径

#make && make install

#/usr/local/nginx/sbin/nginx       //启Nginx

#echo "/usr/local/nginx/sbin/nginx" >>/etc/rc.local

Nginx启动后有两个进程,master为主进程,worker为工作进程,如下图

 

 

在启动完NGINX后,我们可以在浏览器中输入http://localhost查看,如下图

 

四、安装PHP

        既然安装PHP,那GD便是不可少的,在此GD的安装不再进行描述

1、安装libpng

#tar xvf libpng-1.2.10.tar.tar

#cd libpng-1.2.10

#./configure --prefix=/usr/local/png

#make && make install

#ln -s /usr/local/png/lib/* /usr/lib/

 

2、安装jpeg

#mkdir /usr/local/jpeg

#mkdir /usr/local/jpeg/bin

#mkdir /usr/local/jpeg/lib

#mkdir /usr/local/jpeg/include

#mkdir /usr/local/jpeg/man

#mkdir /usr/local/jpeg/man/man1

#tar xvf jpegsrc.v7.tar.tar

#cd jpeg-7

#./configure --prefix=/usr/local/jpeg --enable-shared --enable-static

#make && make install

#ln -s /usr/local/jpeg/lib/* /usr/lib/

 

3、安装 freetype

#tar xvf freetype-2.3.9.tar.tar

#cd freetype-2.3.9

#./configure --prefix=/usr/local/freetype

#make && make install

 

 如果安装时出现如下错误,

rmdir /usr/local/include/freetype2/freetype/internal
rmdir: failed to remove `/usr/local/include/freetype2/freetype/internal': No such file or directory
make: [install] Error 1 (ignored)

则执行

mkdir -p /usr/local/include/freetype2/freetype/internal
make install


4、安装fontconfig

#tar zxvf fontconfig-2.4.2.tar.gz

#cd fontconfig-2.4.2

#./configure --prefix=/usr/local/fontconfig --with-freetype-config=/usr/local/freetype/bin/freetype-config

#make && make install


怎么安装fontconfig,在./configure的时候一直出现这个
configure: error: You must have freetype installed

um -y  install freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel 
之后再编译安装fontconfig就没有问题了

 

5、安装GD

#tar zxvf gd-2.0.32.tar.gz

#cd gd-2.0.32

#./configure --prefix=/usr/local/gd --with-png=/usr/local/png --with-jpeg=/usr/local/jpeg --with- freetype=/usr/local/freetype --with-fontconfig=/usr/local/fontconfig

#cp /usr/local/png/include/png.h ./

#cp /usr/local/png/include/pngconf.h ./

#make && make install

 

7.安装des加密库libmcrypt-2.5.7.tar.gz

到这里ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/下载libmcrypt-2.5.7.tar.gz,
tar -zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure --prefix=/usr/local/libmcrypt
make
make check
make install

 

6、安装PHP
        这个地方是最重要的地方,因为默认情况下Nginx和PHP他俩之间是一点感觉没有的。在之前,很多朋友都搭建过Apache+PHP,Apache+PHP编译后生成的是模块文件,而Nginx+PHP需要PHP生成可执行文件才可以,所以要利用fastcgi技术来实现N ginx与PHP的整合,这个只要我们安装是启用FastCGI即可。此次我们安装PHP不仅使用了FastCGI,而且还使用了PHP-FPM这么一个东东,PHP-FPM说白了是一个管理FastCGI的一个管理器,它作为PHP的插件纯在,在安装PHP要想使用PHP-FPM时就需要把PHP-FPM以补丁的形式安装到PHP中,而且PHP要与PHP-FPM版本一致,这是必须的,切记!
      首先我们把PHP和PHP-FPM下载到同一目录下,此次用的为php-5.3.0.tar.bz2和php-5.3.0-fpm-0.5.12.diff.gz,下载到了同一目录下
#tar xvf php-5.3.0.tar.bz2
#gzip -cd php-5.3.0-fpm-0.5.12.diff.gz | patch -d php-5.3.0 -p1         //将php-5.3.0-fpm-0.5.12.diff.gz以补丁形式加到php-5.3.0里面
#cd php-5.3.0
#./configure --prefix=/usr/local/php --with-gd=/usr/local/gd --with-jpeg-dir=/usr/local/jpeg --with-png-dir=/usr/local/png --with-freetype-dir=/usr/local/freetype --with-mysql=/usr/local/mysql --with-mcrypt=/usr/local/libmcrypt  --with-sockets  --enable-fastcgi --enable-fpm
注:Nginx+PHP整合,在安装时必须启用--enable-fastcgi和 --enable-fpm,这两个选项是做什么的上面已经描述。执行完后系统会提示--enable-fastcgi是一个未知选项,我们不必理会

今天在64位centos5.6系统上编译PHP5.2.17报错

checking for MySQL support... yes, shared checking for specified location of the MySQL UNIX socket... no checking for the location of libz... no checking for MySQL UNIX socket location... /var/lib/mysql/mysql.sock configure: error: Cannot find libmysqlclient under /usr. Note that the MySQL client library is not bundled anymore! [root@zjlca mysql]#

 

经查,问题是64位系统中 libmysqlclient 默认安装到了 /usr/lib64/mysql/ 目录下

而/usr/lib 目录下没有相应文件,但是php编译时,要去 /usr/lib目录下查找

 

解决方法:

ln -s /usr/lib64/mysql/libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so

 

#make
#make install
#cp php.ini-dist /usr/local/php/etc/php.ini
下面我们就要启动PHP-FPM
#/usr/local/php/sbin/php-fpm start


php版本变化以后ini文件名有变

php.ini-production对应于php.ini-recommended

php.ini-development对应于php.ini-dist



 

在启动PHP-FPM时会报上面这个错误,原因是PHP-FPM自己不知道以那个用户和组运行PHP,所以我们要修改一个文件,把文件中的注释去掉即可(打开文件把红色部分删除),然后PHP-FPM会以nobody用户和组去运行PHP。
#vi /usr/local/php/etc/php-fpm.conf

#/usr/local/php/sbin/php-fpm start
#ps -aux | grep php

#echo "/usr/local/php/sbin/php-fpm start" >>/etc/rc.local


五、整合Nginx与PHP
上面已经讲过,Nginx自己并不处理动态网页的请求,而且Nginx将得到的动态请求转交给PHP,下面我们打开Nginx的配置文件看一下
#vi /usr/local/nginx/conf/nginx.conf        //标的部分是我们后面要修改的

看上图,Nginx已经知道怎么把得到的请求传达给PHP,Nginx在得到*.php请求时,会把请求通过9000端口传给PHP。下面我们把这些注释给去掉即可,如下图

注:上面的/usr/local/nginx/html 是我们PHP网站放置的路径
      那么只有Nginx自己知道咋找PHP了还不行,还需要PHP知道咋找Nginx,PS:你见过大街上的JJMM约会时有不是相互认识对方,或者是不知道用啥方法和对方接头的?这点我们不需要担心,PHP-FPM已经在配置文件中定义了从哪接受PHP请求,我们可以打开配置文件看一下
#vi /usr/local/php/etc/php-fpm.conf

如上图所示,我们在前面已经看到过Nginx是通过本机的9000端口将PHP请求转发给PHP的,而上图我们可以看到PHP自己是从本机的9000端口侦听数据 ,Nginx与PHP通过本机的9000端口完成了数据请求。
六、测试
我们在nginx的配置文件里面已经定义了PHP网站的存放路径,路径问/usr/local/nginx/html
下面我们在这个目录下新建一个PHP页面测试网页,文件名为test.php,内容如下

重启PHP与nginx后(可以用杀死进程的方式关闭,然后在启动)我们在浏览器中输入http://localhost/test.php,出现如下界面算成功


详细出处参考:http://www.jb51.net/article/26597.htm
详细出处参考:http://www.jb51.net/article/26597.htm

 

 

更改nginx网站根目录

 
 
默认网站根目录为/usr/local/nginx/html,要将它改成/homw/www
vi /usr/local/nginx/conf/nginx.conf
将其中的

        location / {
            root   html;
            index  index.php index.html index.htm;
        }
改为

        location / {
            root   /home/www;
            index  index.php index.html index.htm;
        }
然后再将
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;
        }
改为
location ~ \.php$ {
            root           /home/www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
然后重启nginx
已经安装了samba,所以要将vi /etc/samba/smb.conf中的[public]下的path值改为
path = /home/www/

 

 二、php独立安装扩展模块(SOCKETS)

 
在安装cacti的时候是需要使用到sockets模块的,如果在安装php的时候没有使用--with-sockets的话,这时就必须手动重新添加此模块。操作步骤如下
 
1。进入php源文件目录ext下,找到sockets目录。并进入此目录
  #cd php-5.2.9/ext/sockets/

2.在该目录下执行phpize命令,此命令在php目录的bin下
# /usr/local/php/bin/phpize
 
运行/usr/local/webserver/php/bin/phpize时出现:Configuring for:PHP Api Version:         20041225Zend Module Api No:      20060613Zend Extension Api No:   220060519Cannot find autoconf. Please check your autoconf installation and the$PHP_AUTOCONF environment variable. Then, rerun this script.根据网上的解决办法是:# cd /usr/src# wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz# tar -zvxf m4-1.4.9.tar.gz# cd m4-1.4.9/# ./configure && make && make install# cd ../# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz# tar -zvxf autoconf-2.62.tar.gz# cd autoconf-2.62/# ./configure && make && make install可爱的yum让我更容易把没安装的包安装好 yum install m4 yum install autoconf
 
3。配置编译安装
# ./configure --enable-sockets --with-php-config=/usr/local/php/bin/php-config
# make
# make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
提示so已经安装到目录下。
 
4。修改配置在php.ini里,设置扩展目录
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
并添加扩展模块引用:
extension = sockets.so
 
5.检查php.ini配置文件的正确性
/usr/local/php/bin/php -v
执行这个命令时,php会去检查配置文件是否正确,如果有配置错误,这里会报错,可以根据错误信息去排查

6.通过/usr/local/php/bin/php -m命令查看是否安装sockets成功

monitor# /usr/local/php/bin/php -m
[PHP Modules]
ctype
date
dom
filter
gd
hash
iconv
json
libxml
mbstring
mysql
pcre
PDO
pdo_sqlite
posix
Reflection
session
SimpleXML
sockets
SPL
SQLite
standard
tokenizer
xml
xmlreader
xmlwriter
zlib

[Zend Modules]

 
7.重启apache生效
/usr/local/apache2/bin/apachectl restart
 
 
 

解决:Fatal error: Call to undefined function: mysql_connect()的解决

原因:如果是源码编译php,是因为在configure时没有加入--with-mysql=/usr/local/mysql 这个时候需要加入该选项重新编译。

Configure,接下来可能会出现:

checking for MySQL support... yes
checking for specified location of the MySQL UNIX socket...no
checking for MySQL UNIX socket location... no
configure: error: Cannot find libmysqlclient_r under/usr/local/mysql. Note that the MySQL client library is not bundledanymore!

这时候是因为64位系统中 libmysqlclient默认安装到了 /usr/lib64/mysql/目录下

/usr/lib目录下没有相应文件,但是php编译时,要去 /usr/lib目录下查找

 

解决方法:

ln -s /usr/lib64/mysql/libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so