Nginx的405错误

Nginx的405错误

Nginx将静态文件响应POST请求,提示405错误问题: 绝大多数服务器,都不允许静态文件响应POST请求(GET请求静态文件是天经地义的),否则会返回HTTP/1.1 405 Method not allowed错误。然而在前端开发中,前端开发工程师经常模拟后端请求,返回静态数据来查看页面效果,怎么办? 其实很简单,知道404和50x的错误定义吧,那么就是把405重新定义一下即可,如下:

error_page  405     =200 $uri;

测试环境局部配置

server {
        listen       8443 ssl;
        server_name  test-rebuild.baidu.com;

        ssl_certificate      ca.crt;
        ssl_certificate_key  baidu.com.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        access_log /var/log/nginx/test-rebuild.aceess.log main;
        root   /usr/share/nginx/html;
        index  index.html index.htm;


        error_page 405 =200 $uri;	           #这里200写成其他数字也可以,比如:255,222等都行,自己定义的,就200好了。


        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
		
    }

其他配置示例

示例一

https://gist.github.com/baskaran-md/e46cc25ccfac83f153bb

server {
        listen       80;
        server_name  localhost;
    
        location / {
            root   html;
            index  index.html index.htm;
        }
    
        error_page  404     /404.html;
        error_page  403     /403.html;
        
        # To allow POST on static pages
        error_page  405     =200 $uri;
        
        # ...
}

示例二

location ~ \.(action|jsp) {
    root $testDataFold;
    error_page 405 =200 $request_uri;
}

写在最后

> 网上还有修改源码编译安装的办法,这里就不在展示了,但是这些都不是终极解决方案,违背了规则,最终还要:说服开发不要对静态文件使用 post 方法,对静态文件使用 POST 方法是无意义的,更改成 GET 方法请求静态文件。