来一发Nginx的405毛病办理
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!会见办事使器URL用IE扫瞄器能够下载,可是用客户端测试就没举措,提醒收集毛病,在客户端何处,失掉的了局就是405毛病,这个是nginx前往的。因而,在我的电脑上拿扫瞄器,输出制订的url,那客户端摹拟器都能够翻开,因而检察了日记,发明了个中的分歧。扫瞄器是用发送的GET哀求,而客户端是发送的POST哀求。日记以下:
***.***.***.***-C“POST/******x.***xHTTP/1.1″“405″173“-”“curl/7.12.1(i686-redhat-linux-gnu)libcurl/7.12.1OpenSSL/0.9.7azlib/1.2.1.2libidn/0.5.6″“-”
个中后面的***是哀求源的ip,前面的POST那的是会见的文件。
因而上彀搜刮,相似的成绩,发明了个中的缘故原由,上面是张宴先生的博客里对这个成绩的处置***,上面有
URL:http://blog.s135.com/read.php?337
关于这类情形的注释是,因为会见静态文件的时分只能利用GET体例,不克不及利用POST,因而呢,在nginx的前往信息中,在0.6.33版今后就增添了这么一个405毛病形态码,意义就是,你不克不及用POST体例来哀求静态文件,错了,要换一般的***。
详细的changelog是在nginx的官方站点上看到的,内容以下:
URL:http://www.nginx.net/CHANGES-0.6
Changeswithnginx0.6.3320Nov2008
*)Feature:nownginxreturnsthe405statuscodeforPOSTmethod
requestingastaticfileonlyifthefileexists.
可是我们但愿POST体例能够被撑持,因而张先生的设置内里,就重定向了405前往为200,就是假如碰到405,就当做200处置。
详细设置,关头局部以下:
error_page405=200@405;
location@405
{
root/opt/htdocs;
}
重定向了405->200了,而且给405这个毛病指定了doc_root,就是一般的doc_root的设置。
因而,依照下面的设置今后,发明并没有失效,仍是前往405,事先就钻牛角尖了,以为是nginx的成绩,因而换了低版本的0.6.35的版本,仍是不可,随机上彀搜到两种***。
1,用post_to_static这个patch,可是苦于我其实不晓得怎样打这个patch,最初我溃散了。。不然的话,从头编译一个nginx就撑持post_to_static这个设置项,就能够选择on/off来开关,完成同意POST哀求会见静态页面。
能够参考的url以下:
http://www.ruby-forum.com/topic/142663有个附件是c写的patch
http://bbs3.chinaunix.net/viewthread.php?tid=1351579这个写的和张先生一样,可是帮我注释了为何后面要有rewrite的成绩。
2,第二种,用proxy_pass来利用代办署理会见,可是我重定向到了127.0.0.1:port/今后,也没好使,还呈现了502的毛病。
url以下:http://millarian.com/2008/9/5/nginx-405-not-allowed-error看上往不错,可是也没用,要设置proxy_pass必需在localtion内里,貌似。
3,第三种是一个很好的思索偏向,可是没有能起感化,也许必要持续修正一下。
#location~(.***1$|.***2$){
#root/home/***xx/htdocs;
#indexindex.htmlindex.htm;
#if($request_method!=GET){
#set$request_methodGET;
#}
#fastcgi_paramREQUEST_METHODGET;
#}
这里就是想,假如会见和我们划定规矩婚配的文件时分,假如会见的哀求不是GET,那末我们就给$requset_method的变量赋值为GET,可是这里没有效到fcgi大概上面拿句就不克不及失效,而且假如同时呈现两个$requset_method的话,设置文件检测的时分,会提醒语法毛病,变量反复,这里我以为这里假如url哀求过去了,这里的这个变量大概就没法改动了,再从头赋值也不克不及了,可是rul为何能改写呢,这个是一个疑问。
以上的***都没有办理成绩,最初让瀚哥给乱实验出来了,,这里小看一下他。。没次都能如许乱实验出来,看来我们偶然候得不要被礼貌限定,大概是被现有手头的乐成案例束厄局促。
详细设置以下:
location^~/***x.***1{
root/home/******/htdocs;
error_page405=200/***x.***1;
}
location^~/***x.***2{
root/home/******2/htdocs;
error_page405=200/***x.***2;
}
为何error_page在外部失效而不是在server谁人局部失效,,就不得而知了。
并且这里的设置不具有天真性,不外也的确是由于有两个文件,独自设置,间接指定了往那里下载,连重定向今后的root都间接成了文件。
================
自己的乐成设置案比方下:location/
{
root/www/client/domain;
indexindex.shtmlindex.html;
error_page405=200/index.shtml;
}
或
location~*/*.shtml$
{
root/www/client/$domain;
indexindex.shtmlindex.html;
error_page405=200http://$domain$request_uri;
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!
来一发Nginx的405毛病办理
确实不错,顶先 通过一条缓慢的调制解调器线路,它也能操纵几千公里以外的远程系统。 我学习Linux的心得体会 ,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。 为什么要学Linux呢?每个人都有不同的看法,下面我说说自己的感想吧。? 甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。 Linux?最大的优点在于其作为服务器的强大功能,同时支持多种应用程序及开发工具,所以Linux操作系统有着广泛的应用空间。 老实说,第一个程序是在C中编译好的,调试好了才在Linux下运行,感觉用vi比较麻烦,因为有错了不能调试,只是提示错误。 通过一条缓慢的调制解调器线路,它也能操纵几千公里以外的远程系统。
页:
[1]