Nginx 405 method not alllowed
2017-08-31 16:34
537 查看
当我用nginx 作为文件服务器提供下载服务的时候,正常情况下都可以去下载访问。
之前的方式是用nginx作为前端web服务,然后proxy_pass 代理到后端的apache上面。下载访问量增大的话 会增加内网之间的传输,同时云机内网之间有带宽限制,必然会导致一些访问失败。因此尝试直接把文件放在nginx服务下,使用浏览器访问一切都正常ok
第二天业务的部分量下降严重,排查其中一个业务下载全部失败。问过开发后,发现全部是post请求下载。尝试模拟post请求下载 报错
报错405请求方式不被允许,查完资料发现nginx 默认不支持post请求静态文件。同时浏览器默认所有请求都是get方式。现在问题很明确了需要去解决nginx post方式请求静态文件
解决方案一、
既然之前支持post请求 我可以根据request_method 将所有post请求转发至后端apache (这里的post请求量不是很大,影响不是很大)。
经测试有效,同时可以顺便分离开相应的日志文件,方便统计。
解决方案二、
proxy_pass 转发静态文件接收的POST请求到GET方式
经测试有效,这样依赖 也支持cdn下载
方案三、
我查到资料是修改源码
nginx源码目录/src/http/modules/ngx_http_static_module.c
重新编译configure、make 不要make install
make 结束后在/ objs 目录下的 nginx至安装的Nginx目录下,重启Nginx生效
记得备份之前的 /sbin/下的nginx
……………….
经测试成功
以上三种方式,应该还有其他方案 。条条大路通罗马
之前的方式是用nginx作为前端web服务,然后proxy_pass 代理到后端的apache上面。下载访问量增大的话 会增加内网之间的传输,同时云机内网之间有带宽限制,必然会导致一些访问失败。因此尝试直接把文件放在nginx服务下,使用浏览器访问一切都正常ok
第二天业务的部分量下降严重,排查其中一个业务下载全部失败。问过开发后,发现全部是post请求下载。尝试模拟post请求下载 报错
<html> <head><title>405 Not Allowed</title></head> <body bgcolor="white"> <center><h1>405 Not Allowed</h1></center> <hr><center>nginx/1.0.11</center> </body> </html>
报错405请求方式不被允许,查完资料发现nginx 默认不支持post请求静态文件。同时浏览器默认所有请求都是get方式。现在问题很明确了需要去解决nginx post方式请求静态文件
解决方案一、
既然之前支持post请求 我可以根据request_method 将所有post请求转发至后端apache (这里的post请求量不是很大,影响不是很大)。
upstream fee { server 192。168.1.32:80 weight=1 max_fails=3 fail_timeout=10s; } ---------- location /statics/ { access_log logs/down_log re; if ($request_method = POST){ access_log logs/post re; proxy_pass http://fee; } root /source_package/static_file; 4000 autoindex on; autoindex_exact_size off; autoindex_localtime on; }
经测试有效,同时可以顺便分离开相应的日志文件,方便统计。
解决方案二、
proxy_pass 转发静态文件接收的POST请求到GET方式
upstream post { server localhost:89; } ............................. error_page 405 =200 @405; location @405 { root /data/www/test/; proxy_method GET; proxy_pass http://post; } ......................... server { listen 89; server_name _; root /data/www/test/; }
经测试有效,这样依赖 也支持cdn下载
方案三、
我查到资料是修改源码
nginx源码目录/src/http/modules/ngx_http_static_module.c
if (r->method & NGX_HTTP_POST) { return NGX_HTTP_NOT_ALLOWED; } 注释掉如下: /*if (r->method & NGX_HTTP_POST) { return NGX_HTTP_NOT_ALLOWED; } */
重新编译configure、make 不要make install
make 结束后在/ objs 目录下的 nginx至安装的Nginx目录下,重启Nginx生效
记得备份之前的 /sbin/下的nginx
……………….
经测试成功
以上三种方式,应该还有其他方案 。条条大路通罗马
相关文章推荐
- Apache、IIS、Nginx等绝大多数web服务器,都不允许静态文件响应POST请求,否则会返回“HTTP/1.1 405 Method not allowed”错误。
- Nginx HTTP Post Method: 405 Method not allowed 解决办法
- nginx中HTTP/1.1 405 Method not allowed 的解决方法
- WebApi HTTP Put 405 Method not allowed
- webapi 405 method not allowed
- (转)SVN-服务器发送了意外的返回值(405 Method Not Allowed)
- 前端到后端------HTTP Status 405 ( The specified HTTP method is not allowed for the requested resource )
- 解决“HTTP/1.1 405 Method not allowed”问题
- HTTP 405 method GET/POST is not supported
- svn:E175002:Unexpected HTTP status 405'Method Not Allowed
- WebApi HTTP Put 405 Method not allowed
- 405 Method Not Allowed
- IIS 部署ASP.Net, WebAPI, Restful API, PUT/DELETE 报405错解决办法, webapi method not allowed 405
- 解决IIS7 HTTP/405 Method Not Allowed 问题的方法.
- What does Subversion "405 Method Not Allowed" mean?
- jQuery ajax 请求HttpServlet返回[HTTP/1.1 405 Method not allowed]
- 访问arcgisserver报:HTTP Status 405 - HTTP method GET is not supported by this URL
- Spring mvc 405 Request method 'POST' not support
- jersey中的405错误 method not allowed
- delete method not allowed 405错误