LNMP环境搭建(nginx-1.6.2+mysql-5.6.23+php-5.4.37)

Linux系统 gongyj 1814℃ 已收录 0评论

Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。它的特点就是高效、稳定、简单、资源占用率低、并发性能高,扩展模块也很多,因此更多的企业会考虑使用源码搭建LNMP环境,这样可以更加灵活的配置各项功能,将性能调制到最佳状态。Nginx的安装非常简单,网上随便搜一篇安装指导即可。各大门户都在大量使用,非常成熟。Nginx的配置也非常简单,它的配置文件可读性,要优于apche,采用的语法结构看起来很像常见的编程语言,比如c++,java,很优雅,非常简洁。当然如果需求比较简单,可以考虑rpm包直接安装。

lnmp.jpg

一、系统环境

以Centos-6.4-x86_64为例,安装时选择中文Minimal模式,关闭selinux功能。

[root@bbs ~]# uname -r
2.6.32-358.el6.x86_64
[root@bbs ~]# cat/etc/redhat-release
CentOS release 6.4 (Final)
[root@bbs ~]# vi/etc/sysconfig/iptables
iptables -A INPUT -m state --state NEW,ESTABLISHED -m tcp -p tcp --dport 80 -j ACCEPT #允许80端口通过防火墙
iptables -A INPUT -m state --state NEW,ESTABLISHED -m tcp -p tcp --dport 3306 -j ACCEPT #允许3306端口通过防火墙

二、开始安装部署LNMP

1、部署环境之前,先准备好所需的软件包,建立一个ftp共享,下载nginx-1.6.2.tar.gz , pcre-8.36.tar.gz,ngx_cache_purge-2.3.tar.gz,zlib-1.2.8.tar.gz , openssl-1.0.1k.tar.gz,nginx-1.6.2.tar.gz,mysql-5.6.23.tar.gz , php-5.4.37.tar.gz , libiconv-1.14.tar.gz , libmcrypt-2.5.8.tar.gz , mcrypt-2.6.8.tar.gz , mhash-0.9.9.9.tar.bz2 , PDO_MYSQL-1.0.2.tgz , ImageMagick-6.8.9-10.tar.gz , imagick-3.1.2.tgz , memcache-2.2.7.tgz , redis-2.2.4.tgz , mongo-1.5.5.tgz 软件包到ftp下的lnmp-bbs文件夹。并将Centos6.4关盘中yum软件仓库全都放到ftp的根目录下。修改yum配置指定的软件仓库位置如下:

[local]
name=CentOS-6.4-LAN
baseurl=ftp://192.168.1.100/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[root@bbs ~]# yum clean all       //清空yum缓存
[root@bbs ~]# yum check-update   //检查可更新的rpm包

并将源码包全部下载到/usr/local/src/下。

2、安装nginx

安装依赖

yum install -y gcc gcc-c++ make

扩展包,解压这些文件,并不需要安装,但有些php需要,所以也安装一下

cd /usr/local/src
tar xf ngx_cache_purge-2.3.tar.gz
#用于从FastCGI、proxy、SCGI 和uWSGI缓存中增加内容清除功能
yum install -y perl
tar xf openssl-1.0.1k.tar.gz
#用于https加密
cd openssl-1.0.1k
 ./config --prefix=/usr/local/openssl
make && make install
cd ..
tar xf zlib-1.2.8.tar.gz
#压缩模块ngx_http_gzip_module需要使用zlib库。
cd zlib-1.2.8
./configure --prefix=/usr/local/zlib
make && make install
cd ..

编译安装nginx

tar xf nginx-1.6.2.tar.gz 
useradd www -r -s /bin/false
cd nginx-1.6.2
./configure --user=www --group=www --prefix=/usr/local/nginx --error-log-path=/var/log/nginx/error.log --add-module=../ngx_cache_purge-2.3 --with-http_stub_status_module --with-http_ssl_module --with-openssl=../openssl-1.0.1k --with-pcre=/usr/local/src/pcre-8.36 --with-zlib=/usr/local/src/zlib-1.2.8 --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module
make && make install
chown www. /var/log/nginx

注意:–with-openssl=/usr/local/src/openssl-1.0.1k –with-zlib=/usr/local/src/zlib-1.2.8 –with-pcre=/usr/local/src/pcre-8.36指向的是源码包解压的路径,而不是安装的路径,否则会报错

创建启动脚本

vim /etc/init.d/nginx
#!/bin/bash
#
# Startup script for Nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    sleep 1
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac
chmod +x /etc/init.d/nginx

3、修改配置文件

vim /usr/local/nginx/conf/nginx.conf
user www;
worker_processes 8;
pid /var/run/nginx.pid;

error_log  /var/log/nginx/error.log;

events {
    worker_connections  2048;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr $http_host - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    server_names_hash_bucket_size 128;
    proxy_ignore_client_abort on;
    client_header_buffer_size 128k;
    large_client_header_buffers 4 128k;
    client_max_body_size 8m;
    send_timeout 120;
    fastcgi_connect_timeout 120;
    fastcgi_send_timeout 120;
    fastcgi_read_timeout 120;
    fastcgi_buffer_size 128K;
    fastcgi_buffers 8 128k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;

    sendfile        on;
    tcp_nopush     on;

    keepalive_timeout  90;

    gzip  on;

    gzip_min_length 1k;
    gzip_buffers 16 64k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_disable "MSIE [1-6].";
    gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php image/jpeg image/gif image/png;
    fastcgi_intercept_errors on;

    server_tokens off;

    include /usr/local/nginx/conf.d/*.conf;

    server {
       #如果没有指定域名或虚拟主机中没有这个域名,默认返回444
       listen       80  default_server;
       server_name  _;
       return       444;
    }
}

创建虚拟主机配置文件

mkdir /usr/local/nginx/conf.d
vim /usr/local/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  example.com www.example.com;

    access_log  /var/log/nginx/example.access.log  main;

    location / {
        root   html;
        index  index.html index.shtml index.htm index.php;
        #Nginx本身已经支持了shtml格式文件解析,但默认是不开启的,需要手动开启。
        ssi on;
        ssi_silent_errors on;
        ssi_types text/shtml;
    }

    location ~.*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|mp4|pdf|)$ {
        expires 30d;
        log_not_found off;
        access_log off;
    }

    location ~.*\.(js|css)$ {
        expires 1d;
        log_not_found off;
        access_log off;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #   proxy_pass   http://127.0.0.1;
    #}

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

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

配置nginx状态监控

vim /usr/local/nginx/conf.d/nginxstatus.conf
server {
    listen       80;
    server_name  $hostname;

    #charset koi8-r;

    #查看nginx进程状态,连接数等信息
    location /nginx-status {
        stub_status on;
        access_log off;
        #allow  127.0.0.1;
        #allow  192.168.0.0/16;
        allow  192.168.2.1;
        deny   all;
    }

    #查看php进程状态,连接数等信息,php配置文件也需要修改
    location ~ ^/(php-status|ping)$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        include fastcgi_params;
        #allow  www.example.com;
        #allow  192.168.0.0/16;
        allow  192.168.2.1;
        deny   all;
    }

    location ~ /\.ht {
        deny  all;
    }
}

https配置文件

vim /usr/local/nginx/conf.d/example_ssl.conf
# HTTPS server
#
#server {
#    listen       443 ssl;
#    server_name  localhost;

#    ssl_certificate      /etc/nginx/cert.pem;
#    ssl_certificate_key  /etc/nginx/cert.key;

#    ssl_session_cache shared:SSL:1m;
#    ssl_session_timeout  5m;

#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers   on;

#    location / {
#        root   /usr/share/nginx/html;
#        index  index.html index.htm;
#    }
#}

创建日志切割脚本

vim /etc/logrotate.d/nginx
/var/log/nginx/*.log {
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 www www
        sharedscripts
        postrotate
                [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
        endscript
}

启动服务

/etc/init.d/nginx restart
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#标准的nginx启动命令
/usr/local/nginx/sbin/nginx -t
测试配置文件语法

设置开机启动

chkcofig nginx on

4、安装mysql数据库

安装依赖

yum install -y gcc gcc-c++ make cmake bison perl ncurses ncurses-devel openssl-devel zlib-devel

添加mysql系统用户

useradd mysql -r -s /bin/false
cd /usr/local/src
tar xf mysql-5.6.23.tar.gz
cd mysql-5.6.23

提前建好相关目录

mkdir -p /datadir/mysqldata
mkdir -p /var/log/mysql_logs
mkdir /var/lib/mysql
chown -R mysql.mysql /datadir/mysqldata /var/log/mysql_logs /var/lib/mysql/

cmake 编译配置

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
#mysql安装目录
 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
 #sock文件位置
 -DSYSCONFDIR=/etc/my.cnf \
 -DMYSQL_DATADIR=/datadir/mysqldata \#
 数据目录
 -DDEFAULT_CHARSET=utf8 \#
 设置默认的字符集,默认latin1
 -DDEFAULT_COLLATION=utf8_general_ci \
 #编码校对规则(utf8_general_ci快速/utf8_unicode_ci准确)
 -DWITH_EXTRA_CHARSETS:STRING=utf8,gbk \
 #额外的字符集
 -DWTIH_LIBWRAP=0 \
 #禁用libwrap库(实现了通用TCP包装的功能,为网络服务守护进程使用)
 -DWITH_INNOBASE_STORAGE_ENGINE=1 \
 #innodb引擎
 -DWITH_MYISAM_STORAGE_ENGINE=1 \
 #myisam引擎
 -DWITHOUT_BLACKHOLE_STORAGE_ENGINE=1 \
 #禁用blackhole引擎
 -DWITHOUT_FEDERATED_STORAGE_ENGINE=1 \
 #禁用federated引擎
 -DWITHOUT_ARCHIVE_STORAGE_ENGINE=1 \
 #禁用archive引擎
 -DENABLED_LOCAL_INFILE=1 \
 #允许从本地导入数据 
 -DEXTRA_CHARSETS=all \
 #启用所有扩展字符集(默认为all)
 -DWITH_ZLIB=system \
 #启用zlib库支持(zib、gzib相关)
 -DWITH_SSL=system
 #启用ssl库支持(安全套接层)

根据自己的需要,增加参数。

有时候会出现类似的问题:

-- Googlemock was not found. gtest-based unit tests will be disabled. You can run cmake . -DENABLE_DOWNLOADS=1 to automatically download and build required components from source.
-- If you are inside a firewall, you may need to use an http proxy: export http_proxy=http://example.com:80

使用参数-DENABLE_DOWNLOADS=1 自动下载。不编译谷歌的测试包也没有什么问题,但是之前的某些版本会出现无法编译的问题。

有网络限制,设置http代理export http_proxy=http://example.com:80。环境变量http_proxy 也为 curl 等其他工具所用。尽管 yum 可以识别大写或小写的 http_proxy,但curl 要求环境变量的名称是小写。

其它的一些数据引擎,在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP(Memory),其它的引擎也编译进去了,只是不启用。

如果你想除去对某种引擎的支持,则在CMake编译选项中使用-DWITHOUT_<ENGINE>_STORAGE_ENGINE去掉该引擎:

   -DWITH_MEMORY_STORAGE_ENGINE=1
   -DWITH_ARCHIVE_STORAGE_ENGINE=1
   -DWITH_BLACKHOLE_STORAGE_ENGINE=1
   -DWITH_FEDERATED_STORAGE_ENGINE=1
   -DWITH_PARTITION_STORAGE_ENGINE=1

编译安装

make && make install

如果需要更改配置,则:

make clean
rm -f CMakeCache.txt

拷贝配置文件和启动脚本

\cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
\cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld

添加开机启动

chkconfig mysqld on

添加环境变量

echo 'export PATH=$PATH:/usr/local/mysql/bin'>>/etc/profile
source /etc/profile

建立链接文件,方便以后使用

ln -s /usr/local/mysql/lib/ /usr/lib/mysql
ln -s /usr/local/mysql/include/mysql /usr/include/mysql
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
ln -s /usr/local/mysql/man/man1/*  /usr/share/man/man1
ln -s /usr/local/mysql/man/man8/*  /usr/share/man/man8

初始化数据库

/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/datadir/mysqldata
[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

这时候会出现以下警告,下面配置my.cnf会解决这个问题。

详情请查看 MySQL 5.6 中 TIMESTAMP 的变化。

修改目录下my.cnf,部分参数需要结合实际情况进行修改:

vim /etc/my.cn
[client]
socket = /var/lib/mysql/mysql.sock
character_set_server=utf8
port = 3306

[mysql]
prompt = mysql[\\d] >
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8
no-auto-rehash

[mysqld]
user = mysql
port = 3306
basedir = /usr/local/mysql
datadir = /datadir/mysqldata
socket = /var/lib/mysql/mysql.sock
pid-file = /datadir/mysqldata/mysql.pid
default_storage_engine = InnoDB
 
#InnoDB
#innodb_buffer_pool_size = 128M
#innodb_log_file_size = 48M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
 
#MyISAM
#key_buffer_size = 48M
 
#character-set
character-set-server=utf8
collation-server=utf8_general_ci
 
#name-resolve
skip-host-cache
skip-name-resolve
 
#LOG
#/var/log/mysql_logs
log_error = /var/log/mysql_logs/mysql-error.log
long_query_time = 1
slow-query-log
slow_query_log_file = /var/log/mysql_logs/mysql-slow.log
 
#Others
explicit_defaults_for_timestamp=true
#max_connections = 500
open_files_limit = 65535
sql_mode="NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES"

启动数据库

/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

或者使用

/etc/init.d/mysqld start

mysql5.6启动脚本需要修改,否则找不到data目录,无法启动

vim /etc/init.d/mysqld
datadir_set=/datadir/mysqldata

mysql严格模式在配置文件中关闭后,启动脚本启动后无效,只有手动用mysqld_safe启动才会生效,所以也需要修改启动脚本

--sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
#在start函数里添加即可

安全设置(设定初始密码,移除匿名用户,移除测试数据库):

/usr/local/mysql/bin/mysql_secure_installation

或使用以下命令

/usr/local/mysql/bin/mysqladmin -u root password "123,abc"
/usr/local/mysql/bin/mysql --no-defaults -uroot -p"123,abc" -e \
"delete from mysql.user where not (user = 'root' and host = 'localhost');
DROP DATABASE test;
flush privileges;"

添加备份帐号和监控帐号

>grant select, reload, lock tables on *.* to 'backup'@'192.168.%' identified by "CLEcLqp12WX9tPuj";
>grant select, process, super on *.* to 'monitor'@'localhost' identified by "HmOgmwz9TQe6IexS3z";

查看mysql资源使用状态,调优

yum install perl-DBD-MySQL -y
wget http://hackmysql.com/scripts/mysqlreport -P /usr/bin
sudo chmod +x /usr/bin/mysqlreport

5、安装php软件包

PHP5手册http://www.php100.com/manual/php/

安装php软件之前,需要安装以下库,方可更佳完美的支持php软件

yum install -y gcc gcc-c++ make autoconf automake bison libxml2 libxml2-devel bzip2-devel openssl-devel openldap openldap-devel curl curl-devel libjpeg-devel libpng-devel libvpx libvpx-devel freetype-devel

zlib在安装nginx时已经装过了,编译php时引用安装位置就可以了

cd /usr/local/src
tar zxvf libiconv-1.14.tar.gz
#iconv函数库能够完成各种字符集间的转换
cd libiconv-1.14
./configure
make && make install
cd ..
tar zxvf libmcrypt-2.5.8.tar.gz
#libmcrypt 可以使php支持更多加密算法。
cd libmcrypt-2.5.8/
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
./configure
make && make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make && make install
cd /usr/local/src
tar jxvf mhash-0.9.9.9.tar.bz2
#mhash是一个哈稀演函数库,它可以支持多种哈稀演算法
cd mhash-0.9.9.9
./configure
make && make install
echo "/usr/local/lib" >>/etc/ld.so.conf
/sbin/ldconfig
或做软链接
ln -s /usr/local/lib/libmcrypt.la          /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so          /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4        /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8    /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a            /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la           /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so           /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2         /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so2.0.1      /usr/lib/libmhash.so2.0.1
cd ..
tar zxvf mcrypt-2.6.8.tar.gz
Mcrypt扩展库可以实现加密解密功能
cd mcrypt-2.6.8
/sbin/ldconfig
./configure
make && make install
cd ..

编译安装php

tar zxvf php-5.4.37.tar.gz
cd php-5.4.37
ln -s /usr/local/mysql/lib/libmysqlclient.so.18  /usr/lib64/
\cp ./ext/phar/phar/phar.php  ./ext/phar/phar.phar
\cp -frp /usr/lib64/libldap* /usr/lib/
./configure --prefix=/usr/local/php \
 --with-config-file-path=/usr/local/php/etc \
 --enable-zip \
 --enable-mbstring \
 --enable-bcmath \
 --enable-pcntl \
 --enable-exif \
 --enable-calendar \
 --enable-sysvmsg \
 --enable-sysvsem \
 --enable-sysvshm \
 --enable-wddx \
 --enable-xml \
 --enable-shmop \
 --enable-fpm \
 --enable-mbregex \
 --enable-soap \
 --enable-sockets \
 --enable-gd-native-ttf \
 --enable-gd-jis-conv \
 --enable-inline-optimization \
 --enable-session \
 --disable-rpath \
 --with-iconv \
 --with-freetype-dir \
 --with-jpeg-dir \
 --with-png-dir \
 --with-zlib-dir=/usr/local/zlib \
 --with-bz2 \
 --with-libxml-dir=/usr \
 --with-ldap \
 --with-ldap-sasl \
 --with-curl \
 --with-mcrypt \
 --with-gd \
 --with-openssl-dir=/usr/local/openssl \
 --with-mhash \
 --with-xmlrpc \
 --without-pear \
 --with-gettext \
 --with-mysql=/usr/local/mysql \
 --with-mysqli=/usr/local/mysql/bin/mysql_config
make ZEND_EXTRA_LIBS='-liconv' && make install
cd ..

创建配置文件相关目录

\cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
\cp /usr/local/src/php-5.4.37/php.ini-production /usr/local/php/etc/php.ini
mkdir -p /var/lib/php/session /var/log/php
chown www. /var/lib/php/session /var/log/php

创建启动脚本

\cp /usr/local/src/php-5.4.37/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig php-fpm on

编译安装扩展模块

tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2
ln -s /usr/local/mysql/include/* /usr/local/include/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql
make && make install
cd ..
yum install -y libtool-ltdl libtool-ltdl-devel
tar zxvf ImageMagick-6.8.9-10.tar.gz
cd ImageMagick-6.8.9-10
./configure --prefix=/usr/local/ImageMagick/ --enable-lzw --with-modules --with-quantum-depth=8 --enable-shared --disable-openmp
make && make install
cd ..
tar zxvf imagick-3.1.2.tgz
cd imagick-3.1.2
/usr/local/php/bin/phpize 
export PKG_CONFIG_PATH=/usr/local/ImageMagick/lib/pkgconfig/
./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/ImageMagick/
make && make install
cd ..
tar xf memcache-2.2.7.tgz 
cd memcache-2.2.7
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
cd ..
tar zxvf redis-2.2.4.tgz
cd redis-2.2.4
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
cd ..
tar zxvf mongo-1.5.5.tgz
cd mongo-1.5.5
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

修改php配置文件

(1)php-fpm配置文件

vim /usr/local/php/etc/php-fpm.conf
pid = /var/run/php-fpm.pid
#pid设置,默认在安装目录中的var/run/php-fpm.pid,修改位置后,启动脚本也需要相应修改一下

error_log = /var/log/php/php-fpm.log
#错误日志,默认在安装目录中的var/log/php-fpm.log

log_level = notice
#错误级别. 可用级别为: alert(必须立即处理), error(错误情况), warning(警告情况), notice(一般重要信息), debug(调试信息). 默认: notice.

emergency_restart_threshold = 60
emergency_restart_interval = 60s
#表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果超过 emergency_restart_threshold个,php-fpm就会优雅重启。这两个选项一般保持默认值。

process_control_timeout = 0
#设置子进程接受主进程复用信号的超时时间. 可用单位: s(秒), m(分), h(小时), 或者 d(天) 默认单位: s(秒). 默认值: 0.

daemonize = yes
#后台执行fpm,默认值为yes,如果为了调试可以改为no。在FPM中,可以使用不同的设置来运行多个进程池。 这些设置可以针对每个进程池单独设置。

user = www
group = www
#启动进程的用户和组

listen = 127.0.0.1:9000
#fpm监听端口,即nginx中php处理的地址,一般默认值即可。可用格式为: 'ip:port', 'port', '/path/to/unix/socket'. 每个进程池都需要设置.

listen.backlog = -1
#backlog数,-1表示无限制,由操作系统决定,此行注释掉就行。backlog含义参考:http://www.3gyou.cc/?p=41

listen.owner = www
listen.group = www
listen.mode = 0666
#unix socket设置选项,如果使用tcp方式访问,这里注释即可。

listen.allowed_clients = 127.0.0.1
#允许访问FastCGI进程的IP,设置any为不限制IP,如果要设置其他主机的nginx也能访问这台FPM进程,listen处要设置成本地可被访问的IP。默认值是any。每个地址是用逗号分隔. 如果没有设置或者为空,则允许任何服务器请求连接

pm = dynamic
#对于专用服务器,pm可以设置为static
#如何控制子进程,选项有static和dynamic。如果选择static,则由pm.max_children指定固定的子进程数。如果选择dynamic,则由下开参数决定:
pm.max_children = 100
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 100
pm.max_requests = 2000
#设置每个子进程重生之前服务的请求数. 对于可能存在内存泄漏的第三方模块来说是非常有用的. 如果设置为 '0' 则一直接受请求. 等同于 PHP_FCGI_MAX_REQUESTS 环境变量. 默认值: 0.
#pm.min_spare_servers <= pm.start_servers <= pm.max_spare_servers <= pm.max_children

pm.status_path = /php-status
#FPM状态页面的网址. 如果没有设置, 则无法访问状态页面. 默认值: none. munin监控会使用到

ping.path = /ping
#FPM监控页面的ping网址. 如果没有设置, 则无法访问ping页面. 该页面用于外部检测FPM是否存活并且可以响应请求. 请注意必须以斜线开头 (/).

ping.response = pong
#用于定义ping请求的返回相应. 返回为 HTTP 200 的 text/plain 格式文本. 默认值: pong.

slowlog = /var/log/php/$pool.log.slow
#慢请求的记录日志,配合request_slowlog_timeout使用

request_slowlog_timeout = 2s

request_terminate_timeout = 60
#设置单个请求的超时中止时间. 该选项可能会对php.ini设置中的'max_execution_time'因为某些特殊原因没有中止运行的脚本有用. 设置为 '0' 表示 'Off'.当经常出现502错误时可以尝试更改此选项。

rlimit_files = 1024
#设置文件打开描述符的rlimit限制. 默认值: 系统定义值默认可打开句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
 
rlimit_core = 0
#设置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整数. 默认值: 系统定义值.

(2)php.ini配置文件

vim /usr/local/php/lib/php.ini
expose_php = Off
#禁止显示php版本的信息

date.timezone = Asia/Shanghai
#时区,或设置成PRC

short_open_tag = ON 
#支持php短标签


extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
#扩展模块,extension意为基于php引擎的扩展,默认是在这个位置,如果扩展模块不在这个目录,增加一下这个路径设置
extension=imagick.so
extension=memcache.so
extension=mongo.so
extension=pdo_mysql.so
extension=redis.so

zend_extension
#意为基于zend引擎的扩展
zend_extension
#加载php扩展时需用全路径,而extension加载时可以用相对extension_dir的路径。

disable_functions =
#禁用哪些php函数,就在这添加,可以增加系统的安全性,防止被黑客用来提权
测试php页面能够正常访问
vim /usr/local/nginx/html/test.php
<?php
    phpinfo();       //长标签,php默认此模式
?>
或
<?phpinfo();?>       //短标签,需求改php.ini开启短标签,不推荐开启短标签功能

测试mysql连接是否成功

vim /usr/local/nginx/html/conn.php
<?php
    $link=mysql_connect('localhost','root','123456');
    var_dump($link);
?>

输入http://ip/conn.php

看到下面字样,表示成功:

resource(3) of type (mysql link)

三、常见错误:

1、安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法

ext/xmlrpc/libxmlrpc/encodings.o: In function `convert':
/usr/local/src/php-5.4.37/ext/xmlrpc/libxmlrpc/encodings.c:73: undefined reference to `libiconv_open'
/usr/local/src/php-5.4.37/ext/xmlrpc/libxmlrpc/encodings.c:81: undefined reference to `libiconv'
/usr/local/src/php-5.4.37/ext/xmlrpc/libxmlrpc/encodings.c:101: undefined reference to `libiconv_close'
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] 错误 1

在安裝 PHP 到系统中时要是发生「undefined reference to libiconv_open'」之类的错误信息,那表示在「./configure 」沒抓好一些环境变数值。错误发生点在建立「-o sapi/cli/php」是出错,没給到要 link 的 iconv 函式库参数。

解决方法一:编辑Makefile 大约106行左右的地方: EXTRA_LIBS = ….. -lcrypt 在最后加上 -liconv,例如: EXTRA_LIBS = ….. -lcrypt -liconv 然后重新再次 make 即可。

EXTRA_LIBS = -lcrypt -lz -lcrypt -lrt -lmysqlclient -lmcrypt -lltdl -lpng -     lz -ljpeg -lcurl -lbz2 -lz -lrt -lm -ldl -lnsl -lrt -lxml2 -lz -lm -lssl -l     crypto -ldl -lz -lcurl -lxml2 -lz -lm -lfreetype -lmysqlclient -lz -lm -lrt      -lssl -lcrypto -ldl -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -     lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt
在最后加上-liconv,
EXTRA_LIBS = -lcrypt -lz -lcrypt -lrt -lmysqlclient -lmcrypt -lltdl -lpng -     lz -ljpeg -lcurl -lbz2 -lz -lrt -lm -ldl -lnsl -lrt -lxml2 -lz -lm -lssl -l     crypto -ldl -lz -lcurl -lxml2 -lz -lm -lfreetype -lmysqlclient -lz -lm -lrt      -lssl -lcrypto -ldl -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -     lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -liconv

然后重新在make编译即可。

解决方法二:

make ZEND_EXTRA_LIBS='-liconv'
#make时加上参数即可

2、error while loading shared libraries: libmysqlclient.so.18错误解决办法

/usr/local/src/php-5.4.37/sapi/cli/php: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
make: *** [ext/phar/phar.php] 错误 127

解决办法很简单,就是查看你的mysql安装目录下/安装目录/lib/libmysqlclient.so.18是否存在,如果存在,那就做一个软链接到/usr/lib64/目录下

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/

3、[ext/phar/phar.phar] 错误 1

Generating phar.phar
chmod: 无法访问"ext/phar/phar.phar": 没有那个文件或目录
make: [ext/phar/phar.phar] 错误 1 (忽略)

解决方法:

\cp ./ext/phar/phar/phar.php  ./ext/phar/phar.phar

4、pdo_mysql.lo错误

在包含自 /usr/local/src/PDO_MYSQL-1.0.2/pdo_mysql.c:31 的文件中:
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:25:19: 错误:mysql.h:没有那个文件或目录
In file included from /usr/local/src/PDO_MYSQL-1.0.2/pdo_mysql.c:31:
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:36: 错误:expected specifier-qualifier-list before ‘MYSQL’
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:48: 错误:expected specifier-qualifier-list before ‘MYSQL_FIELD’
/usr/local/src/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:53: 错误:expected specifier-qualifier-list before ‘MYSQL_RES’
make: *** [pdo_mysql.lo] 错误 1

解决方法:

ln -s /usr/local/mysql/include/* /usr/local/include/

5、libmcrypt错误

configure:error: *** libmcrypt was not found

解决方法:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

6、ldap libraries错误

configure: error: Cannot find ldap libraries in /usr/lib.

解决方法:

如果是X64位系统  cp -frp /usr/lib64/libldap* /usr/lib/

其它内容,将在后续文章中发布。

本站文章如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:http://blog.chopmoon.com/favorites/200.html
喜欢 (0)
发表我的评论
取消评论

表情 代码 贴图 加粗 链接 私信 删除线 签到

Hi,请填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
正在加载中……