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