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 方法請求靜態文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章