前段时间Apache总是莫名其妙的挂掉了。。。然后只有手动启动才会恢复正常。。。
由于是编译的,只静态编译了prefork模式,修改了配置后还是不尽人意。
于是就打算重新编译,换成worker模式…却发现如果Apache使用worker,还想将php交给Apache处理的话就得使用线程安全版。
使用线程安全版就不能使用Zend Guard Loader。。。郁闷死了
只好用Apache2.4(worker-mod_fastcgi) And PHP5.3(php-fpm)代替原有方案了。。。
编译
一、编译Apache
使用2.4最新版,下载好解压后进入源码路径
下载apr和apr-util
cd srclib && wget -c http://mirror.esocc.com/apache//apr/apr-1.5.0.tar.gz && tar zxvf apr-1.5.0.tar.gz && mv apr-1.5.0 apr && rm -rf zxvf apr-1.5.0.tar.gz && wget -c http://mirror.esocc.com/apache//apr/apr-util-1.5.3.tar.gz && tar zxvf apr-util-1.5.3.tar.gz && mv apr-util-1.5.3 apr-util && rm -rf apr-util-1.5.3.tar.gz && cd ..
./configure --prefix=/usr/local/apache --enable-mpms-shared=all --with-included-apr --enable-nonportable-atomics=yes --enable-mods-shared=most
- –enable-mpms-shared=all 编译当前系统支持的所有多进程模块(以后切换直接编辑httpd.conf)
- –enable-mods-shared=most 编译大多数模块,出现错误自动跳过
- –enable-nonportable-atomics=yes 提高一点点性能(需要CPU支持)
make -j 2 && make install
(-j 2根据CPU可用核数调整)二、Mod_FastCGI
wget -c http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz && tar zxvf mod_fastcgi-2.4.6.tar.gz && cd mod_fastcgi-2.4.6
cp Makefile.AP2 Makefile && vim Makefile
将top_dir修改为Apache安装路径然后保存
builddir = . top_dir = /usr/local/apache打补丁:
wget -c http://leeon.me/upload/other/byte-compile-against-apache24.diff patch -p1 < byte-compile-against-apache24.difmake && install
三、PHP
./configure –prefix=/usr/local/php/ –enable-fpm –with-fpm-user=www –with-fpm-group=www –with-config-file-path=/usr/local/php/etc/
其余参数就不用写上吧。。。另外,别加上–disable-cli,cli在后面用得着的
make -j 2 && make install
cp php.ini-production /usr/local/php/etc/php.ini
cp -f (php-5.3.x-source-dir)/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm chmod 755 /etc/init.d/php-fpm /etc/init.d/php-fpm start /sbin/chkconfig --add php-fpm #(添加到开机服务列表) /sbin/chkconfig php-fpm on
配置
一、PHP-FPM
vim /etc/init.d/php-fpm
按照下面的填,然后保存
prefix=/usr/local/php exec_prefix= php_fpm_BIN=/usr/local/php/sbin/php-fpm php_fpm_CONF=/usr/local/php/etc/php-fpm.conf php_fpm_PID=/usr/local/php/var/run/php-fpm.pidcd /usr/local/php/etc && cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
同样按照下面的数值修改,然后保存(被注释了的去掉注释再修改,当然,如果明白各项参数可以根据情况自行修改)
pid = run/php-fpm.pid error_log = log/php-fpm.log listen = /dev/shm/php-cgi.sock listen.owner = www listen.group = www listen.mode = 0666 pm = dynamic pm.max_children = 15 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 15 pm.max_requests = 100 slowlog = var/log/$pool.log.slow request_slowlog_timeout = 60s request_terminate_timeout = 60s二、Apache-Mod_FastCGI
1、Mod_FastCGI
由于php自5.3.3以后集成了FastCGI并且使用FPM时无需打补丁,编译参数–enable-fastcgi 被去掉,所以呢,在php的sbin目录下就木有php-cgi文件了,只剩php-fpm……咱就只有用bin下的php文件了。。。
cd /var mkdir fcgi-bin #利于以后添加(管理)其它CGI ln -s /usr/local/php/bin php-fcgicd /usr/local/apache/conf vim httpd.conf #去掉 LoadModule fastcgi_module modules/mod_fastcgi.so 前的注释,如果没有就添加 #加入: <IfModule mod_fastcgi> ScriptAlias /fcgi-bin/ "/var/fcgi-bin/" FastCgiExternalServer /var/fcgi-bin/php-fcgi -socket /dev/shm/php-cgi.sock AddType application/x-httpd-php .php AddHandler php-fastcgi .php Action php-fastcgi /fcgi-bin/php-fcgi </IfModule> #保存2、MPM-Worker
加入
HostnameLookups Off Timeout 5 KeepAlive On MaxKeepAliveRequests 500 KeepAliveTimeout 5修改mpm_worker_module
<IfModule mpm_worker_module> StartServers 3 MinSpareThreads 10 MaxSpareThreads 25 ThreadsPerChild 50 MaxRequestWorkers 400 MaxConnectionsPerChild 100 </IfModule>
保存,根据需求修改好php.ini和httpd.conf,重启php-fpm和Apache,然后就可以新建虚拟主机了
或许会一直出现403错误,解决办法是将httpd.conf中的Require all denied修改为Require all granted即可
- 参考
- http://ideas.spkcn.com/technology/php-technology/133.html
- http://www.onepx.com/centos-apache-246.html
- http://blog.csdn.net/kge888/article/details/8985799
- http://blog.chinaunix.net/uid-26719405-id-3602614.html
- http://www.ctyun.cn/bbs/forum.php?mod=viewthread&tid=559
另外,如果有不明白的地方欢迎留言,以便博主补充进来!
转载请注明:神奇海域 » Apache2.4(worker-mod_fastcgi) And PHP5.3(php-fpm)