[关闭]
@cdmonkey 2015-04-24T08:06:46.000000Z 字数 7442 阅读 820

PHP-LAMP&LNMP

网络服务


一、LAMP下安装PHP

1. 检查工作

2. 安装过程

首先要安装一些必要的依赖包:

  1. [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”:

  1. [root@WEB-A1 tools]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
  2. [root@WEB-A1 tools]# tar zxf libiconv-1.14.tar.gz
  3. [root@WEB-A1 tools]# cd libiconv-1.14
  4. [root@WEB-A1 libiconv-1.14]# ./configure --prefix=/usr/local/libiconv
  5. [root@WEB-A1 libiconv-1.14]# make && make install

最后进行正式的编译安装:

  1. [root@WEB-A1 tools]# tar zxf php-5.3.27.tar.gz
  2. [root@WEB-A1 tools]# cd php-5.3.27
  3. --------------------
  4. ./configure \
  5. --prefix=/application/php5.3.27 \
  6. --with-apxs2=/application/apache/bin/apxs \
  7. --with-mysql=mysqlnd \
  8. --with-mysqli=mysqlnd \
  9. --with-pdo-mysql=mysqlnd \
  10. --with-xmlrpc \
  11. --with-openssl \
  12. --with-zlib \
  13. --with-freetype-dir \
  14. --with-gd \
  15. --with-jpeg-dir \
  16. --with-png-dir \
  17. --with-iconv=/usr/local/libiconv \
  18. --enable-short-tags \
  19. --enable-sockets \
  20. --enable-zend-multibyte \
  21. --enable-soap \
  22. --enable-mbstring \
  23. --enable-static \
  24. --enable-gd-native-ttf \
  25. --with-curl \
  26. --with-xsl \
  27. --enable-ftp \
  28. --with-libxml-dir
  29. make && make install
  30. --------------------
  31. [root@WEB-A1 php-5.3.27]# ln -s /application/php5.3.27/ /application/php
  32. #通过上面的安装过程可以看出,PHP是联通Apache和MySQL的中间环节,所以从安装顺序上来讲应该放到最后。

上面的安装使用了PHP本地的MySQL驱动(mysqlnd,PHP5.3以后的版本支持),而无需在本地安装MySQL,这也是官方推荐的方法。具体内容可以参考:http://blog.linuxeye.com/395.html

接下来同MySQL一样,我们需要从源码的解压目录中拷贝相关的配置文件。

  1. [root@WEB-A1 php-5.3.27]# ls php.ini-*
  2. php.ini-development php.ini-production
  3. #拷贝模板配置文件为正式的配置文件:
  4. [root@WEB-A1 php-5.3.27]# cp php.ini-production /application/php/lib/php.ini
  5. #这个配置文件可以暂时不用进行改动,即可正常的运行服务。请注意上面的配置文件路径。
  6. #至此为止,安装过程结束。
配置文件模板 说明
php.ini-development 开发环境中所使用。配置内容中的所有的display_error都是打开的(on),以便于进行服务调试。
php.ini-production 生产环境中所使用。与上面相对应,所有的显示错误的配置项全是关闭的(off),避免错误信息外漏。
  1. [root@WEB-A1 ~]# ll /application/apache/modules/
  2. total 30484
  3. -rw-r--r-- 1 root root 9115 Dec 6 13:18 httpd.exp
  4. -rwxr-xr-x 1 root root 31201928 Dec 7 21:48 libphp5.so
  5. #libphp5.so就是通过apxs插进来的功能模块。
  6. [root@WEB-A1 ~]# grep libphp5 /application/apache/conf/httpd.conf
  7. LoadModule php5_module modules/libphp5.so
  8. #可以看到,Apache的主配置文件中包含了调用PHP的模块。它只有通过PHP才能对数据库进行读写操作,它本身没有操作动态数据的功能。
  9. #在安装完PHP后上面的模块文件及配置项就会自动添加。

3. 配置Apache支持PHP

Apache与PHP之间的桥梁就是“libphp5.so”模块。配置Apache对PHP的支持基本上需要下面这三个步骤:

  1. [root@WEB-A1 ~]# cd /application/apache/conf/
  2. [root@WEB-A1 conf]# cp httpd.conf httpd.conf.bak
  3. [root@WEB-A1 conf]# vim httpd.conf
  4. #第一步:在<IfModule mime_module>模块中(第311行处)添加下列两行。其作用就是告知Apache对PHP页面调用PHP模块进行解析处理。
  5. AddType application/x-httpd-php .php .phtml
  6. AddType application/x-httpd-php-source .phps
  7. #第二步:修改默认用户。
  8. #出于对安全因素的考虑,应该将下列默认的用户改为其他用户,例如www(需要另外创建):
  9. User daemon
  10. Group daemon
  11. #第三步:增加新的首页文件类型(.php):
  12. <IfModule dir_module>
  13. DirectoryIndex index.php index.html
  14. </IfModule>
  15. ----------------------------
  16. [root@WEB-A1 conf]# useradd -M -s /sbin/nologin www
  17. [root@WEB-A1 conf]# chown -R www.www /var/html/
  18. [root@WEB-A1 conf]# /application/apache/bin/apachectl -t
  19. Syntax OK
  20. [root@WEB-A1 conf]# /application/apache/bin/apachectl restart
  21. #注意,这里不要进行平滑重启。

二、LNMP下安装PHP

Nginx是个轻量级的HTTP服务软件,必须借助第三方的FastCGI处理器才可以对PHP进行解析,因此其实这样看来Nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在nginx.conf中很容易设置)。

1. 安装前的准备工作

首先要安装一些必要的依赖包:

  1. [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

除了上面所必需的软件包外,还有下面的三个需要安装的软件(直接在命令行中复制执行即可)。

  1. wget "http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?modtime=1171868460&big_mirror=0"
  2. tar zxf libmcrypt-2.5.8.tar.gz
  3. cd libmcrypt-2.5.8
  4. ./configure
  5. make && make install
  6. sleep 2
  7. /sbin/ldconfig
  8. cd libltdl/
  9. ./configure --enable-ltdl-install
  10. make && make install
  11. cd ../../
  12. --------------------
  13. wget "http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1175740843&big_mirror=0"
  14. tar zxf mhash-0.9.9.9.tar.gz
  15. cd mhash-0.9.9.9/
  16. ./configure
  17. make && make install
  18. sleep 2
  19. cd ../
  20. --------------------
  21. rm -f /usr/lib64/libmcrypt.*
  22. rm -f /usr/lib64/libmhash*
  23. ln -s /usr/local/lib64/libmcrypt.la /usr/lib64/libmcrypt.la
  24. ln -s /usr/local/lib64/libmcrypt.so /usr/lib64/libmcrypt.so
  25. ln -s /usr/local/lib64/libmcrypt.so.4 /usr/lib64/libmcrypt.so.4
  26. ln -s /usr/local/lib64/libmcrypt.so.4.4.8 /usr/lib64/libmcrypt.so.4.4.8
  27. ln -s /usr/local/lib64/libmhash.a /usr/lib64/libmhash.a
  28. ln -s /usr/local/lib64/libmhash.la /usr/lib64/libmhash.la
  29. ln -s /usr/local/lib64/libmhash.so /usr/lib64/libmhash.so
  30. ln -s /usr/local/lib64/libmhash.so.2 /usr/lib64/libmhash.so.2
  31. ln -s /usr/local/lib64/libmhash.so.2.0.1 /usr/lib64/libmhash.so.2.0.1
  32. ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
  33. --------------------
  34. wget "http://downloads.sourceforge.net/mcrypt/mcrypt-2.6.8.tar.gz?modtime=1194463373&big_mirror=0"
  35. tar zxf mcrypt-2.6.8.tar.gz
  36. cd mcrypt-2.6.8/
  37. /sbin/ldconfig
  38. ./configure LD_LIBRARY_PATH=/usr/local/lib
  39. make && make install
  40. cd ../
  41. sleep 2

2. 安装PHP

PHP的安装在LAMP和LNMP两种平台下是有所不同的:

LAMP:Apache是以模块(插件)的方式调用PHP;
LNMP:Nginx则是以FastCGI方式。

  1. [root@WEB-A2 tools]# tar zxf php-5.3.27.tar.gz
  2. [root@WEB-A2 tools]# cd php-5.3.27
  3. --------------------
  4. ./configure \
  5. --prefix=/application/php5.3.27 \
  6. --with-mysql=mysqlnd \
  7. --with-mysqli=mysqlnd \
  8. --with-pdo-mysql=mysqlnd \
  9. --with-iconv-dir=/usr/local/libiconv \
  10. --with-freetype-dir \
  11. --with-jpeg-dir \
  12. --with-png-dir \
  13. --with-zlib \
  14. --with-libxml-dir=/usr \
  15. --enable-xml \
  16. --disable-rpath \
  17. --enable-safe-mode \
  18. --enable-bcmath \
  19. --enable-shmop \
  20. --enable-sysvsem \
  21. --enable-inline-optimization \
  22. --with-curl \
  23. --with-curlwrappers \
  24. --enable-mbregex \
  25. --enable-fpm \
  26. --enable-mbstring \
  27. --with-mcrypt \
  28. --with-gd \
  29. --enable-gd-native-ttf \
  30. --with-openssl \
  31. --with-mhash \
  32. --enable-pcntl \
  33. --enable-sockets \
  34. --with-xmlrpc \
  35. --enable-zip \
  36. --enable-soap \
  37. --enable-short-tags \
  38. --enable-zend-multibyte \
  39. --enable-static \
  40. --with-xsl \
  41. --with-fpm-user=nginx \
  42. --with-fpm-group=nginx \
  43. --enable-ftp
  44. [root@WEB-A2 php-5.3.27]# ln -s /application/mysql/lib/ libmysqlclient.so.18 /usr/lib64/
  45. [root@WEB-A2 php-5.3.27]# make && make install
  46. [root@WEB-A2 php-5.3.27]# ln -s /application/php5.3.27/ /application/php
  47. --------------------
  48. #拷贝配置文件:
  49. [root@WEB-A2 php-5.3.27]# cp php.ini-production /application/php/lib/php.ini
  50. #这里我们需要替换一下PHP-FPM的配置文件(文件在源码目录内):
  51. [root@WEB-A2 ~]# cd /application/php/etc/
  52. [root@WEB-A2 etc]# cp php-fpm.conf.default php-fpm.conf.default.bak
  53. [root@WEB-A2 etc]# mv php-fpm.conf.5.3.27-18 php-fpm.conf.default
  54. #拷贝配置文件:
  55. [root@WEB-A2 etc]# cp php-fpm.conf.default php-fpm.conf
  56. #创建日志目录:
  57. [root@WEB-A2 etc]# mkdir -p /app/logs
  58. #进行语法检查:
  59. [root@WEB-A2 etc]# /application/php/sbin/php-fpm -t
  60. [17-Dec-2014 14:18:46] NOTICE: configuration file /application/php5.3.27/etc/php-fpm.conf test
  61. is successful
  62. --------------------
  63. [root@WEB-A2 etc]# /application/php/sbin/php-fpm #启动PHP服务进程。
  64. [root@WEB-A2 etc]# netstat -lntup|grep php-fpm
  65. tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 18023/php-fpm
  66. [root@WEB-A2 etc]# ps -ef|grep php-fpm|grep -v grep
  67. root 18023 1 0 14:20 ? 00:00:00 php-fpm: master process (/application/php5.3.27/etc/php-fpm.conf)
  68. nginx 18024 18023 0 14:20 ? 00:00:00 php-fpm: pool www
  69. nginx 18025 18023 0 14:20 ? 00:00:00 php-fpm: pool www
  70. nginx 18026 18023 0 14:20 ? 00:00:00 php-fpm: pool www
  71. nginx 18027 18023 0 14:20 ? 00:00:00 php-fpm: pool www
  72. ...

3. PHP服务的启停

PHP服务进程(php-fpm)的重启,目前已知的就是下面的办法:

  1. #服务重启(杀进程,再启动服务):
  2. [root@WEB-A2 ~]# pkill php-fpm
  3. [root@WEB-A2 ~]# killall -9 php-fpm
  4. [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块内即可。

  1. [root@WEB-A2 ~]# vim /application/nginx/conf/nginx.conf
  2. location ~ .*\.(php|php5)?$ {
  3. fastcgi_pass 127.0.0.1:9000;
  4. fastcgi_index index.php;
  5. include fastcgi.conf;
  6. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注