现在的位置: 首页nginx>正文
rss
nginx静态文件响应post请求,提示405错误问题
2013年04月13日 nginx 评论数 1 ⁄ 被围观 33,688 次+

apache、iis、nginx等绝大多数web服务器,都不允许静态文件响应post请求,否则会返回“http/1.1 405 method not allowed”错误。
例1:用linux下的curl命令发送post请求给apache服务器上的html静态页

  1. [root@localhost~]#curl-d11=1/index.html
  2. <!doctypehtmlpublic"-//ietf//dtdhtml2.0//en">
  3. <html>
  4. <head>
  5. <title>405methodnotallowed</title>
  6. </head>
  7. <body>
  8. <h1>methodnotallowed</h1>
  9. therequestedmethodpostisnotallowedfortheurl/index.html.<p>
  10. <hr>
  11. <address>apache/1.3.37serveratwww.xinqingchina.comport80</address>
  12. </body>
  13. </html>

例2:用linux下的curl命令发送post请求给nginx服务器上的html静态页

  1. [root@localhost~]#curl-d11=1/index.htm
  2. <html>
  3. <head><title>405notallowed</title></head>
  4. <bodybgcolor="white">
  5. <center><h1>405notallowed</h1></center>
  6. <hr><center>nginx/1.2.0</center>
  7. </body>
  8. </html>

但在有些应用中,需要使静态文件能够响应post请求。
对于nginx,可以修改nginc.conf配置文件,改变“405错误”为“200 ok”,并配置location来解决,方法如下:

  1. server
  2. {
  3. listen80;
  4. server_namewww.xinqingchina.com;
  5. indexindex.htmlindex.htmindex.php;
  6. root/opt/htdocs;
  7. if(-d$request_filename)
  8. {
  9. rewrite^/(.*)([^/])$http://$host/$1$2/permanent;
  10. }
  11. error_page405=200@405;
  12. location@405
  13. {
  14. root/opt/htdocs;
  15. }
  16. location~.*\.php?$
  17. {
  18. includeconf/fcgi.conf;
  19. fastcgi_pass127.0.0.1:10080;
  20. fastcgi_indexindex.php;
  21. }
  22. }

当然也可以修改nginx源代码来解决
修改源代码,重新编译安装nginx
编辑nginx源代码

  1. [root@localhost~]#vimsrc/http/modules/ngx_http_static_module.c

修改: 找到下面一段注释掉

  1. /*
  2. if(r->method&ngx_http_post)
  3. {
  4. returnngx_http_not_allowed;
  5. }
  6. */

然后按照原来的编译参数,重新编译安装nginx,即可

本文地址:/38/1237.html
如非注明则为本站原创文章,欢迎转载。转载请注明转载自:moon's blog
 

目前有 1 条留言 其中:访客:1 条, 博主:0 条

  1. 少林功夫好 : 2015年04月03日20:19:55  1楼

    感谢分享。 :razz: