+ -
当前位置:首页 → 问答吧 → Nginx 0.8.0发布,不过很遗憾

Nginx 0.8.0发布,不过很遗憾

时间:2009-06-05

来源:互联网

官方网站:http://nginx.net/

changes:http://nginx.net/CHANGES

还是不支持POST静态页面

不过修复了一个内存地址分配的错误,不知道会不会给稳定性带来提升。

作者: peacock   发布时间: 2009-06-05

看那看

作者: cnkiller   发布时间: 2009-06-05

看那看
cnkiller 发表于 2009-6-5 16:43
网址我贴了,你想看什么?看支不支持POST一个静态页面?

你用ajax POST一个js就知道了

作者: peacock   发布时间: 2009-06-05

谢谢,我还是在用IIS,没上这个

作者: cnkiller   发布时间: 2009-06-08

什么时候开的ngnix板块的,
刚发现;

作者: 木頭   发布时间: 2009-06-08

木頭

老土了吧

作者: cnkiller   发布时间: 2009-06-08

请问,,post静态文件有什么作用吗?

作者: willko   发布时间: 2009-06-08

请问,,post静态文件有什么作用吗?
willko 发表于 2009-6-8 23:31
Ajax中用得很多,比如回调返回一个JS文件,动态生成JS函数

作者: peacock   发布时间: 2009-06-09

一直失望的等候,0.8.1还是不支持POST静态文件

作者: peacock   发布时间: 2009-06-09

继续失望,0.8.4还是不支持

作者: peacock   发布时间: 2009-07-10

Ajax中用得很多,比如回调返回一个JS文件,动态生成JS函数
peacock 发表于 2009-6-9 09:32
为啥不能用get尼?

作者: ytcheng   发布时间: 2009-07-20

为啥不能用get尼?
ytcheng 发表于 2009-7-20 09:57
GET方法容易丢失信息,POST就不会

PS:现在已经0.8.5了,还是不支持

作者: peacock   发布时间: 2009-07-20

本帖最后由 ronin 于 2009-8-3 10:56 编辑

在编译之前修改下源码就可以实现这种功能,以前看过这文章,但一下子没有记录下来,google下
看下这文章
http://blog.s135.com/post/337/
http://qianyang1985cn.blog.163.com/blog/static/6924056720091194549314/

作者: ronin   发布时间: 2009-08-03

ronin
第一个设置方法很多人都测试过了,行不通,从0.7开始,每个版本我都重新测试,都行不通。


在0.6的时候就有这个补丁了,不过很遗憾,到了现在的0.8.7都没有把这个补丁/功能加进去。
这个补丁在linux上好做,但是在windows上,我还真不知道怎么编译。

作者: peacock   发布时间: 2009-08-03

有个办法是是在编译nginx之前修改nginx的源码来实现这个功能,windows是想都不用去想,要尽快将平台转换到linux下来
作者已经说明不会支持这个功能,所以最好的办法就是自己修改源码或者用补丁

作者: ronin   发布时间: 2009-08-04

linux,我是不会用的。
第一,我不做公网服务器
第二,我的客户没有人使用linux

所以,解决这个问题,看来只有我自己了。

不过很纳闷,为什么nginx不把这个功能加上,除了nginx,所有web服务器都支持POST静态页面,这是一个很常见的功能。

作者: peacock   发布时间: 2009-08-04

在windows下使用还不如用iis

作者: ronin   发布时间: 2009-08-04

在windows下使用还不如用iis
ronin 发表于 2009-8-4 14:50
如果是windows 2008或者2008 R2,当然首选iis,因为对fast-cgi支持非常好,性能也很高。
但是2003的iis6不是太理想,支持fast-cgi也不好。

而用户的主流服务器基本上都是2003

作者: peacock   发布时间: 2009-08-04

期待。。。

作者: lions   发布时间: 2009-08-05

如果是windows 2008或者2008 R2,当然首选iis,因为对fast-cgi支持非常好,性能也很高。
但是2003的iis6不是太理想,支持fast-cgi也不好。

而用户的主流服务器基本上都是2003
peacock 发表于 2009-8-4 16:51
windows上跑nginx更不行。

作者: subs   发布时间: 2009-08-11

windows上跑nginx更不行。
subs 发表于 2009-8-11 01:33
实际上还可以,nginx for windows刚发布没多久,也就2、3个月的时候,以前的确很不稳定,最近每天开10多个小时,几乎很少挂了,说明nginx慢慢的开始稳定起来。

作者: peacock   发布时间: 2009-08-11

ngnix 0.8.8 发布了!
http://www.cnbeta.com/articles/90678.htm

作者: 木頭   发布时间: 2009-08-11

ngnix 0.8.8 发布了!
http://www.cnbeta.com/articles/90678.htm
木頭 发表于 2009-8-11 11:18
仅仅只是修改了2个bug
从,0.7.x开始,我每天都要刷nginx.net几十次,直到nginx支持POST静态文件为止

作者: peacock   发布时间: 2009-08-11

实际上还可以,nginx for windows刚发布没多久,也就2、3个月的时候,以前的确很不稳定,最近每天开10多个小时,几乎很少挂了,说明nginx慢慢的开始稳定起来。
peacock 发表于 2009-8-11 10:54
兄弟应该测试一下负载,不是说不稳定,新版本的确是比原来的好很多,也稳定很多,但是系统的负载却很低下,和linux下的不能比,这都算了,连windows下的iis负载都在nginx之上,你可以跑跑看,希望以后能做好,

作者: subs   发布时间: 2009-08-12

兄弟应该测试一下负载,不是说不稳定,新版本的确是比原来的好很多,也稳定很多,但是系统的负载却很低下,和linux下的不能比,这都算了,连windows下的iis负载都在nginx之上,你可以跑跑看,希望以后能做好,
subs 发表于 2009-8-12 01:33
这个我知道,详见18楼

之所以想选择Nginx,有几个原因:
1、我只能用Windows,因为客户有Linux服务器的可能性极小
2、我不指望客户的服务器用2008或者更高版,所以也不指望用IIS,事实上,我还从未见过,见过的基本上都是2003,甚至有2000的
3、除了IIS,其它的Web服务器在Linux上都要比Windows上好得多
4、Nginx的速度要比Apache快得多,而LightTPD还没有真正意义的Windows版本,只是第三方通过Cywin模拟的

综上几点,我只能在Apache和Nginx上做一个选择,Apache已经发展很多年,已经很成熟,很稳定,也是我一直使用的Web服务器,但Apache在Windows上无法正常稳定的使用Fast-CGI,就目前来说,Windows上能高效、正常、稳定的使用Fast-CGI的,只有IIS 7及以上版本,也就是Windows 2008和2008 R2。

所以我想尝试使用Nginx,事实上,我已经在开发环境中使用了2个月,而且还是在非服务器版本的操作系统上,每天都测试10多个小时,期初Nginx刚出Windows版的时候,的确很不稳定,很容易就挂掉,但之后每个版本的升级,发现Nginx开始变得稳定起来,如果经常关注Nginx官方网站(比如我),会发现Nginx更新非常频繁,几乎一个星期更新一两次。

经过2个月左右的测试,虽然至今都不支持POST静态页面,但我还是决定在下一个项目中,尝试使用Nginx,如果有POST静态页面,我将采用Apache来作为代理。

作者: peacock   发布时间: 2009-08-12

打开 changeslog 可以看到作者在2008.08.13 的 0.7.11 版本更新中的声明.
对一个存在的静态文件请求POST方法将返回405.

你可以修改错误405为200 OK, 将虚拟静态地址(非真实文件)代理到一个其他动态脚本上.
如果想直接对静态文件进行POST方法请求, 可以对发行版本中的源码进行修改后重新编译.

编辑源码中的HTTP模块中的静态模块(http\modules\ngx_http_static_module.c)[code]    if (r->method & NGX_HTTP_POST) {
        return NGX_HTTP_NOT_ALLOWED;
    }[/code]将该段代码注释, 即可对静态文件直接进行POST方法请求.

作者: d9tx   发布时间: 2009-08-16

d9tx
网上所写的3种解决办法,我都了解过了
1、设置error_page   405 =200 @405;
    这个方法只有极少数人测试成功
2、打补丁,只适用于*nix
3、修改源代码,也就是你说的这个方法,在*nix上很容易编译,但是在Windows上,我还不知道怎么才能编译

很让人不解的是,既然官方知道这是个“问题”,而且有了补丁,也有人找到了“问题”所在(源代码),为什么就不直接把这个“问题”解决了,事实上,官方早在0.6.x的时候,就知道这个“问题”了,而直到现在的0.8.8,都不愿意加入这个功能!

作者: peacock   发布时间: 2009-08-16

请注意changeslog.
打开 changeslog 可以看到作者在2008.08.13 的 0.7.11 版本更新中的声明.
对一个存在的静态文件请求POST方法将返回405
作者在这里明确指出了NGINX 0.7.11之后版本
将对真实存在的静态文件的POST方法请求一律返回 405, 既是不同意使用该方法.
因为是开源程序, 你对官方发行版本不满意可以自行修改代码.

BTW: 就像PHP不想让count函数计算字符长度一样, 你不满意可以自行修改源码.
就我个人来说严谨第一, 灵活第二.
我比较支持NGINX和PHP这种模式.

作者: d9tx   发布时间: 2009-08-16

不解的不是因为开源,而是因为所有Web服务器都支持POST静态文件,唯独Nginx不支持,不知道Nginx所担忧的隐患是什么?
或者反过来可以这样说,为什么别人能做的,Nginx就不敢做呢!

作者: peacock   发布时间: 2009-08-16

不解的不是因为开源,而是因为所有语言都支持count,唯独php不支持,不知道php所担忧的隐患是什么?
或者反过来可以这样说,为什么别人能做的,php就不敢做呢!

让我分析, 答案应该是因为你不是作者.
你可以自己创立一个pginx和coc的分支发行版本.
然后写一篇
[推荐]Pginx 0.0.x + COC 0.0.X(peacock)搭建胜过Nginx十倍的Web服务器(第1版)
也许会有许多FANS...

作者: d9tx   发布时间: 2009-08-16

这个回复就没啥意义了,属于完全的抬杠!

如果我提出的这个建议属于过分的要求,那我觉得Nginx没必要开源了。

可以肯定的是,除php之外,count函数并不是所有语言都能计算字符串的长度!!!

还可以肯定的是,除Nginx之外,你肯定找不到一个不支持POST静态页面的Web服务器!!!

作者: peacock   发布时间: 2009-08-16

另外要强调的是,我并不是要求nginx按照我的意愿更改程序,我的问题是:为什么不更改。
我想知道的是为什么,而不是为什么不听取我的建议。

作者: peacock   发布时间: 2009-08-16

这个所有语言和所有WEB SERVER已经不在我技术范围内了 >_<
不过你既然强烈要求了, 我这次开发的时候一定同意这种请求模式.

作者: d9tx   发布时间: 2009-08-16

在bbs上我见到有人讨论说,nginx不支持post静态文件。
对于,nginx来说如果没设置fastcgi_pass都是静态文件,而不是通过后缀来判断的。而对于不具备处理能力的静态文件,post是没有意义的。又因为nginx支持文件方式传递post数据,而文件的清除可能是由后端程序来处理。允许post静态文件,很容易产生大量垃圾文件。我想,这就是为什么nginx不支持post静态文件的原因了。一是会有问题,二实在是没意义。

php-fpm以及nginx的安装网上比较多,就不重复了,主要是配置nginx方面,nginx 0.5.9以上都支持这个功能。

只需三个参数就可以实现了。
client_body_in_file_only clean;
client_body_temp_path /dev/shm 1 2;
fastcgi_param  REQUEST_BODY_FILE  $request_body_file;

存放的路径可以使用内存文件系统,例如tmpfs、ramdisk之类的。更正确的来说是优化http报文性能,因为http里能发送报文的不只是post方法,只是觉得大家更熟悉post而已。

作者: ronin   发布时间: 2009-11-16