歡迎您光臨本站 註冊首頁

使用Nginx緩存和轉發后,web功能失效的問題

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

使用Nginx緩存和轉發后,web功能失效的問題

【問題描述】

我這邊一個系統中,是使用一個js插件(http://johannburkard.de/blog/programming/javascript/xslt-js-version-3-0-released-xml-xslt-jquery-plugin.html)實現將XML用XSL轉換后顯示信息的。

最近在原伺服器前面加裝了Nginx做緩存和轉發,該代碼就失效了。

請有經驗的各位給點思路,可能是哪方面的原因。是不是我的Nginx配置有啥問題啊?

【環境描述】

應用伺服器是Domino,埠8080,直接訪問功能正常。

Nginx的埠80,經過其轉發和緩存后,JS功能失效。

Nginx的配置文件如下:
#user  nobody;
worker_processes  3;

error_log  logs/error.log;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 1000;

#pid        logs/nginx.pid;
pid        logs/nginx.pid;

#工作模式及連接數上限

events {
    worker_connections  1024;
}

#設定http伺服器,利用它的反向代理功能提供負載均衡支持

http {
    include    mime.types;
    default_type  application/octet-stream;   
    charset utf-8;

        #設定日誌格式
    log_format main    '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         '"$gzip_ratio"';

    log_format download    '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         '"$http_range" "$sent_http_content_range"';

  client_header_timeout  3m;
  client_body_timeout    3m;
  send_timeout          3m;
        #設定請求緩衝
  client_header_buffer_size    10k;
  large_client_header_buffers  4 4k;

        #設定訪問日誌

    #access_log  logs/access.log  main;
    access_log  logs/access.log main;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;

    #keepalive_timeout  0;
    keepalive_timeout  15;

  #註:proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區
  proxy_temp_path   nginx_cache/proxy_temp_dir;
  #設置Web緩存區名稱為cache_one,內存緩存空間大小為200MB,1天沒有被訪問的內容自動清除,硬碟緩存空間大小為1GB。
  proxy_cache_path  nginx_cache/proxy_cache_dir  levels=1:2   keys_zone=cache_one:200m inactive=1d max_size=1g;

upstream  backend_server {  
     server   127.0.0.1:8080;
}


#設定虛擬主機,默認為監聽80埠,改成其他埠會出現問題

    server {
        listen       80;
        server_name  _*;

        #charset koi8-r;
         charset utf8;
         
        #設定本虛擬主機的訪問日誌
        access_log  logs/host.access.log  main;

                index index.html index.htm;

        location ~ \.(htm|html|asp|php|gif|jpg|jpeg|png|bmp|ico|rar|css|js|zip|java|jar|txt|flv|swf|mid|doc|ppt|xls|pdf|txt|mp3|wma|xsl)$ {
   
        proxy_pass http://backend_server;   
        proxy_set_header Host $host;   
        proxy_set_header X-Real-IP $remote_addr;   
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
#        expires 24h;
                                expires 15m;
            
        #進行緩存,使用Web緩存區cache_one   
        proxy_cache cache_one;
   
        #對不同HTTP狀態碼緩存設置不同的緩存時間   
        proxy_cache_valid 200 1m;
        proxy_cache_valid 304 1m;
        proxy_cache_valid 301 302 1m;
        proxy_cache_valid any 1m;
   
                #設置Web緩存的Key值,Nginx根據Key值md5哈希存儲緩存.
        #以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希,存儲緩存內容到二級緩存目錄內
        proxy_cache_key $host$uri$is_args$args;
   
        }

        location / {
            #root   html;
            #index  index.html index.htm;
            #其餘的不緩存   
            proxy_set_header Host $host;   
            proxy_set_header X-Real-IP $remote_addr;   
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   
            proxy_pass http://backend_server;   
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
《解決方案》

補充一下,嘗試過不用插件,改為直接寫JS代碼(代碼2)實現對XML數據用XSL處理后顯示出來的功能。
也是在直接訪問8080埠時功能正常,經Nginx的80埠去訪問就不行了。


代碼2:var source = new ActiveXObject("Msxml2.DOMDocument");
   var style = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
   var XSLt=new ActiveXObject("Msxml2.XSLTemplate");     
   source.async = false;
   style.async = false;
   source.resolveExternals = false;
   style.resolveExternals = false;
   source.load(path+"(XMLViewForHomePage)?ReadViewEntries&count=10");       
   style.load("/webOA/xsl/xslForPortal_sy.xsl");
   XSLt.stylesheet = style;
   ProcSetParam = XSLt.createProcessor();
   ProcSetParam.input = source;  
   ProcSetParam.transform();
   var vHTML=ProcSetParam.output;
《解決方案》

自己頂一下 & 繼續測試中。
《解決方案》

自己頂一下 & 繼續測試中。
《解決方案》

檢查一下是否開啟了gzip壓縮。

[火星人 ] 使用Nginx緩存和轉發后,web功能失效的問題已經有722次圍觀

http://coctec.com/docs/service/show-post-14343.html