请教如何配置nginx的fastcgi-cache

请教如何配置nginx的fastcgi-cache,第1张

1、查看当前的PHP FastCGI进程数是否够用:

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"


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9877602.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存