502 Bad Gateway Error with nginx

源頭

在攥寫七天學會設計模式 – Singleton時,發生了點小狀況。 我點擊 WordPress 的「全部文章」時,顯示 502 Bad Gateway 的錯誤訊息; 由於點下去後不久(一、兩秒內)就跳轉出錯誤,故猜測不是 timeout 的關係, 便開始了一段 debug 的故事⋯⋯

環境

我是使用 WordPress(不是重點)的框架,並架設在 Vultr 的主機上; 主機的主要規格為 CPU 1 vCore、RAM 1024 MB、25 GB SSD。

原因

透過 nginx 的 error log(cat /var/log/nginx/wordpress_https_error.log), 發現關鍵字: upstream sent too big header while reading response header from upstream 拿去餵狗的結果是,需要調整 nginx.conf(vim /etc/nginx/nginx.conf), 加上

http {    
    proxy_buffer_size   128k;
    proxy_buffers   4 256k;
    proxy_busy_buffers_size   256k;

    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 128k;
  ...
}

來調整 buffer size,來避免資源不足直接捨棄的情況(502)。 由於 5 塊美金的方案,Vultr 僅提供 1024 MB 的記憶體大小,但它有 25 GB 的 SSD! 故可以透過 Swap 的方式,用硬碟換取記憶體的效能。

cd /var
touch swap.img
chmod 600 swap.img
dd if=/dev/zero of=/var/swap.img bs=1024k count=1000
mkswap /var/swap.img
swapon /var/swap.img
# swapoff /var/swap.img

依序輸入完後,可以輸入「free」來看 swap 是否有使用相對應的 size 了! 便可以解決 nginx 因資源不足所產生的 502 Bad Gateway error!

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus