1. 程式人生 > >動態網站離線緩存方案

動態網站離線緩存方案

動態 cal map 獲取 數據 zone tro 二級 ces

背景:

公司的一套系統,由前端、界面、服務層、大數據開發平架等多層組成,每一層被劃分為多個模塊,每個模塊會依賴若幹組建。由於公司的這套系統是部署在內網環境中的,現在需要拿出去給客戶演示,用一個筆記本裝這麽多個模塊有點不現實。因此,我們提出通過緩存前端請求的方式,屏蔽對後端的依賴,通過錄制對系統的操作緩存後端請求,達到仿真的效果。

解決思路:

利用Nginx的緩存功能,將所有請求都緩存到本地。演示時,只需啟動Nginx即可重復操作已錄制的動作。

worker_processes  1;

worker_rlimit_nofile 65535;

events {
    worker_connections  1024;
}


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


    log_format  main  ‘ $remote_user [$time_local]  $http_x_Forwarded_for $remote_addr  $request ‘
                      ‘$http_x_forwarded_for ‘
                      ‘$upstream_addr ‘
                      ‘ups_resp_time: $upstream_response_time ‘
                      ‘request_time: $request_time‘;

    access_log  logs/access.log  main;
    #error_log  logs/error.log  notice;  #rewrite 日誌會打印到error.log中,notice為最低日誌級別
    #rewrite_log on;    #rewrite時,打印日誌
    sendfile      on;
    server_tokens off;
    keepalive_timeout  120;
    proxy_connect_timeout    2;
    proxy_send_timeout       2;
    proxy_read_timeout 4000;
    proxy_buffer_size 2k;
    gzip  on;
    
    proxy_set_header X-Real-Ip $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
    
    #開啟緩存,指定緩存路徑、名稱、大小
    proxy_cache_path C:/develop/nginx-1.10.1/cache keys_zone=one:100m max_size=10g inactive=365d;
    
    upstream proxy_server {
        server localhost:5555;
    }
    
    upstream AAA_server {
        server 172.16.43.28:8080;
    }
    
    upstream BBB_server {
        server 172.16.43.28:8082;
    }
    
    
    
    
    #一級代理服務, 處理特殊請求
    server {
        listen      80;
        server_name localhost;
        
        #解決時間戳的問題
        if ($args ~ ^(.*)_=[0-9]+$) {
            set $args $1;
        }
        if ($args ~ ^(.*)v=[0-9]+$) {
            set $args $1;
        }
        
        #轉給緩存代理服務
        location / {
            add_header Cache-Control no-cache;
            proxy_pass http://proxy_server;
        }
        
        #替換獲取到的後端IP
        location ~* (getNginxInfo.action)$ {
            return 200 ‘{"nginxPort":"80","_switch":"1","nginxIp":"localhost"}‘;
        }
        
        location ~* (/AAA/query/).*\.action {
            proxy_pass http://proxy_server;
            sub_filter 8080 80;
        }
            
    }
    
    #二級代理服務,處理緩存
    server {
        listen      5555;
        server_name localhost;
            
        proxy_cache one;
        proxy_cache_methods GET POST;
        proxy_cache_key "$request_uri|$request_body";
        proxy_cache_valid 1d;
        proxy_ignore_headers Set-Cookie Cache-Control X-Accel-Expires Expires;
        add_header Nginx-Cache "$upstream_cache_status";

        location / {
            proxy_pass http://AAA_server;
        }
        
        location ~* (/BBB/api/v1/) {
            proxy_pass http://BBB_server;
        }
    }

    map $http_upgrade $connection_upgrade {
        default upgrade;
        ‘‘      close;
    }
}

動態網站離線緩存方案