昨天突然间打开http://fengzi.org特别慢,由于http://fengzi.org是伪静态的,这说明PHP脚本出了问题。
用netstat -anpo | grep “php-cgi” | wc -l 查了一下,发现同时请求的php-cgi程序竟然有165个。仔细想了一下,产生该问题的原因可能是php-cgi.sock处理过慢,和PHP本身的问题造成的。
Nginx的fastcgi处理模式有两种,一种是通过sock来处理,另一种是通过fastcgi的端口来处理。sock的处理虽然相比fastcgi能慢一点,但是相对稳定。下面我们要做的就是给fastcgi做本地均衡,来同享php-cgi.sock和fastcgi端口模式的优点。
具体的做法是,首先拷贝4组php-fpm.conf的配置样本
[root@ido etc]# cp php-fpm.conf php-fpm-9000.conf
[root@ido etc]# cp php-fpm.conf php-fpm-9001.conf
[root@ido etc]# cp php-fpm.conf php-fpm-9002.conf
[root@ido etc]# cp php-fpm.conf php-fpm-9003.conf
修改php-fpm9000.conf,监听地址和子进程如下<value name=”listen_address”>127.0.0.1:9000</value> <value name=”max_children”>0</value>。其他三个文档以此类推。
给Nginx.conf添加upstream,以支持php-cgi(php-fpm)的本地均衡。
upstream king {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
server 127.0.0.1:9002;
server 127.0.0.1:9003;
}
同样,server里的location加上proxy_pass
location ~ .*\.(php|php5)?$
{
proxy_pass http://king;
fastcgi_pass unix:/tmp/php-cgi.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fcgi.conf;
}
手动添加四组php-cgi均衡均衡脚本
[root@ido ~]# /usr/local/php/bin/php-cgi –fpm –fpm-config /usr/local/php/etc/php-fpm-9000.conf
[root@ido ~]# /usr/local/php/bin/php-cgi –fpm –fpm-config /usr/local/php/etc/php-fpm-9001.conf
[root@ido ~]# /usr/local/php/bin/php-cgi –fpm –fpm-config /usr/local/php/etc/php-fpm-9002.conf
[root@ido ~]# /usr/local/php/bin/php-cgi –fpm –fpm-config /usr/local/php/etc/php-fpm-9003.conf
重启nginx,观察了一下,网站运转良好,速度也很快也很稳定,但是内存占用很大。
PS. 用netstat -an | grep 9000 发现该端口一直是监听状态,并没有使用。所以我怀疑这次尝试很可能是无意义的或者是失败的。
我的VPS是256M的内存,CPU是四核心的,所以更多的我会在乎内存。而在我调试服务器的时候通常会遇到Nginx502 bad gateway和504 Gateway Time-out的错误。分析nginx.conf我发现server和fastcgi的buffers过多,导致fastcgi请求的数量过大,php-fpm无法及时处理而出错。循此思路我们可以再总体buffers不变的情况下减少请求数量,具体的ningx.conf改动细节如下:
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 1 128k;# 4 32k
client_max_body_size 8m;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 2 256k;#8 128
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
gzip on;
gzip_min_length 1k;
gzip_buffers 1 64k; #4 16
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
另外,php-fpm的默认静态处理方式会使得php-cgi的进程长期占用内存而无法释放,这也是导致nginx出错的原因之一,因此可以将php-fpm的处理方式改成apache模式。
<value name=”style”>apache-like</value>
从更改完毕到现在的测试表明上述方式的效果还是很明显的,并没有发现一次Nginx502 bad gateway或504 Gateway Time-out错误。当然,如果你的VPS或者服务器的性能足够好可以根据具体情况不必做无谓的改动。
2010年3月17日发布升级文件update.sh
适合所有安装过本LNMP的服务器,文件打包于LNMP.zip
2010年3月14日晚发布1.0正式版本,更新如下:
1.增加FTP管理员账户(提示输入)和密码
2.增加MYSQL管理员账户提示输入密码
3.完善主机系统,完整添加新域名的FTP用户、MYSQL用户以及PHPMYADMIN
4.新版本系统更加安全,修正其他小问题
计划:
1.用pureftp替换目前VSFTP,以便为用户划分磁盘份额
2.增加WEB交互友好界面,让管理员运用自如
历次改版:
2010年1月28日上午改版,增加VSFTPD自动安装;增加PHP安全性能自动配置;
修正主机域名问题,修正添加主机问题。
2010年1月2日上午改版,增加SHTML支持,增加虚拟主机管理系统。
==============================全新安装开始==================================
全新安装:
首先声明,该LNMP一键安装包并非我个人的原创。本人接触Linux刚2个星期,对于Linux 的很多细节都不甚了解。
LNMP是本人根据张宴和Licess的LNMP改
写而成,并经过本人的测试成功后才发布的。因此,这个LNMP上有很多前辈的身影。之所以发布出来,是本着共享的精神,也是希望更多的人能用上最新版本的Nginx+MySQL+PHP+phpMyAdmin+eAcelerator+Zend optimizer这些软件。
目前已经有超过200台服务器运用该LNMP软件包,且本人在THENYNOC和BURSTNET的VPS上都以做过测试,运行良好。言归正传,开始本LNMP的正式介绍。
VPS重装后,运行yum update进行系统升级。
运行cd /usr/src
接着下载本LNMP一键安装包 wget http://fengzi.org/LNMP.zip
解压缩 unzip LNMP.zip
进入该目录 cd LNMP
给脚本赋权 chmod +x down.sh install.sh opt.sh startup.sh addhost.sh
进行下载和安装
执行./down.sh
执行./install.sh
安装到最后的Zend optimizer时需要确认,在php.ini的location时填写 /usr/local/php/etc/ 然后询问服务器是否是apache时选NO,因为我们用的是Nginx
运行完毕后,进行优化,命令: ./opt.sh 最后开机运行 ./startup.sh
完毕。
这样就可以上传网站了。
程序安装路径:
MySQL : /usr/local/mysql
PHP : /usr/local/php
Nginx : /usr/local/nginx
PHPMyAdmin /web/www/phpmyadmin
Web目录 /web/www
添加虚拟主机与用户:
登陆SSH后用户默认的路径在/root/里 若不在此目录直接cd回车
运行./addhost.sh 里面有提示添加虚拟主机
添加后会显示用户的密码等信息。
更多交流请到LINUX-PHP群讨论: 8707379
注意:MYSQL数据库用户名root密码为你初始设置的密码,登陆后进入mysql数据库,找到user表,删除除了有root密码外的所有用户。
==============================全新安装结束==================================
==============================旧版本升级开始===================================
旧版本升级:
(适合所有曾经安装过本LNMP软件包的服务器)
cd /usr/src
rm -fr LNMP*
wget http://fengzi.org/LNMP.zip
unzip LNMP.zip
cd LNMP
sh update.sh
这样就可以了。
注意:
1.安装ZEND的时候询问php.ini目录时需要更改成/usr/local/php/etc/
2.升级过程中会根据服务器的状况停止WEB约30分钟,全新安装不必升级。
==============================旧版本升级结束===================================
May 18th, 2009 in
疯人醉语,
程序人生 | tags:
eAcelerator,
Linux,
LNMP,
LNMPz,
MYSQL,
NGINX,
PHP,
PHPMYADMIN,
Zend Optimizer |
19 Comments
昨天刚装的LNMPZ一键安装包,今天调试参数的时候发现Nginxp频繁出现504 Gateway Time-out错误,也参阅了网上的文章,诸如做8组较大的 large_client_header_buffers 8 128k; 但是问题仍没有解决。
要彻底解决Nginx 504 Gateway Time-out,还得从源头分析产生Nginx 504 Gateway Time-out的原因。504 Gateway Time-out产生的主要原因是PHP脚本执行时间过长造成的。一方面是由于处理时的缓存不够大,这通常用网上所说的增加8组较大的缓存可以解决;另一方面则是PHP脚本自身的问题,导致死循环或者无法释放。解决该问题的方法则是让PHP有个最大的执行时间。
我的具体做法是在php-fpm.conf里修改最大请求时间,把默认的0s改成30s,即<value name=”request_terminate_timeout”>30s</value>
这样再重启php-cgi,问题解决。
用了自己编写的LNMP一键安装包后发现MYSQL无法启动,提示Starting MySQL. ERROR! Manager of pid-file quit without updating file.错误。
查看MYSQL的错误日志时发现
[ERROR] /usr/local/mysql/libexec/mysqld: unknown option ‘–skip-federated’
原来可能是MYSQL版本提高了,不再支持–skip-federated这个参数了,解决方法是到/etc/my.cnf把skip federated注释掉,[root@www bin]# service mysql start
Starting MySQL. SUCCESS! 搞定!
May 15th, 2009 in
程序人生 | tags:
LNMP,
MYSQL |
No Comments

导致nginx 502 bad gateway的PHP-CGI(FASTCGI)
NGINX频爆502 BAD GATEWAY的错误,看了网上的教程,仍没有彻底解决。
目前我总结的解决502 BAD GATEWAY的方式有:
1.视服务器的性能,在php-fmp.conf里增加max_children的值,我目前用的15.
2.用reload参数定时重载php-fpm。这个主要原因是php脚本执行时间过长造成的,重载php-fpm能杜绝这个问题。如何彻底解决php-cgi脚本占用大量内存从而导致502错误的产生还值得进一步探讨,目前该做法不失为一种好办法。
具体的做法是,用crontab让php-fpm平滑重启,从而不影响PHP脚本的运行。
*/10 * * * * /usr/local/php/sbin/php-fpm reload
想了很多,感觉自己很少想问题。
有很多的事情等着我去做,也有很多的想法等着我去实现。一步一步,去创造生活,享受生活。
May 9th, 2009 in
疯人醉语 |
No Comments
Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!
May 8th, 2009 in
疯人醉语 |
1 Comment