https://www.linuxidc.com/Linux/2012-07/66760.htm

Nginx的405错误解决办法

[日期:2012-07-30] 来源:Linux社区  作者:cnsanshao [字体:大 中 小]
访问服务使器URL用IE浏览器可以下载,但是用客户端测试就没办法,提示网络错误,在客户端那边,得到的结果就是405错误,这个是nginx返回的。于是,在我的电脑上拿浏览器,输入制定的url,那客户端模拟器都可以打开,于是查看了日志,发现了其中的不同。浏览器是用发送的GET请求,而客户端是发送的POST请求。

日志如下:

xxx.xxx.xxx.xxx- – [xx/xxx/2xxx:14:00:00 +0800] “POST /xxxxxxx.xxxx HTTP/1.1″ “405″ 173 “-” “curl/7.12.1 (i686-RedHat-linux-gnu) libcurl/7.12.1 OpenSSL/0.9.7a zlib/1.2.1.2 libidn/0.5.6″ “-”

其中前面的xxx是请求源的ip,后面的POST 那的是访问的文件。

于是上网搜索,类似的问题,发现了其中的原因,下面是张宴老师的博客里对这个问题的处理方法,下面有

URL:http://www.linuxidc.com/Linux/2012-07/66761.htm

对于这种情况的解释是,由于访问静态文件的时候只能使用GET方式,不能使用POST,因此呢,在nginx的返回信息中,在0.6.33版以后就增加了这么一个405错误状态码,意思就是,你不能用POST方式来请求静态文件,错了,要换个别的方法。

具体的change log是在nginx的官方站点上看到的,内容如下:

URL:http://www.nginx.net/CHANGES-0.6

Changes with nginx 0.6.33 20 Nov 2008

*) Feature: now nginx returns the 405 status code for POST method
requesting a static file only if the file exists.

但是我们希望POST方式可以被支持,于是张老师的配置里面,就重定向了405返回为200,就是如果遇到405,就当成200处理。

具体配置,关键部分如下:

error_page 405 =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.linuxidc.com/Linux/2012-07/66762.htm 这个写的和张老师一样,但是帮我解释了为什么前面要有rewrite的问题。

2,第二种,用proxy_pass来使用代理访问,但是我重定向到了127.0.0.1:port/以后,也没好使,还出现了502的错误。

url如下:http://www.linuxidc.com/Linux/2012-07/66763.htm 看上去不错,但是也没用,要配置proxy_pass必须在localtion里面,貌似。

3,第三种是一个很好的思考方向,但是没有能起作用,大概需要继续修改一下。

# location ~ (.xxx1$|.xxx2$) {
# root /home/xxxxx/htdocs;
# index index.html index.htm;

#if ($request_method != GET) {
# set $request_method GET;
#}
# fastcgi_param REQUEST_METHOD GET;
# }

这里就是想,如果访问和我们规则匹配的文件时候,如果访问的请求不是GET,那么我们就给$requset_method的变量赋值为GET,但是这里没有用到fcgi可能下面拿句就不能生效,并且如果同时出现两个$requset_method的话,配置文件检测的时候,会提示语法错误,变量重复,这里我觉得这里如果url请求过来了,这里的这个变量可能就无法改变了,再重新赋值也不能了,但是rul为什么能改写呢,这个是一个疑问。

以上的方法都没有解决问题,最后让瀚哥给乱试验出来了,,这里鄙视一下他。。没次都能这样乱试验出来,看来我们有时候得不要被规矩限制,或者是被现有手头的成功案例束缚。

具体配置如下:

location ^~ /xxxx.xxx1 {
root /home/xxxxxx/htdocs;
error_page 405 =200 /xxxx.xxx1;
}

location ^~ /xxxx.xxx2 {
root /home/xxxxxx2/htdocs;
error_page 405 =200 /xxxx.xxx2;
}

为什么error_page在内部生效而不是在server那个部分生效,,就不得而知了。

而且这里的配置不具有灵活性,不过也确实是因为有两个文件,单独配置,直接指定了去哪里下载,连重定向以后的root都直接成了文件。

================
本人的成功配置案例如下:

   location /
   {
     root  /www/client/domain;
      index index.shtml index.html;
      error_page 405 =200 /index.shtml;
   }

   location ~* /*\.shtml$
   {
      root  /www/client/$domain;
      index index.shtml index.html;
      error_page 405 =200 http://$domain$request_uri;
   }

Nginx反向代理,返回405错误的解决办法相关推荐

  1. http 请求 405 错误,解决办法

    http 请求 405 错误,解决办法.

  2. nginx 反向代理报400错误

    问题描述: 为后端接口配置了nginx反向代理后,请求后端接口时报400错误. 度娘了下说是后端服务器做了安全处理,可能对http请求头中的host字段进行了判断,如果缺乏host字段或host值不正 ...

  3. 为nginx反向代理设置自定义错误页面

    注意要注意的是,这个场景是指,服务都下线了,只剩前台的起反向代理的nginx在运行.那么返回的是502 bad way状态码. 在server模块中配置, proxy_intercept_errors ...

  4. uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案

    问题描述 小程序中不会自动保存和发送Cookie 使用插件(https://uniapp.dcloud.io/api/request/request)方法不能解决302重定向情况下获取Cookie 小 ...

  5. 使用Nginx反向代理豆瓣Api电影接口(解决微信小程序频繁调用api被关小黑屋)

    首先你要知道什么是Nginx服务器,这个问题百度明白之后继续查看此文章 (要学会自己动手自己独立思考哦) 直接贴代码 ①小程序调用api需要要是https模式才行,https申请请去自己买的云服务器端 ...

  6. nginx 反向代理 502 错误的解决

    Nginx反向代理----502报错 问题描述:通过nginx反向代理地址之后报错502,后台日志报错信息为(upstream sent too big header while reading re ...

  7. Nginx 反向代理解决跨域问题

    目录 前言 Nginx 反向代理常用配置 Server location proxy_pass add_header OPTIONS 请求 proxy_set_header 跨域的 cookie 传输 ...

  8. 微服务架构(5):nginx反向代理cors解决跨域

    微服务架构(5):nginx反向代理&&cors解决跨域 学习目标 1.使用域名访问本地项目 1.1.统一环境 1.2.域名解析 1.3.解决域名解析问题 1.4.nginx解决端口问 ...

  9. nginx 反向代理 常见错误处理

    由内外网分离,只有某台服务的某几个端口是外网可以访问,若需要从外网访问我内网的搭建的服务,此时我们需要借助nginx反向代理功能,nginx作为反向代理服务,通过外网指定端口透射到内网,并代理内网的服 ...

最新文章

  1. (转)有了jQuery.Jcrop,选取美女的哪个部位你说了算
  2. 用python处理excel-使用Python操作Excel文档(一)
  3. c语言怎么判定结构体有无数据,C语言中什么是结构体,怎么定义结构体。
  4. centos 删除crontab_centos下crontab的使用
  5. 解决 : Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
  6. Skywalking-12:Skywalking SPI机制
  7. 【报告分享】2020年抖音kol生态研究报告.pdf(附下载链接)
  8. centos 修改root密码_Ubuntu、Redhat、Kali、CentOS重置root密码方法汇总
  9. 【高通量测序】.dna文件批量读取CAG重复序列长度
  10. 基于百度paddle的快递面单三段码识别
  11. Ubuntu16.04 Modelsim 10.2c安装
  12. Thinking in Java 中闪耀的星星(四)
  13. Tommy Hilfiger 宣布,F1世界冠军Lewis Hamilton担任TOMMY HILFIGER全球男装代言人
  14. Python:快速去除PDF水印
  15. vue 悬停显示另一个div_CSS或者JS实现鼠标悬停显示另一元素
  16. 微软PPM 软件 android,微软Surface Duo带来改进后的手写笔支持 Android系统也可顺滑无迟滞...
  17. 【RDMA】RDMA网卡通讯
  18. 关于STM32的BSRR(端口位设置/清除寄存器) 和 BRR(端口位清除寄存器) 的理解(初学32)
  19. 【Py】使用graphviz可视化对象引用关系
  20. 估计的商是什么意思_《商》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...

热门文章

  1. Win10系统无法识别USB设备的处理方法
  2. loj 3090 「BJOI2019」勘破神机 - 数学
  3. 【干货分享】使用Inno Setup设计扁平化风格的安装包
  4. 囧人又做了哪些囧事呢?
  5. 花青素荧光染料2247688-56-6,Cyanine3 amine,Cy3-NH2,花青素Cyanine3氨基,可以用来标记蛋,抗体,多肽等
  6. spring事务管理tx:Advice详解
  7. 微信小程序开发——设置默认图片、错误加载图片
  8. oracle试算平衡表查询,介绍一下余额试算平衡表的计算方法
  9. 请问如何查询一个APP的Android和iOS下载量?
  10. 保研之路——上科大信息学院直硕夏令营