
netstat -anpo | grep “php-cgi” | wc -l
如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。
2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间
……
http
{
……
fastcgi_connect_timeout 300
fastcgi_send_timeout 300
fastcgi_read_timeout 300
……
}
……
增加fastcgi_connect_timeout 等三个参数值的方法效果也不好
经过长时间反复测试,发现静态页面不会出现该错误,只有在运行动态页面或者长时间 *** 作数据库时才会出现这个错误,重启Nginx+FastCGI后即可解决,但是几分钟到几个小时后又会出现该错误。
经过测试,发现修改php-fpm.conf文件中 request_terminate_timeout即FastCGI脚本运行时间可以有效改善该问题,增加CGI进程数也可以改善该问题,但占资源太多效率太低。
还可以修改
<value name=\“request_terminate_timeout\”>0s</value>
<value name=\“process_control_timeout\”>5s</value>
等值对FastCGI进行优化,所以出现502的错误其实不是nginx的问题
php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误
上面是转载的,试了里面的 修改php-fpm.conf文件中 request_terminate_timeou 为3s,试试效果。
我的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或者服务器的性能足够好可以根据具体情况不必做无谓的改动。
第步:载安装文件1. Apache 版本 httpd-2.2.21-win32-x86-no_ssl.msi
2. mod_fcgid 版本 mod_fcgid-2.3.6-win32-x86.zip
3. MySQL 版本 mysql-5.5.19-win32.msi
4. PHP 版本 php-5.3.5-nts-Win32-VC6-x86.zip
提示:
1. 建议选择SSL功能Apache版本完发我使用httpd-2.2.21-win32-x86-no_ssl.msi
2. 建议选择由Apache官所提供mod_fcgid 作FastCGI模块我使用目前新版本2.3.6 mod_fcgid官址
3. Windows安装MySQL选择.msi安装包格式我选择mysql-5.5.19-win32.msi 双击根据向导安装即简单便
4. PHP我选择用php-5.3.5-nts-Win32-VC6-x86.zip 版本nts(非线程安全)版本针PHPFastCGI安装式
第二步:安装文件
1. 要安装磁盘建文件夹管理便我D盘根目录创建WAMP文件夹 D:\WAMP(WAMP windows+apache+mysql+php缩写)
2. WAMP文件夹创建WWW文件夹用存放PHP网站程序D:\WAMP\WWW
3. 安装Apache服务器Apache服务器安装 D:\WAMP\Apache 文件夹具体Apache安装程参考文档 Apache安装图解
4. 载php-5.3.5-nts-Win32-VC6-x86 解压 D:\WAMP\PHP 文件夹
5. 安装MySql数据库MySQL安装 D:\WAMP\MySQL文件夹具体MySQL安装程参考文档MySQL安装图解
第三步:配置 Apache
首先使用文本编辑工具(推荐 EditPlus )打 D:\WAMP\Apache\conf\httpd.conf 文件文件Apache配置文件面几步都修改文件内容
要注意修改完 httpd.conf 文件需重新启Apache服务新设置才效
1. 设置监听端口
打 httpd.conf 文件找 Listen(概第46行)面数字改8080:
Listen 8080
参数用设置Apache服务器监听端口般默认80修改8080 避免Windows 2003系统IIS端口号冲突没启用IIS使用默认80端口号
2. 修改网站存放目录
我知道Apache默认网站存放目录Apache安装目录htdocs文件夹更改网站存放目录必须修改相应Apache配置
配置文件 httpd.conf 查找 DocumentRoot其修改指向网站目录确文件夹我改
DocumentRoot "D:/WAMP/www"
同查找 This should be changed to whatever you set DocumentRoot to面行 DocumentRoot >其修改自配置DocumentRoot 路径我修改:
3. mod_fcgid 配置
我载 mod_fcgid-2.3.6-win32-x86.zip 压缩包mod_fcgid.so文件复制apachemodules目录
打 httpd.conf 文件加入配置:
LoadModule fcgid_module modules/mod_fcgid.so
AddHandler fcgid-script .fcgi .php
#php.ini存放目录
FcgidInitialEnv PHPRC "D:/WAMP/PHP"
# 设置PHP_FCGI_MAX_REQUESTS于或等于FcgidMaxRequestsPerProcess防止php-cgi进程处理完所请求前退
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000
#php-cgi每进程请求数
FcgidMaxRequestsPerProcess 1000
#php-cgi进程数
FcgidMaxProcesses 5
#执行间
FcgidIOTimeout 120
FcgidIdleTimeout 120
#php-cgi路径
FcgidWrapper "D:/WAMP/PHP/php-cgi.exe" .php
AddType application/x-httpd-php .php
修改DocumentRoot 路径配置:
Options Indexes FollowSymLinks ExecCGI
Order allow,deny
Allow from all
AllowOverride All
注意:面红色文字部option添加属性ExecCGI
4. 修改目录首页文件
配置文件 httpd.conf 查找 DirectoryIndex index.html 其修改:
DirectoryIndex index.html index.htm index.php
DirectoryIndex 指客户浏览器访问路径目录Apache默认执行文件
我所修改例:客户浏览器访问目录Apache找该目录index.html没再找index.htm没再找 index.php都找则默认显示该目录文件列表参考文档:防止Apache显示文件列表
第四步:配置PHP
打PHP安装目录即D:\WAMP\PHP我看目录两文件 php.ini-development php.ini-production第发使用配置文件第二产环境配置我本机做发所选择前者php.ini-development复制份同目录并改名 php.iniphp.ini 前使用配置文件几步都修改php.ini文件内容要注意修改php.ini文件需重新启Apache服务新设置才效
1. 指定PHP扩展库存放目录
WindowsPHP扩展库通 DLL 形式存放PHPext目录
使用文本工具打php.ini文件查找extension_dir = "ext" On windows 面行前面号除掉改:
extension_dir = "D:/WAMP/PHP/ext"
extension_dir 表示PHP扩展库具体目录便调用相应DLL文件
2. 启相应扩展库
默认情况许PHP扩展库都关闭比默认PHP支持连接Mysql数据库需启相应扩展库
我启些用扩展库
查找 Windows Extensions(概941行)面extension列表
找扩展:
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_exif.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
extension=php_pdo_odbc.dll
extension=php_sockets.dll
extension=php_xmlrpc.dll
extension=php_xsl.dll
extension 前面号 掉希望加载其扩展模块相同要掉前面号即
提示1:重启Apache提示 unable to load dynamic library......php_curl.dll加载php_curl.dll错误解决拷贝 PHP 目录 libeay32.dll ssleay32.dll windows 目录或 windows/system32 目录要系统 Path 环境变量包含路径想拷贝直接 PHP 路径放系统 Path 环境变量 右击我电脑=>属性=>高级=>环境变量=>系统变量Path双击打PHP路径加号再前面( D:\WAMP\PHP )添加进OK重启Apache再提示该错误
提示2:Exif 扩展用显示图片 exif 信息该扩展需要 mbstring.dll 支持所必须 extension=php_exif.dll 行写extension=php_mbstring.dll 面
提示3:PHP自带扩展库能满足需要 pecl.php.net 查找并载需要库windows用户 pecl4win.php.net 或者 http://downloads.php.net/pierre/ 载已经编译DLL文件http://museum.php.net/php5/ 载PECL集合压缩包
提示4:找php_zip.dll其实php5.3始已经集zip扩展用 找zip扩展说明
3. 让PHP支持短标签
php.ini 配置文件查找 short_open_tag = Off (概266行)修改:short_open_tag = On 让其支持短标签
php代码般包含标签内设置 short_open_tag = On 写更简洁形式:
4. 配置PHPSession功能
使用session功能我必须配置session文件服务器保存目录我需要session建立读写目录目录独立于网站目录外
目录建D:\WAMP\sessiontmp php.ini 配置文件找 session.save_path = "/tmp" (概1467行)掉前面号改:
session.save_path = "D:/WAMP/sessiontmp"
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)