2010-07-21 57 views
3

我們有一個FreeBSD OS系統,一個nginx webserver和php-fpm作爲PHP CGI。有時.js和.css文件只是部分加載,文件末尾大約有5-7個字符丟失,所以我們的網站的可視化部分存在問題,因爲它變成了部分加載的javascript或css文件的難看原因。我們試圖禁用gzip,但它並沒有幫助我們。通常這發生在我們上傳修改後的CSS或JavaScript文件之後。部分加載的JavaScript文件

Nginx的版本:0.7.65

Nginx的配置:

worker_processes 100; 
worker_priority -5; 
worker_rlimit_nofile 51200; 

events { 
    worker_connections 51200; 
    use kqueue; 
} 

http { 
    include mime.types; 
    default_type application/octet-stream; 
    log_format main '$remote_addr - $remote_user [$time_local] ' '"$request_filename" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"'; 
    server_names_hash_bucket_size 512; 
    sendfile on; 
    tcp_nopush on; 
    keepalive_timeout 70 30; 
    send_timeout 30s; 
    reset_timedout_connection on; 
    resolver 127.0.0.1; 
    resolver_timeout 10s; 

    server_tokens off; 
    client_max_body_size 5m; 

    open_file_cache max=100000 inactive=40s; 
    open_file_cache_valid 60s; 
    open_file_cache_min_uses 2; 
    open_file_cache_errors on; 

#gzip on; 

.................. ....... ...........

我希望這部分配置足以幫助我們。

回答

0

Usually this happens after we upload modified css or javascript file.

是你的nginx試圖提供未完全上傳內容還?

如果是這樣,嘗試將文件上傳到系統的另一部分首先移動/複製內容原子。

4

此問題是open_file_cache的結果。

原因

open_file_cache測試,如果該文件是通過比較改變文件的inode。當您更改文件時,Nginx不會注意到這一更改並返回舊內容。由於open_file_cache對於每個Nginx的worker都是本地的,因此它可能會返回正確的新的內容或舊內容,具體取決於哪個worker正在處理請求。

解決方法

要麼你不應該使用它與不斷變化的內容文件(將其關閉特定的地點:open_file_cache off)或做原子文件更新爲建議(使用mvrename)。

+0

這個解決方案效果很好,我遇到了同樣的問題,並且讓我瘋狂,因爲我無法更新JavaScript文件而沒有網站變得瘋狂。我只是禁用了我在我的配置中的所有open_file_cache設置,而且現在的事情都很順利。謝謝 – 2012-12-30 16:41:21