Nginx静态资源POST请求返回405状态

简介: http://my.oschina.net/lemonzone2010/blog/174505 同事给了一个json请求,在HTTP接口测试工具中post请求结果返回405状态,get请求则返回数据。

http://my.oschina.net/lemonzone2010/blog/174505
同事给了一个json请求,在HTTP接口测试工具中post请求结果返回405状态,get请求则返回数据。搜了一番发现返回405是因为Apache、IIS、Nginx等绝大多数web服务器,都不允许静态文件响应POST请求。
试了网上的好几种方法,下面这个受用,通过upstream转换静态文件接收的POST请求到GET方式

    upstream static_resource { 
              server localhost:80; 
        }
    server {
        listen       80;
        server_name app.test.com;
        root   /home/app.test.com/; 
        location / {
            root   /home/app.test.com/;
            index  index.shtml index.html;
        }

        error_page 405 =200 @405; 
        location @405 
        { 
            root /home/app.test.com/;
            proxy_method GET; 
            proxy_pass http://static_resource;  
        }   

再次在HTTP接口测试工具测试,发现405变成了404,想了一下,是因为web服务器上配置了多个虚拟主机监听在80端口,upstream默认访问的是一个配置文件中的第一个虚拟主机,而不是我要放行post请求的app.test.com,于是尝试在定义一个虚拟主机监听在81端口,指向app.test.com

server {
        listen       81;
        server_name app.test.com;
        root   /home/app.test.com/;

        location / {
            root   /home/app.test.com/;
                 }
    }

同时修改upstream中server,再次请求返回状态由405变成200

 upstream static_resource { 
              server localhost:81; 
        }

下面备注下网传的方法,此方法我配置后无效

   error_page   405 =200 @405;
   location @405
   {
       root  /home/app.test.com;
   }    

此方法配置后返回状态由405变成302

  location / {
            root   /home/phone_app/;
            error_page 405 =200 http://$host$request_uri;
            index  index.shtml index.html;
        }

此方法未尝试
修改nginx源码目录下src/http/modules/ngx_http_static_module.c,将以下代码注释,按照原来的编译参数,重新编译安装nginx

/*   
 if (r->method & NGX_HTTP_POST) {
        return NGX_HTTP_NOT_ALLOWED;
       }
*/

或者按照原来的编译参数 ./configuer make 不执行make install

cp  $nginx_dir/sbin/nginx  $nginx_dir/sbin/nginx.bak
cp ./objs/nginx   $nginx_dir/sbin/nginx
$nginx_dir/sbin/nginx -s reload
目录
相关文章
|
3月前
|
缓存 应用服务中间件 nginx
成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存
这篇文章讨论了在使用Nginx进行动静分离时遇到的静态资源更新不及时的问题。问题描述了在服务器上更新静态资源后,访问页面时页面没有显示更新的情况。文章提供了解决这个问题的方法,即清除浏览器缓存,并提供了相关参考文章链接。此外,还展示了问题复现的步骤和正常情况的预期结果。
成功解决 Nginx更新静态资源无效 ,Nginx静态资源更新不及时,Nginx清除缓存
|
1月前
|
负载均衡 算法 应用服务中间件
Nginx入门 -- 理解 Nginx 的请求处理流程
Nginx入门 -- 理解 Nginx 的请求处理流程
90 1
|
1月前
|
JSON 网络协议 应用服务中间件
Nginx入门 -- 理解Nginx基础概念:请求处理(Request)
Nginx入门 -- 理解Nginx基础概念:请求处理(Request)
42 0
|
3月前
|
应用服务中间件 nginx
nginx动静分类,静态资源放到nginx中
这篇文章介绍了如何将项目中的静态资源部署到Nginx服务器中,包括将静态资源移动到Nginx目录、删除项目中的静态资源、替换静态资源访问路径、检查页面情况、修改Nginx配置文件以及重启Nginx查看效果的详细步骤。
nginx动静分类,静态资源放到nginx中
|
3月前
|
NoSQL Java 应用服务中间件
使用Redis和Nginx分别实现限制接口请求频率
这篇文章介绍了如何使用Redis和Nginx分别实现限制接口请求频率的方法,包括具体的命令使用、代码实现和配置步骤。
65 0
|
4月前
|
前端开发 JavaScript 应用服务中间件
|
4月前
|
前端开发 应用服务中间件 nginx
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些
|
4月前
|
应用服务中间件 nginx
如何通过Nginx配置将请求转发到conf.d目录下的各个配置文件
如何通过Nginx配置将请求转发到conf.d目录下的各个配置文件
557 2
|
5月前
|
负载均衡 应用服务中间件 nginx
经验大分享:nginx实现请求转发
经验大分享:nginx实现请求转发
322 1
|
4月前
|
Kubernetes Java 应用服务中间件
Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上
Kubernetes 上搭建一个 Nginx 的 Pod,并确保传入的 API 请求被均匀地分发到两个 Java 业务 Pod 上
78 0