全球主机交流论坛

标题: Lnmp 502原因 不喜勿喷 [打印本页]

作者: qiqi13245    时间: 2011-4-21 17:35
标题: Lnmp 502原因 不喜勿喷
再次申明我只是小白,不喜勿喷

502 bad gateway
从字面意思理解就是网关不能到达,以及网关连接错误
会什么会出现网关这个词呢?我们来看看Nginx配置
server
        {
                listen       80;
                server_name ********;
                index index.html index.htm index.php default.html default.htm default.php;
                root  /home/wwwroot/******;

                location ~ .*\.(php|php5)?$
                        {
                                fastcgi_pass  127.0.0.1:9000;
                                fastcgi_index index.php;
                                include fcgi.conf;
                        }


                location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
                        {
                                expires      30d;
                        }

                location ~ .*\.(js|css)?$
                        {
                                expires      12h;
                        }

                log_format  ***  '$remote_addr - $remote_user [$time_local] $request '
             '$status $body_bytes_sent $http_referer '
             '$http_user_agent $http_x_forwarded_for';
        }

重点是加红部分
fastcgi_pass  127.0.0.1:9000;
这句是重点,pass?说明Nginx只是跟PHP一个代理的关系,而不是Nginx处理PHP,所以502是PHP的问题,不要再说是Nginx的问题了
不过,这种方式的确处理效率没Apache的快/稳定,已经成了公认的事实
虽然现在LNMP采用
fastcgi_pass  unix:/tmp/php-cgi.sock;
但是还是比不过apache
高并发尤其如此。

[ 本帖最后由 qiqi13245 于 2011-4-21 17:42 编辑 ]
作者: qiqi13245    时间: 2011-4-21 17:36
沙发享受下
作者: dreams777    时间: 2011-4-21 17:37
不是Nginx处理PHP,不要再说是Nginx的问题。
lighttpd在用,nginx暂时不用,的路过

[ 本帖最后由 dreams777 于 2011-4-21 17:40 编辑 ]
作者: qiqi13245    时间: 2011-4-21 17:39
原帖由 dreams777 于 2011-4-21 17:37 发表
不是Nginx处理PHP,不要再说是Nginx的问题。

本来就是 都proxy pass了
html是nginx
作者: 有个就好    时间: 2011-4-21 17:39
看了这帖,让我说啥好呢。。。
作者: yaoe    时间: 2011-4-21 17:39
伪xx
在lighttpd 1.5中有一个参数 proxy-core.max-pool-size.
这是为什么呢?为什么呢?为什么呢?
作者: qiqi13245    时间: 2011-4-21 17:41
原帖由 yaoe 于 2011-4-21 17:39 发表
伪xx
在lighttpd 1.5中有一个参数 proxy-core.max-pool-size.
这是为什么呢?为什么呢?为什么呢?

我只是一届小白,分享自己的经验而已
作者: qiqi13245    时间: 2011-4-21 17:41
原帖由 有个就好 于 2011-4-21 17:39 发表
看了这帖,让我说啥好呢。。。

说吧没事
作者: jiangchunlin    时间: 2011-4-21 17:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: qiqi13245    时间: 2011-4-21 17:46
原帖由 jiangchunlin 于 2011-4-21 17:45 发表
一直不推崇用lanmp   这apache就是一个http服务 php解析也得靠php来做,
加个apache等于你**带个套子  号称永远不she

调用方式,请移步CGI原理
作者: yaoe    时间: 2011-4-21 17:46
标题: 回复 7# 的帖子
你根本就怪错了对象.错不在php,而在nginx
nginx的fastcgi_pass用处理静态内容的方法来处理动态内容如php-cgi/php-fpm, php真能撑得住吗?这是个问题
作者: qiqi13245    时间: 2011-4-21 17:49
原帖由 yaoe 于 2011-4-21 17:46 发表
你根本就怪错了对象.错不在php,而在nginx
nginx的fastcgi_pass用处理静态内容的方法来处理动态内容如php-cgi/php-fpm, php真能撑得住吗?这是个问题

哦?Nginx不能调用php的模块
而除了模块方法,就只能用cgi模式了,而php的cgi效率是极低的
不是Php的错还是什么?Nginx只是做一个proxy

移步 cgi原理
作者: 李院长    时间: 2011-4-21 17:51
一样可以很稳定,关键看什么人用

hostloc就没怎么 502,有人就整天502
作者: 李院长    时间: 2011-4-21 17:52
php cgi 模式并不一定效率低
作者: qiqi13245    时间: 2011-4-21 17:52
原帖由 李院长 于 2011-4-21 17:51 发表
一样可以很稳定,关键看什么人用

hostloc就没怎么 502,有人就整天502

尤其是小偷 不过504也挺多的
作者: qiqi13245    时间: 2011-4-21 17:59
原帖由 李院长 于 2011-4-21 17:52 发表
php cgi 模式并不一定效率低

移步google
作者: 有个就好    时间: 2011-4-21 18:01
并发40~100,从来没有502过
作者: xspoco    时间: 2011-4-21 18:46
小白学习了
作者: dianso    时间: 2011-4-21 18:59
没法比,NGINX才几MB,apache十倍百倍大小
作者: yaoe    时间: 2011-4-21 19:01
标题: 回复 12# 的帖子
你不妨等更多真相帝出来和你挣,我都懒得说了.
在这论坛上回帖子,我经常都会想,我干嘛要教你.喜欢自以为是,那就去吧.
作者: Kokgog    时间: 2011-4-21 19:02
fastcgi不是cgi..............
作者: observer    时间: 2011-4-21 19:10
nginx异步处理的优势就在于低内存,高并发;弱点在于非确定性

请搜索“synchronized vs asynchronized”之类的关键字学习一下先

lz前面说的挺有道理,后面结论怎么就崩了呢
作者: observer    时间: 2011-4-21 19:17
原帖由 qiqi13245 于 2011-4-21 17:59 发表

移步google


我猜你想说的是apache2的mod_php是prefork模式,所以性能好?

如果是那样的话,你才是需要google的人,嗯。
作者: mslxd    时间: 2011-4-21 19:17
你们都废话太多了,,,就说:怎么解决吧
作者: observer    时间: 2011-4-21 19:21
原帖由 mslxd 于 2011-4-21 19:17 发表
你们都废话太多了,,,就说:怎么解决吧


1. 好好优化nginx的配置,这个对提高性能挺有讲究的,毕竟人家是异步的,例如超时设得长点酱紫。
2. 用性能更好的php-fpm
3. 开适量的php-cgi进程,参考 sqrt(日PV)/25,个人认为差不多这样
作者: qiqi13245    时间: 2011-4-21 19:35
原帖由 yaoe 于 2011-4-21 19:01 发表
你不妨等更多真相帝出来和你挣,我都懒得说了.
在这论坛上回帖子,我经常都会想,我干嘛要教你.喜欢自以为是,那就去吧.

哇,好牛B的大牛啊
作者: qiqi13245    时间: 2011-4-21 19:37
原帖由 observer 于 2011-4-21 19:21 发表


1. 好好优化nginx的配置,这个对提高性能挺有讲究的,毕竟人家是异步的,例如超时设得长点酱紫。
2. 用性能更好的php-fpm
3. 开适量的php-cgi进程,参考 sqrt(日PV)/25,个人认为差不多这样 ...

1.Nginx我感觉上只进行代理
2.不会优化这东西,都是直接编译成2进制
3.如果有动态管理就好了
作者: qiqi13245    时间: 2011-4-21 19:40
原帖由 observer 于 2011-4-21 19:17 发表


我猜你想说的是apache2的mod_php是prefork模式,所以性能好?

如果是那样的话,你才是需要google的人,嗯。

意思错了
作者: observer    时间: 2011-4-21 19:49
原帖由 qiqi13245 于 2011-4-21 19:37 发表

1.Nginx我感觉上只进行代理
2.不会优化这东西,都是直接编译成2进制
3.如果有动态管理就好了


1. 是这样,但是其实严格来说apache也是一样的,代理到它的mod_php模块;区别其实在于"代理"方式不同,你真的应该了解一下同步和异步的区别
2. 我也不太明白,不过反正从来就不编译,直接用apt-get安装
3. php-fpm有动态管理的
作者: 小新    时间: 2011-4-21 19:57
fastcgi不是cgi+1
作者: 我是小白    时间: 2011-4-21 20:32
神马都是一把双刃剑。
作者: qiqi13245    时间: 2011-4-21 21:02
原帖由 observer 于 2011-4-21 19:49 发表


1. 是这样,但是其实严格来说apache也是一样的,代理到它的mod_php模块;区别其实在于"代理"方式不同,你真的应该了解一下同步和异步的区别
2. 我也不太明白,不过反正从来就不编译,直接用apt-get安装
3. php-fpm有动态管理的 ...

1.就是这种方式的差异,导致的
2.额。。
3。貌似lnmp都用不上
作者: aru    时间: 2011-4-21 21:34
嗯,其实502大部分都是php执行时间过长
为什么会过长呢,请看下自己的程序慢在哪里吧
当然,一定数量的php-cgi进程也是必要的
要保证不要502
那么:
php-cgi 数目  >  请求执行时间 * 并发请求
作者: observer    时间: 2011-4-21 21:41
原帖由 qiqi13245 于 2011-4-21 21:02 发表

1.就是这种方式的差异,导致的
2.额。。
3。貌似lnmp都用不上


唉,你真的真的明白差异在哪里会导致什么吗?

同步并发其实就是多线程,apache其实一开始是这样的,有一个服务过来,就fork一个进程处理之,这种简单的处理协议被称为CGI;但是要知道fork进程是有成本的,操作系统的overhead以及内存分配等等。所以后来apache改进了一下机制,让这些进程本来就fork好了,进来一个req就直接dispatch到已经fork好的php解释器进程上,dispatch所使用的协议就是通常说的FastCGI。apache2的mod_php说穿了就是一个实现了FastCGI的模块,用FastCGI连接了http请求和php解释进程。

但是要知道FastCGI虽然比CGI要强很多,但是本质上还是阻塞式的,也就是说接受一个请求以后,会因为I/O而阻塞,这时候apache就知道,哦,我不能dispatch到某子线程了,因为那个子线程被阻塞了。说实话如果所有访问都是动态的,那么apache其实和nginx差得不多,差异只在于两者所用的连接器的好坏而已。

然而如果有大量静态的页面和动态页面混杂,并且静态页面比例远大于动态页面(这是非常普遍的情况)呢?如果有10个apache2进程,同时有10个人访问了某动态页面,这时候apache会很尴尬地发现全部阻塞了,连图片都返回不了了,那怎么办?于是apache只能等待某个进程处理完动态页面,重新可用时,然后再返回静态内容。这就是同步阻塞式web服务的劣势了。

有鉴于此,nginx才用了一种更加高并发的形式,异步非阻塞。也就是说,我把web请求逻辑和web服务逻辑分离开来。当一个请求到达时,我把它扔给处理逻辑,然后转身继续接受请求,而不再傻乎乎地阻塞,等待处理逻辑处理完毕;等处理逻辑处理完毕以后,直接返回请求逻辑再返回html。这样的好处是显而易见的,极大地提高了并发,尤其是静态页面的并发,但是也不是没有坏处:因为你不知道什么时候请求能完成,完全不可控,就会导致动态页面响应会有不确定性。

有些地方说得可能不太清楚,希望能对你有点启发吧。
作者: qiqi13245    时间: 2011-4-21 21:43
原帖由 observer 于 2011-4-21 21:41 发表


唉,你真的真的明白差异在哪里会导致什么吗?

同步并发其实就是多线程,apache其实一开始是这样的,有一个服务过来,就fork一个进程处理之,这种简单的处理协议被称为CGI;但是要知道fork进程是有成本的,操作系统的overhead以及 ...

跟我在wiki上看得差不多,不瞒你说我都是翻wiki的
作者: qiqi13245    时间: 2011-4-21 21:46
nginx配置中可以看出就是分开的,apache没分开,所以采用lanmp分开动静态,这就是apache的不足,502的原因就是反映问题,而nginx是根据后缀来判断,你可以放一个hello word的html改名成php,如果php存在并且列队已经满了, 就等待,等处理的时候发现时静态,直接过,而当php挂了,就会直接502.不给予处理
自己试验得出的结论

[ 本帖最后由 qiqi13245 于 2011-4-21 21:53 编辑 ]
作者: observer    时间: 2011-4-21 21:51
原帖由 qiqi13245 于 2011-4-21 21:43 发表

跟我在wiki上看得差不多,不瞒你说我都是翻wiki的


所以其实说apache比nginx更加高并发是不对的,即使比纯php请求,两者应该也在伯仲之间,处理能力不会有太大差别。

wiki还是不错的,不过显然没有直接看文档了解得透彻,apache的文档没怎么看过,不过nginx的文档我是狠狠犁了一遍,大致也就了解apache大概怎么做的了。
作者: qiqi13245    时间: 2011-4-21 21:53
原帖由 observer 于 2011-4-21 21:51 发表


所以其实说apache比nginx更加高并发是不对的,即使比纯php请求,两者应该也在伯仲之间,处理能力不会有太大差别。

wiki还是不错的,不过显然没有直接看文档了解得透彻,apache的文档没怎么看过,不过nginx的文档我是狠狠犁了 ...

但是实际情况复杂,一般来说apache动态会>nginx,nginx小并发的请求时间很短的
apache处理比较大并发时候得心应手
亲身体验

apache类似一种比较庞大的文件,虽然速度比较慢,但是稳定,尤其大并发下,速度不会怎么变(CC除外)
而nginx属于轻便型那种,小并发下很快,越大就会随着增长,而php-cgi我又不会配置动态进程,所以达到一定的时候列队会很长,就会导致502和504

亲身体验,欢迎纠正

[ 本帖最后由 qiqi13245 于 2011-4-21 21:56 编辑 ]
作者: observer    时间: 2011-4-21 21:56
原帖由 qiqi13245 于 2011-4-21 21:46 发表
nginx配置中可以看出就是分开的,apache没分开,所以采用lanmp分开动静态,这就是apache的不足,502的原因就是反映问题,而nginx是根据后缀来判断,你可以放一个hello word的html改名成html,如果php存在并且列队已经满了, 就等待,等 ...


所以nginx最好还是配合php-fpm这种可以动态管理php进程数的FastCGI解释器来得妥当。

即使没有空余的php进程,php-fpm也可以动态地fork一个出来。不信的话lz试试看php-fpm吧,把max-child设得大一点,就应该不会有任何问题了。
作者: qiqi13245    时间: 2011-4-21 21:57
apache类似一种比较庞大的文件,虽然速度比较慢,但是稳定,尤其大并发下,速度不会怎么变(CC除外)几乎是不变的,除非全僵尸了
而nginx属于轻便型那种,小并发下很快,越大就会随着增长,而php-cgi我又不会配置动态进程,所以达到一定的时候列队会很长,就会导致502和504(应该说是那种成比例)

亲身体验,欢迎纠正
作者: observer    时间: 2011-4-21 22:01
原帖由 qiqi13245 于 2011-4-21 21:53 发表

但是实际情况复杂,一般来说apache动态会>nginx,nginx小并发的请求时间很短的
apache处理比较大并发时候得心应手
亲身体验

apache类似一种比较庞大的文件,虽然速度比较慢,但是稳定,尤其大并发下,速度不会怎么变(CC除外)
而n ...


不试图说服你了,我觉得你的症结在于没有用一个好的FastCGI实现,也许你是直接裸用php-cgi的?
还是试试看php-fpm或者lighttpd的那个spawnfcgi吧
作者: 意气形    时间: 2011-4-21 22:48
看不懂。。能懂了再来看
作者: qiqi13245    时间: 2011-4-21 22:49
原帖由 observer 于 2011-4-21 22:01 发表


不试图说服你了,我觉得你的症结在于没有用一个好的FastCGI实现,也许你是直接裸用php-cgi的?
还是试试看php-fpm或者lighttpd的那个spawnfcgi吧

但是我体验的确如此,可能受硬件限制巴
晚点自己配置lnmp去
作者: laoma348    时间: 2011-4-21 22:50
502貌似跟内存也有关,我的一个VPS有段时间访问量大时经常出现502,加了几十M内存,立马好了
作者: mikj521    时间: 2011-4-21 22:55
标题: 回复 10# 的帖子
    球球 在QQ没 找你有事




欢迎光临 全球主机交流论坛 (https://lilynana.eu.org/) Powered by Discuz! X3.4