Centos搭建php+nginx+mysql+mongo出现的问题及解决方法

这几天在Centos6.5环境下搭建服务器,php在项目中用来做接口服务器。因为以前没有搭建过,以前从事Linux c/c++开发,现在叫我搭建这个服务器,真心花了我好长时间,幸好最终成功部署,并测试成功。下面大概讲一下我的搭建流程和遇到的一些问题,希望遇到这些的问题的朋友,能够从我这里获取到一些帮助

我搭建的方式用了两种

1、用yum命令安装

安装mysql

yum install mysql mysql-server

chkconfig mysqld on  ---设为开机自动启动

安装完成后,在window用NavicatPremium 连接并创建相关表,或者直接在centos使用命令创建并导入事先准备的sql脚本

Navicat Premium是个非常好用的一个工具,支持mysql,sqlite,Oracle,SQLServer等数据库

安装nginx

yum install nginx

service nginx start(stop|restart)        ---启动(停止|重启)

chkconfig nginx on       ---设为开机自动启动

安装php

yum install php

安装php组件

yum install php-mysql php-gd libjpeg*php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcryptphp-bcmath php-mhash libmcrypt libmcrypt-devel php-fpm   openssl

/etc/rc.d/init.d/php-fpm start   ---启动

chkconfig php-fpm start     ---设为开机自动启动

修改nginx配置文件

cp /etc/nginx/nginx.conf /etc/nginx/nginx.confbak    #备份原有配置文件

vi/etc/nginx/nginx.conf  #编辑
user  nginx  nginx;  #修改nginx运行账号为:nginx组的nginx用户

:wq!   #保存退出

cp /etc/nginx/conf.d/default.conf/etc/nginx/conf.d/default.confbak   #备份原有配置文件
vi /etc/nginx/conf.d/default.conf   #编辑

index index.phpindex.html index.htm;   #增加index.php

 # pass thePHPscripts to 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;
 }
#取消FastCGIserver部分location的注释,并要注意fastcgi_param行的参数,改为$document_root$fastcgi_script_name,或者使用绝对路径

修改php配置文件

vi /etc/php.ini  #编辑

date.timezone=PRC     #在946行 把前面的分号去掉,改为date.timezone = PRC

 

vi/etc/php-fpm.d/www.conf   #编辑
user = nginx   #修改用户为nginx        
group = nginx   #修改组为nginx

注意:为你设置的主目录用户和用户组,默认安装的主目录为/usr/share/nginx/html/

安装成功验证测试:

在默认安装的主目录/usr/share/nginx/html/,创建一个简单的php文件

vi index.php   #新建index.php文件

<?php
     phpinfo();

?>

:wq! #保存

然后打开浏览器,输入你的服务器ip,如果出现关于phpinfo的相关信息,说明安装成功

2、下载源码安装

mysql我没有下载源码安装,而是直接使用yum install mysql 安装

(1)nginx源码安装

在安装之前,到网上下载pcre源码(pcre-8.36.zip),zlib源码(zlib-1.2.8.tar.gz),openssl源码(openssl-1.0.1j)

下载nginx,我这里的nginx版本为nginx-1.6.1.tar.gz

解压nginx-1.6.1.tar.gz并进入目录

./configure--prefix=/opt/nginx/ --with-http_ssl_module --with-http_stub_status_module--with-pcre=../pcre-8.36 --with-zlib=../zlib-1.2.8--with-openssl=../openssl-1.0.1j

说明:--with-pcre,--with-zlib,--with-openssl后面接的是源码目录

安装完成后,进入/opt/nginx目录,会生成“conf html       logs       sbin”

默认的主目录为”/opt/nginx/html“

安装完成后,你可以在你的浏览器中输入nginx服务器的ip地址,会打开“Welcome"等相关的网页,到目前为止,只支持html静态文件,如果你访问php文件是不可以访问的

(2)php源码安装

下载php,我这里的php版本为php-5.5.15.tar.gz

解压php-5.5.15.tar.gz并进入目录

./configure--prefix=/opt/php --with-config-file-path=/opt/php/etc --enable-fpm--with-fpm-user=sqy  --with-fpm-group=sqy --with-mysql=mysqlnd--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd  --with-gettext--enable-mbstring --with-iconv --with-mcrypt=/usr/local/lib --with-mhash--with-openssl -enable-soap  --with-libxml-dir  --with-png-dir=/usr/lib64--with-curl  --enable-sockets --with-zlib --enable-zip --with-bz2

说明:--with-fpm-user=sqy  --with-fpm-group=sqy

sqy为你自己的设置的主目录所在的用户和用户组

编译遇到问题:error: xml2-config not found.等相关字样,需要到网上下载相应的包,

(参考:http://www.cnblogs.com/alexqdh/archive/2012/11/20/2776017.html

安装成功后,现在我们来配置文件,配置文件很重要,有时因为配置问题,导致服务不能正常运行

(3)配置nginx,php

在nginx配置文件(/opt/nginx/conf/nginx.conf)中修改如下部分

index index.php index.htmlindex.htm;   #增加index.php

 # pass the PHPscripts toFastCGI 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;
 }
#取消FastCGIserver部分location的注释,并要注意fastcgi_param行的参数,改为$document_root$fastcgi_script_name,或者使用绝对路径

 

进入php安装后目录(/opt/php),拷贝/opt/php/etc/php-fpm.conf.default为/opt/php/etc/php-fpm.conf,/etc/php.ini为/opt/php/etc/php.ini

修改配置文件php-fpm.conf,查看user=你设置的在安装时,group=你设置的在安装时 ,我设置的为sqy,因为我设置的主目录在(/hom/sqy/myfile),现在我还没有设置我的主目录

修改配置文件php.ini,

data.timezone = PRC

设置完成后,重启php-fpm服务器

(4)测试是否能访问php文件

在nginx的html目录即(/opt/nginx/html),创建一个测试的php文件,test.php内容如下:

<?php

    echo "I am test";

?>

在浏览器输入服务器ip,如果页面出现”I am test“,说明我们配置的php服务器是成功的,如果出现”No input file specified.“,解决方法如下:

打开/opt/php/etc/php.ini文件,将”;cgi.fix_pathinfo=1“ 修改为”cgi.fix_pathinfo=1“,保存,并重启php-fpm服务器

(5)在nginx配置文件中,加入自定义服务

server {

    listen       8189;

    root /home/sqy/myfiles/wwwroot;
    charset utf-8;

    if (!-e$request_filename) {

        rewrite ^.*$ /index.php last;

      }

    #    listen      somename:8080;

    #    server_name somename  alias  another.alias;

 

    location ~\.php$ {

        #root html;

        fastcgi_pass127.0.0.1:9000;

        fastcgi_indexindex.php;

        fastcgi_paramSCRIPT_FILENAME $document_root$fastcgi_script_name;

        includefastcgi_params;

    }

  }


添加完成后,重启nginx服务器,在自定义主目录/home/sqy/myfiles/wwwroot创建一个测试的php文件,并在浏览器输入带8189端口的地址访问该文件

如果还是出现”No input file specified.“,但是80端口的主目录(/opt/nginx/html)下的文件却可以正常访问,自定义的端口8189主目录下的却还是”No input file specified.“,

打开配置文件”/opt/php/etc/php.ini“,查看”open_basedir =“是否被启用,如果启用,注释掉”;open_basedir =“,现在再重新访问,应该可以成功。

当nginx服务器可以正常解析静态html文件,而不能解析php文件时,可以查看nginx的输出错误日志(/opt/nginx/logs/error.log),看报什么错,然后再进行相应的解决

如果在nginx启动过程中,遇到类似”lock“的字样,是因为nginx的唯一性判断,如果我们用service nginx start启动程序,但是通过ps命令查看该进程的pid,并用kill命令杀死该进程,那么你在用service nginx start将不能正常启动,你可以将记录nginx的进程pid文件删除,并重新启动

(6)将nginx和php-fpm设置为服务程序

我们知道,在linux中,通过service XXX start 可以启动名为xxx的服务程序,因为我们采用源码安装/etc/init.d/目录下可能没有nginx和php-fpm,现在我将我的nginx和php-fpm脚本设置为服务程序的脚本如下,

nginx

#!/bin/bash

# nginx Startup script for the Nginx HTTP Server

# it is v.0.0.2 version.

# chkconfig: - 85 15

# description: Nginx is a high-performance web and proxyserver.

# It has a lot of features, but it's not for everyone.

# processname: nginx

# pidfile: /var/run/nginx.pid

# config: /usr/local/nginx/conf/nginx.conf

nginxd=/opt/nginx/sbin/nginx

nginx_config=/opt/nginx/conf/nginx.conf

nginx_pid=/opt/nginx/logs/nginx.pid

RETVAL=0

prog="nginx"

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

[ -x $nginxd ] || exit 0

# Start nginx daemons functions.

start() {

if [ -e $nginx_pid ];then

echo "nginx already running...."

exit 1

fi

echo -n $"Starting $prog: "

daemon $nginxd -c ${nginx_config}

RETVAL=$?

echo

[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx

return $RETVAL

}

# Stop nginx daemons functions.

stop() {

echo -n $"Stopping $prog: "

killproc $nginxd

RETVAL=$?

echo

[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx/opt/nginx/logs/nginx.pid

}

reload() {

echo -n $"Reloading $prog: "

#kill -HUP `cat ${nginx_pid}`

killproc $nginxd -HUP

RETVAL=$?

echo

}

# See how we were called.

case "$1" in

start)

start

;;

stop)

stop

;;

reload)

reload

;;

restart)

stop

start

;;

status)

status $prog

RETVAL=$?

;;

*)

echo $"Usage: $prog{start|stop|restart|reload|status|help}"

exit 1

esac

exit $RETVAL

php-fpm

#! /bin/sh

 

### BEGIN INIT INFO

# Provides:         php-fpm

# Required-Start:   $remote_fs $network

# Required-Stop:    $remote_fs $network

# Default-Start:    2 3 4 5

# Default-Stop:     0 1 6

# Short-Description: starts php-fpm

# Description:      starts the PHP FastCGI Process Manager daemon

### END INIT INFO

 

prefix=/opt/php

exec_prefix=${prefix}

 

php_fpm_BIN=${exec_prefix}/sbin/php-fpm

php_fpm_CONF=${prefix}/etc/php-fpm.conf

php_fpm_PID=${prefix}/var/run/php-fpm.pid

 

 

php_opts="--fpm-config $php_fpm_CONF --pid$php_fpm_PID"

 

 

wait_for_pid () {

        try=0

 

        while test$try -lt 35 ; do

 

               case"$1" in

                       'created')

                       if[ -f "$2" ] ; then

                               try=''

                               break

                       fi

                       ;;

 

                       'removed')

                       if[ ! -f "$2" ] ; then

                               try=''

                               break

                       fi

                       ;;

               esac

 

               echo-n .

               try=`expr$try + 1`

               sleep1

 

        done

 

}

 

case "$1" in

        start)

               echo-n "Starting php-fpm "

 

               $php_fpm_BIN--daemonize $php_opts

 

               if ["$?" != 0 ] ; then

                       echo" failed"

                       exit1

               fi

 

               wait_for_pidcreated $php_fpm_PID

 

               if [-n "$try" ] ; then

                       echo" failed"

                       exit1

               else

                       echo" done"

               fi

        ;;

 

        stop)

               echo-n "Gracefully shutting down php-fpm "

 

               if [! -r $php_fpm_PID ] ; then

                       echo"warning, no pid file found - php-fpm is not running ?"

                       exit 1

               fi

 

               kill-QUIT `cat $php_fpm_PID`

 

               wait_for_pidremoved $php_fpm_PID

 

               if [-n "$try" ] ; then

                       echo" failed. Use force-quit"

                       exit1

               else

                       echo" done"

               fi

        ;;

 

        status)

               if [! -r $php_fpm_PID ] ; then

                       echo"php-fpm is stopped"

                       exit0

               fi

 

               PID=`cat$php_fpm_PID`

               if ps-p $PID | grep -q $PID; then

                       echo"php-fpm (pid $PID) is running..."

               else

                       echo"php-fpm dead but pid file exists"

               fi

        ;;

 

        force-quit)

               echo-n "Terminating php-fpm "

 

               if [! -r $php_fpm_PID ] ; then

                       echo"warning, no pid file found - php-fpm is not running ?"

                       exit1

               fi

 

               kill-TERM `cat $php_fpm_PID`

 

               wait_for_pidremoved $php_fpm_PID

 

               if [-n "$try" ] ; then

                       echo" failed"

                       exit1

               else

                       echo" done"

               fi

        ;;

 

        restart)

               $0stop

               $0start

        ;;

 

        reload)

 

               echo-n "Reload service php-fpm "

 

               if [! -r $php_fpm_PID ] ; then

                       echo"warning, no pid file found - php-fpm is not running ?"

                       exit1

               fi

 

               kill-USR2 `cat $php_fpm_PID`

 

               echo" done"

        ;;

 

        *)

               echo"Usage: $0 {start|stop|force-quit|restart|reload|status}"

               exit1

        ;;

 

esac

现在我们先将之前直接启动的进程,用kill命令杀死,通过service nginx start,servicephp-fpm start来启动我们部署的服务程序

(7)php配置访问mongo数据库的方法
下载mongo-php-driver-master.zip,unzip命令解压该文件,查看README.md文件,执行以下命令

phpize

make

make install

如果执行phpize命令没有反应,可以通过yum命令安装php-devel或者下载php-devel源码文件(php-devel-5.3.3-26.el6.x86_64.rpm)进行安装

安装成功后,用find / -name "mongo.so"命令查看文件的安装位置,将mongo.so文件拷贝到”/opt/php/lib/php/extensions/no-debug-non-zts-20121212/“,

并修改配置文件”/opt/php/etc/php.ini“,加入”extension=mongo.so“,并重启php-fpm服务器,现在就可以在php代码中访问mongo数据库了

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值