国语自产精品视频在线看:您身边最放心的安全下载站! 最新软件|热门排行|软件分类|软件专题|厂商大全

国语自产精品视频在线看

技术教程
您的位置:首页服务器类Web服务器 → nginx报的http错误

nginx报的http错误

我要评论 2012/11/29 20:49:41 来源:国语自产精品视频在线看 编辑:zbbingyang.com [ ] 评论:0 点击:335次

Nginx 502 Bad Gateway的【de】🅿含义是【hán yì shì】请求的【de】🅿PHP-CGI已经执行,但是由于某种原因【yuán yīn】(一般是读取资源的【de】问📖题【tí】🤾)没有执🤙行完毕【háng wán bì】而导致PHP-CGI进程终【jìn chéng zhōng】止📓。
Nginx 504 Gateway Time-out的【de】🅿含义是【hán yì shì】所请求的【de】🅿网关没有请求【yǒu qǐng qiú】到【dào】🐘,简单来🎓说就是⛪没有请求【yǒu qǐng qiú】到【dào】🐘可以执行的【háng de】🅿PHP-CGI。

解决这两个问【liǎng gè wèn】题其实是需要🎿综合思考的,一般来🔱说Nginx 502 Bad Gateway和【hé】🚗php-fpm.conf的设置【de shè zhì】🍏有关【yǒu guān】💵,而【ér】Nginx 504 Gateway Time-out则是与nginx.conf的设置【de shè zhì】🍏有关【yǒu guān】💵。

1.查看🐈FastCGI进程【jìn chéng】🤺是【shì】🥑否已经启动
NGINX 502错误🚒的【de】含义是【shì】🥑sock、端口没🔌被监听造成【chéng】的【de】。我们先🗳检查fastcgi是【shì】否在⚫运行
2.检查系【jiǎn chá xì】统Fastcgi进程【jìn chéng】🤺运行情况🥒
除了第【chú le dì】👂一种情【yī zhǒng qíng】况,fastcgi进程【jìn chéng】🤺数不够【shù bú gòu】用🗜、php执行时【zhí háng shí】间长【jiān zhǎng】、或者是【shì】🌘php-cgi进程【jìn chéng】🤺死掉也可能造成【chéng】💔nginx的【de】502错误🚒
运行以下命令判断是【shì】🥑否接近【fǒu jiē jìn】FastCGI进程【jìn chéng】🤺,如果fastcgi进程【jìn chéng】🤺数接近【shù jiē jìn】配【pèi】🤔置文件中设置【zhōng shè zhì】的【de】数值🥛,表明【biǎo míng】worker进程【jìn chéng】🤺数设置太少【tài shǎo】
netstat -anpo | grep "php-cgi" | wc -l
3.FastCGI执行时【zhí háng shí】间过长
根据实际情况🐜调高以下参数🐁值
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

4.头部太大这种🈁情况可能是【néng shì】🧣由于📋nginx默认的【mò rèn de】🏞fastcgi进程响【jìn chéng xiǎng】应的缓【yīng de huǎn】📗冲区太小造成的【de】🏞, 这将导致👍fastcgi进程被挂起【guà qǐ】, 如果你【rú guǒ nǐ】📱的【de】🏞fastcgi服务对【fú wù duì】这个挂起【guà qǐ】处理的【de】🏞不好, 那么最【nà me zuì】后就极有可能💚导致👍504 Gateway Time-out
现在的【de】🏞网站, 尤其某些论坛🤙有大量的【de】🏞回复和很多🦑内容的【nèi róng de】🕋, 一个页【yī gè yè】🥟面甚至有几百【yǒu jǐ bǎi】🆙K
默认的【mò rèn de】🏞fastcgi进程响【jìn chéng xiǎng】应的缓【yīng de huǎn】📗冲区是【chōng qū shì】🧣8K, 我们可🅱以设置📍大点:                               
fastcgi_buffer_size 128k;
fastcgi_buffers 8 128k;
如果你【rú guǒ nǐ】📱使用的【shǐ yòng de】🏞是🧣nginx的【de】负载🕜均衡Proxying,调整【diào zhěng】
proxy_buffer_size  16k;   这里参数调大
proxy_buffers   4 16k;
5.https转发配置错误🗺
正确的【de】🏞配置方法
server_name www.xok.la;
location /myproj/repos {
set $fixed_destination $http_destination;
if ( $http_destination ~* ^https(.*)$ )
{
set $fixed_destination http$1;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Destination $fixed_destination;
proxy_pass http://subversion_hosts;
}

下【xià】面我们来仔细分析一下【yī xià】🐐php-fpm.conf几个重要的参【yào de cān】数【shù】📄:
php-fpm.conf有两个至关重🤷要的参【yào de cān】数【shù】📄,一个是【yī gè shì】🎶”max_children”,另一个🐺是🈵”request_terminate_timeout”
我的两🈶个设置【gè shè zhì】的值一个是【yī gè shì】🎶”40″,一个是【yī gè shì】🎶”900″,但是🈵这个值【zhè gè zhí】💊不是🈵通用的,而是需🕷要自己计算的【jì suàn de】。
计算的【jì suàn de】方式如【fāng shì rú】下【xià】:
如果你【rú guǒ nǐ】的服【fú】务💸器性能【qì xìng néng】🏠足够好,且宽带资源足够充足【gòu chōng zú】🏭,PHP脚本没有系循环或【huán huò】BUG的话你✊可以【kě yǐ】直😧接将”request_terminate_timeout” 设置成0s。0s的含义是🈵让PHP-CGI一直执行下【xià】去而没有时间限制。而如果【ér rú guǒ】🖌你做不🧟到这一【dào zhè yī】点🤞,也就是🈵说你的【shuō nǐ de】PHP-CGI可能出【kě néng chū】🐕现某个BUG,或者你的宽带不够充足【gòu chōng zú】🏭或者其【huò zhě qí】他的原因导致【yīn dǎo zhì】你的PHP-CGI能够假死那么【sǐ nà me】就建议💝你给👣”request_terminate_timeout”赋一个💳值,这个值【zhè gè zhí】💊可以【kě yǐ】⛹根据你服【fú】🍁务器【qì】的🌴性能进【xìng néng jìn】🐟行设定。一般来说性能越好你可以【kě yǐ】⛹设置越【shè zhì yuè】高,20分钟-30分钟都可以【kě yǐ】⛹。由于我💆的服【fú】务💸器【qì】💕PHP脚本需【jiǎo běn xū】要长时间运行【jiān yùn háng】👵,有的可能会超过🔻10 分钟因此我设置了900秒🎠,这样不【zhè yàng bú】会导致【huì dǎo zhì】PHP-CGI死掉而【sǐ diào ér】出现【chū xiàn】🚔502 Bad gateway这个错误。

而”max_children”这个值【zhè gè zhí】😝又是怎💄么计算【me jì suàn】出来的【de】🔞呢?这个值【zhè gè zhí】😝原则上是越大越好🤭,php-cgi的【de】进程多了就【duō le jiù】会处理【huì chù lǐ】的【de】😄很快,排队的【de】请求就【qǐng qiú jiù】会很少【huì hěn shǎo】。设置🐤”max_children”也需要🌐根据服【gēn jù fú】务器的【de】性能进行设定,一般来🏛说一台服务器【fú wù qì】正常情【zhèng cháng qíng】💭况下每【kuàng xià měi】一个php-cgi所耗费【suǒ hào fèi】的内存【de nèi cún】🚝在【zài】20M左右💀,因此我【yīn cǐ wǒ】的【de】”max_children”我设置💰成40个,20M*40=800M也就是说在【zài】峰🚘值的时【zhí de shí】候所有【hòu suǒ yǒu】PHP-CGI所耗内【suǒ hào nèi】🕤存在【cún zài】🌱800M以内,低于我的【de】有效😆内存🚝1Gb。而如果我的【de】”max_children”设置的【de】🕶较小【jiào xiǎo】📉,比如5-10个,那么php-cgi就会【jiù huì】“很累”,处理速😩度也很🈹慢🐯,等待的【děng dài de】时间也【shí jiān yě】较长【jiào zhǎng】。如果长🚚时间没有得到❄处理的【de】😄请求就【qǐng qiú jiù】会出现504 Gateway Time-out这个错误,而正在【zài】处理的【de】😄很累的【de】那几个php-cgi如果遇到了问题就会【jiù huì】出现502 Bad gateway这个错误。

一个实例:

http://www.levil.cn/post/29/
 

我在【wǒ zài】CentOS下配置lnmp组合基【zǔ hé jī】😗本上用【yòng】💝的都是【de dōu shì】同样的🌦配置文件【jiàn】🐬,一直都【yī zhí dōu】🛣没出现过问题【guò wèn tí】,可最近🖤在一个👔vps上安装同样的🌦环境之后【hòu】⚡,网站在【wǎng zhàn zài】🌏线10多人就【duō rén jiù】出现了【chū xiàn le】📆打开速【dǎ kāi sù】度非常缓慢的情况【de qíng kuàng】👕,有好几【yǒu hǎo jǐ】🎩次都是【cì dōu shì】⭐直接达到了【le】📆nginx中设置的脚本【de jiǎo běn】📔最大超【zuì dà chāo】时时间🍦300秒【miǎo】,结果导🐩致nginx往客户端浏览器【lǎn qì】发送了【le】一个➖504 Gateway Time-out的错误代码,分析了【le】📆之后【hòu】⚡改动了【le】📆几处配置🈺文件【jiàn】🐬,终于避⏯免了该【miǎn le gāi】🐨情况🌆的出现。

从错误🕺代码基本可以【běn kě yǐ】确定跟【què dìng gēn】nginx本身无【běn shēn wú】📖关【guān】💡,主要是🐤提交给【tí jiāo gěi】🕎php-fpm的请求【de qǐng qiú】未能正确反馈【què fǎn kuì】而🔀导致【dǎo zhì】,一般情况🌆下,提交动【tí jiāo dòng】态请求的时候,nginx会直接把【bǎ】💟请求转交给php-fpm,而🔀php-fpm再分配php-cgi进程来处理相关【guān】💡的请求【de qǐng qiú】,之后【hòu】⚡再依次【zài yī cì】返回🎈,最后【hòu】⚡由【yóu】🛏nginx把【bǎ】💟结果反【jié guǒ fǎn】馈给客户端浏览器【lǎn qì】,但我这【dàn wǒ zhè】🚦个vps目前跑💤的是个纯php应用内【yīng yòng nèi】容【róng】,实际上【shí jì shàng】用【yòng】户所✏有的请【yǒu de qǐng】👽求都是php请求,有的耗费时间比较久【bǐ jiào jiǔ】,php-cgi进程就🚲一直都【yī zhí dōu】🛣被用【yòng】满🔭,而🔀php- fpm本身的【běn shēn de】配置文件【jiàn】🐬只打开了【le】📆10组【zǔ】php-cgi进程,这样⏰的话在线🌟用【yòng】户稍微多的话就会【huà jiù huì】导致请【dǎo zhì qǐng】求无法【qiú wú fǎ】被正常处理而🔀出错【chū cuò】🏾。

大概分⤵析出了【xī chū le】📆原因♐,下面做就比较🕉容易了【róng yì le】🔜,首先是【shǒu xiān shì】更改【gèng gǎi】php-fpm的几处配置🈺:

把【bǎ】💟max_children由【yóu】🛏之前的10改为【gǎi wéi】😽现在的30,这样⏰就可以保【bǎo】😈证有充🦈足的php-cgi进程可以被使用【yòng】;
把【bǎ】💟request_terminate_timeout由【yóu】🛏之前的0s改为【gǎi wéi】😽60s,这样⏰php-cgi进程处理脚本🗒的超时🚇时间就是60秒【miǎo】,可以防👙止进程【zhǐ jìn chéng】都被挂😟起,提高利🍫用效率【yòng xiào lǜ】。

接着再更改【gèng gǎi】nginx的几个配置项【pèi zhì xiàng】🥀,减少FastCGI的请求【de qǐng qiú】次数,尽量维持buffers不变:

fastcgi_buffers由【yóu】🛏 4 64k 改为【gǎi wéi】😽 2 256k;
fastcgi_buffer_size由【yóu】🛏 64k 改为【gǎi wéi】😽 128K;
fastcgi_busy_buffers_size 由【yóu】🛏 128K 改为【gǎi wéi】😽 256K;
fastcgi_temp_file_write_size 由【yóu】🛏 128K 改为【gǎi wéi】😽 256K。

好了【hǎo le】📆,重新加【chóng xīn jiā】🦒载php-fpm和nginx的配置,再次测【zài cì cè】🎽试,至今两周时间内没有再出现🆙504 Gateway Time-out的情况【de qíng kuàng】👕,算是达到效果⏪了【le】📆。

另一例子:

使用【yòng】ie正常🥣.其他人【qí tā rén】用【yòng】FF也正常【yě zhèng cháng】🥣.但是有👱个人使用【yòng】FF浏览报🍮错【cuò】502
查看后【chá kàn hòu】台error日志🏅,发现一🍅句【jù】
upstream sent too big header while reading response header from upstream
就是反馈回来【kuì huí lái】✅的【de】头部📪信息【xìn xī】太🐛大
一般应该是cookie里面带的【de】⛽
怀疑是【huái yí shì】FF里面的【de】⛽某个插件引起🛁返回太🛎多的头【duō de tóu】部📪信息【xìn xī】
一个个排查【pái chá】.最后发【zuì hòu fā】🍩现是FireBug导致的【de】⛽
既然是fastcgi返回的【de】头部📪太大【tài dà】.应该可以配置
查找资料后发【liào hòu fā】现应该是和fastcgi_buffer_*有关的【yǒu guān de】⛽
将相关🛐配置增🐪大.发现问【fā xiàn wèn】题解决📱
这边使📈用【yòng】的【de】⛽是
fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;
比原来🗑的【de】⛽默认【mò rèn】4k/8k要大许【yào dà xǔ】多

http400错💒:
nginx的【de】🍛HTTP400错误【cuò wù】🛢,而且这个【gè】HTTP400错误【cuò wù】🛢并不是【bìng bú shì】每次都会🛃出现的【de】🏏,查了一下🚏发现nginx 400错误【cuò wù】🛢是由于【yóu yú】🈶request header过大🥇,通常是由于【yóu yú】🈶cookie中写入🏅了较长的【zhǎng de】🍛字符串【zì fú chuàn】所引起的【de】🍛。解决方【jiě jué fāng】法是不🍲要在【yào zài】cookie里记录过多数据【jù】🖍,如果实🖐在【zài】需要😅的【de】话可📨以考虑调整在【zài】nginx.conf中的【zhōng de】🍛client_header_buffer_size(默认【mò rèn】1k)
若cookie太大🥇,可能还【kě néng hái】需要调【xū yào diào】整large_client_header_buffers(默认【mò rèn】4k),该参数👺说明如😿下🚏:
请求行【qǐng qiú háng】如果超【rú guǒ chāo】😲过buffer,就会报⛑HTTP 414错误【cuò wù】🛢(URI Too Long)
nginx接受最长的【zhǎng de】🍛HTTP头部大🥇小必须比其中一个【gè】📐buffer大🥇,否则就会报⛑400的【de】🍛HTTP错误【cuò wù】🛢(Bad Request)。
 
http413错💒:
在【zài】上传🤛时【shí】nginx返回了413错误【cuò wù】🛢,查看log文件【wén jiàn】🥟,显示的【xiǎn shì de】🎣错误【cuò wù】🛢信息是【xìn xī shì】:”413 Request Entity Too Large”, 于是在【yú shì zài】网上找了下🚏“nginx 413错误【cuò wù】🛢”发现需【fā xiàn xū】要做以【yào zuò yǐ】下🚏设置【shè zhì】:
在【zài】nginx.conf增加client_max_body_size的【de】设置【shè zhì】🌋, 这个【gè】值💓默认【mò rèn】是1m,可以增【kě yǐ zēng】🍳加到8m

关键词:nginx,http错误【cuò wù】🛢

阅读本文后您有什么感想? 已有 人给出评价!

  • 0 欢迎喜欢
  • 0 白痴
  • 0 拜托
  • 0 哇
  • 0 加油
  • 0 鄙视