前陣子工作上有同事遇到個 bug:
如果在 local 跑檔案上傳,在上傳的過程中,會在後端 server 的 file 暫存區看到一個檔案,檔案大小也會隨著上傳進度而漸增;然而,deploy 到我們公司的 k8s 上後,卻變成在上傳過程中會一直看不到暫存檔,直到上傳進度達到 100% 時才會看到檔案突然出現。
這個 bug 和 Nginx 有關,它會 default 對檔案做 buffering,相關設定值為 proxy_request_buffering
可以在 ngx_http_proxy_module 的文件 裡看到這個預設值為 on
。
而 k8s 有 Nginx,所以理所當然地也會受到這個影響。如果不需要這個預設行為的話就要額外加上 annotation 才能改變這個預設行為:
nginx.ingress.kubernetes.io/proxy_request_buffering off;
是個沒遇過根本不會知道的雷⋯