@cdmonkey
2015-04-24T16:06:46.000000Z
字数 7442
阅读 898
网络服务
首先要安装一些必要的依赖包:
[root@WEB-A1 ~]# yum install -y zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel openssl-devel libxslt-devel
然后还需要编译安装“iconv library”:
[root@WEB-A1 tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
[root@WEB-A1 tools]# tar zxf libiconv-1.14.tar.gz
[root@WEB-A1 tools]# cd libiconv-1.14
[root@WEB-A1 libiconv-1.14]# ./configure --prefix=/usr/local/libiconv
[root@WEB-A1 libiconv-1.14]# make && make install
最后进行正式的编译安装:
[root@WEB-A1 tools]# tar zxf php-5.3.27.tar.gz
[root@WEB-A1 tools]# cd php-5.3.27
--------------------
./configure \
--prefix=/application/php5.3.27 \
--with-apxs2=/application/apache/bin/apxs \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-xmlrpc \
--with-openssl \
--with-zlib \
--with-freetype-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-iconv=/usr/local/libiconv \
--enable-short-tags \
--enable-sockets \
--enable-zend-multibyte \
--enable-soap \
--enable-mbstring \
--enable-static \
--enable-gd-native-ttf \
--with-curl \
--with-xsl \
--enable-ftp \
--with-libxml-dir
make && make install
--------------------
[root@WEB-A1 php-5.3.27]# ln -s /application/php5.3.27/ /application/php
#通过上面的安装过程可以看出,PHP是联通Apache和MySQL的中间环节,所以从安装顺序上来讲应该放到最后。
上面的安装使用了PHP本地的MySQL驱动(mysqlnd,PHP5.3以后的版本支持),而无需在本地安装MySQL,这也是官方推荐的方法。具体内容可以参考:http://blog.linuxeye.com/395.html
接下来同MySQL一样,我们需要从源码的解压目录中拷贝相关的配置文件。
[root@WEB-A1 php-5.3.27]# ls php.ini-*
php.ini-development php.ini-production
#拷贝模板配置文件为正式的配置文件:
[root@WEB-A1 php-5.3.27]# cp php.ini-production /application/php/lib/php.ini
#这个配置文件可以暂时不用进行改动,即可正常的运行服务。请注意上面的配置文件路径。
#至此为止,安装过程结束。
配置文件模板 | 说明 |
---|---|
php.ini-development |
开发环境中所使用。配置内容中的所有的display_error 都是打开的(on),以便于进行服务调试。 |
php.ini-production |
生产环境中所使用。与上面相对应,所有的显示错误的配置项全是关闭的(off),避免错误信息外漏。 |
[root@WEB-A1 ~]# ll /application/apache/modules/
total 30484
-rw-r--r-- 1 root root 9115 Dec 6 13:18 httpd.exp
-rwxr-xr-x 1 root root 31201928 Dec 7 21:48 libphp5.so
#libphp5.so就是通过apxs插进来的功能模块。
[root@WEB-A1 ~]# grep libphp5 /application/apache/conf/httpd.conf
LoadModule php5_module modules/libphp5.so
#可以看到,Apache的主配置文件中包含了调用PHP的模块。它只有通过PHP才能对数据库进行读写操作,它本身没有操作动态数据的功能。
#在安装完PHP后上面的模块文件及配置项就会自动添加。
Apache与PHP之间的桥梁就是“libphp5.so”模块。配置Apache对PHP的支持基本上需要下面这三个步骤:
[root@WEB-A1 ~]# cd /application/apache/conf/
[root@WEB-A1 conf]# cp httpd.conf httpd.conf.bak
[root@WEB-A1 conf]# vim httpd.conf
#第一步:在<IfModule mime_module>模块中(第311行处)添加下列两行。其作用就是告知Apache对PHP页面调用PHP模块进行解析处理。
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps
#第二步:修改默认用户。
#出于对安全因素的考虑,应该将下列默认的用户改为其他用户,例如www(需要另外创建):
User daemon
Group daemon
#第三步:增加新的首页文件类型(.php):
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
----------------------------
[root@WEB-A1 conf]# useradd -M -s /sbin/nologin www
[root@WEB-A1 conf]# chown -R www.www /var/html/
[root@WEB-A1 conf]# /application/apache/bin/apachectl -t
Syntax OK
[root@WEB-A1 conf]# /application/apache/bin/apachectl restart
#注意,这里不要进行平滑重启。
Nginx是个轻量级的HTTP服务软件,必须借助第三方的FastCGI处理器才可以对PHP进行解析,因此其实这样看来Nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在nginx.conf中很容易设置)。
首先要安装一些必要的依赖包:
[root@WEB-A2 ~]# yum install -y zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel openssl-devel libxslt-devel
除了上面所必需的软件包外,还有下面的三个需要安装的软件(直接在命令行中复制执行即可)。
wget "http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?modtime=1171868460&big_mirror=0"
tar zxf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make && make install
sleep 2
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make && make install
cd ../../
--------------------
wget "http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1175740843&big_mirror=0"
tar zxf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/
./configure
make && make install
sleep 2
cd ../
--------------------
rm -f /usr/lib64/libmcrypt.*
rm -f /usr/lib64/libmhash*
ln -s /usr/local/lib64/libmcrypt.la /usr/lib64/libmcrypt.la
ln -s /usr/local/lib64/libmcrypt.so /usr/lib64/libmcrypt.so
ln -s /usr/local/lib64/libmcrypt.so.4 /usr/lib64/libmcrypt.so.4
ln -s /usr/local/lib64/libmcrypt.so.4.4.8 /usr/lib64/libmcrypt.so.4.4.8
ln -s /usr/local/lib64/libmhash.a /usr/lib64/libmhash.a
ln -s /usr/local/lib64/libmhash.la /usr/lib64/libmhash.la
ln -s /usr/local/lib64/libmhash.so /usr/lib64/libmhash.so
ln -s /usr/local/lib64/libmhash.so.2 /usr/lib64/libmhash.so.2
ln -s /usr/local/lib64/libmhash.so.2.0.1 /usr/lib64/libmhash.so.2.0.1
ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
--------------------
wget "http://downloads.sourceforge.net/mcrypt/mcrypt-2.6.8.tar.gz?modtime=1194463373&big_mirror=0"
tar zxf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure LD_LIBRARY_PATH=/usr/local/lib
make && make install
cd ../
sleep 2
PHP的安装在LAMP和LNMP两种平台下是有所不同的:
LAMP:Apache是以模块(插件)的方式调用PHP;
LNMP:Nginx则是以FastCGI方式。
[root@WEB-A2 tools]# tar zxf php-5.3.27.tar.gz
[root@WEB-A2 tools]# cd php-5.3.27
--------------------
./configure \
--prefix=/application/php5.3.27 \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-safe-mode \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--with-curlwrappers \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-zend-multibyte \
--enable-static \
--with-xsl \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-ftp
[root@WEB-A2 php-5.3.27]# ln -s /application/mysql/lib/ libmysqlclient.so.18 /usr/lib64/
[root@WEB-A2 php-5.3.27]# make && make install
[root@WEB-A2 php-5.3.27]# ln -s /application/php5.3.27/ /application/php
--------------------
#拷贝配置文件:
[root@WEB-A2 php-5.3.27]# cp php.ini-production /application/php/lib/php.ini
#这里我们需要替换一下PHP-FPM的配置文件(文件在源码目录内):
[root@WEB-A2 ~]# cd /application/php/etc/
[root@WEB-A2 etc]# cp php-fpm.conf.default php-fpm.conf.default.bak
[root@WEB-A2 etc]# mv php-fpm.conf.5.3.27-18 php-fpm.conf.default
#拷贝配置文件:
[root@WEB-A2 etc]# cp php-fpm.conf.default php-fpm.conf
#创建日志目录:
[root@WEB-A2 etc]# mkdir -p /app/logs
#进行语法检查:
[root@WEB-A2 etc]# /application/php/sbin/php-fpm -t
[17-Dec-2014 14:18:46] NOTICE: configuration file /application/php5.3.27/etc/php-fpm.conf test
is successful
--------------------
[root@WEB-A2 etc]# /application/php/sbin/php-fpm #启动PHP服务进程。
[root@WEB-A2 etc]# netstat -lntup|grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 18023/php-fpm
[root@WEB-A2 etc]# ps -ef|grep php-fpm|grep -v grep
root 18023 1 0 14:20 ? 00:00:00 php-fpm: master process (/application/php5.3.27/etc/php-fpm.conf)
nginx 18024 18023 0 14:20 ? 00:00:00 php-fpm: pool www
nginx 18025 18023 0 14:20 ? 00:00:00 php-fpm: pool www
nginx 18026 18023 0 14:20 ? 00:00:00 php-fpm: pool www
nginx 18027 18023 0 14:20 ? 00:00:00 php-fpm: pool www
...
PHP服务进程(php-fpm)的重启,目前已知的就是下面的办法:
#服务重启(杀进程,再启动服务):
[root@WEB-A2 ~]# pkill php-fpm
[root@WEB-A2 ~]# killall -9 php-fpm
[root@WEB-A2 ~]# /application/php/sbin/php-fpm
配置Nginx支持PHP:
与Apache不同,Nginx并不自带PHP模块,对于PHP的处理,需要转发给其他有PHP脚本处理能力的系统服务,包括Apache,Fastcgi等。当然,使用Fastcgi作为PHP后端处理服务是比较理想的选择。
将动态访问请求抛给FastCGI是通过location
模块内的fastcgi_pass
指令完成的(如下所示,指定了进程的地址以及监听的端口,Nginx就是通过这里与PHP进行交互的)。该location
模块提供了对PHP的支持,需要启用哪个虚拟主机解析功能,就将该模块添加到相应的server
块内即可。
[root@WEB-A2 ~]# vim /application/nginx/conf/nginx.conf
location ~ .*\.(php|php5)?$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}