1. 程式人生 > >Nginx+Tomcat代理環境下JS無法完全載入問題的處理

Nginx+Tomcat代理環境下JS無法完全載入問題的處理

問題場景

  Nginx+Tomcat搭建,且cms由Nginx進行代理轉發。如常見的8080埠轉到80,或者其他伺服器的80或8080埠等情況。之後通過80埠訪問cms的時候發現前端以及後臺很多的js載入一半,出現如圖錯誤:

1

1

直接訪問相關js也發現內容確實只加載了一半,強制重新整理無用,依然只有一半。但是直接訪問tomcat的80或者8080埠發現是沒有問題的。

問題原因

Nginx代理之後會有相應的代理快取區,快取區預設只有幾十K,某些版本的nginx預設設定中沒有相關處理,導致部分檔案代理是會出現載入不全的現象,其實不僅僅是JS檔案。只是因為框架的JS檔案略大,所以經常出現類似問題。

問題解決

在Nginx.conf中新增    proxy_buffer_size 128k;
            proxy_buffers   32 128k;
               proxy_busy_buffers_size 128k;

然後重啟nginx,即可。Nginx在代理了相應服務後或根據我們配置的UpStream和location來獲取相應的檔案,首先檔案會被解析到nginx的記憶體或者臨時檔案目錄中,然後由nginx再來響應。那麼當proxy_buffers和proxy_buffer_size以及proxy_busy_buffers_size 都太小時,會將內容根據nginx的配置生成到臨時檔案中,但是臨時檔案的大小也有預設值。所以當這四個值都過小時就會導致部分檔案只加載一部分。所以要根據我們的伺服器情況適當的調整proxy_buffers和proxy_buffer_size以及proxy_busy_buffers_size、proxy_temp_file

_write_size。具體幾個引數的詳細如下

proxy_buffers   32 128k;  設定了32個快取區,每個的大小是128k

proxy_buffer_size 128k; 每個快取區的大小是128k,當兩個值不一致時沒有找到具體哪個有效,建議和上面的設定一致。

proxy_busy_buffers_size 128k;設定使用中的快取區的大小,控制傳輸至客戶端的快取的最大

proxy_temp_file_write_size 快取檔案的大小