有個項目用到了百度語音接口,因爲功能比較小因此不想在服務端寫,打算直接用 js 調百度接口,而後用 nginx 代理解決跨域問題,那麼token怎麼辦 token確定是要緩存起來的 又不能緩存在瀏覽器裏,因而就試了試 nginx 的 proxy_cache:nginx
# proxy_cache_path 緩存的基本配置,須要放在 server 的外面,下面是配置項 # 緩存文件路徑:/data/nginx/cache(自定義) # keys_zone 設置緩存名字和共享內存大小 one-cache:50m # levels 設置緩存文件目錄層次;levels=1:2 表示兩級目錄 # inactive 刪除指定時間內未被訪問的緩存文件 # max_size 緩存硬盤空間最多爲 200m,若是緩存空間滿,默認覆蓋掉緩存時間最長的資源。 # 下面兩項是 nginx 啓動時加載緩存的參數 # loader_threshold 加載器每次迭代過程最多執行300毫秒 # loader_files 加載器每次迭代過程當中最多加載200個文件 proxy_cache_path /data/nginx/cache keys_zone=one-cache:50m levels=1:2 inactive=7d loader_threshold=300 loader_files=200 max_size=200m; #百度語音識別接口跨域代理 server { listen 80; server_name vop-baidu.proxy.abc.com; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With,content-type; add_header Access-Control-Allow-Methods GET,POST; #,OPTIONS; add_header Access-Control-Max-Age 99999999; location / { proxy_pass http://vop.baidu.com; } #百度語音 token location /token { proxy_cache one-cache; # 使用名稱爲one-cache的緩存(必須) proxy_cache_methods GET HEAD POST; #配置須要緩存的方法 默認GET|HEAD proxy_cache_valid 200 302 10d; # 對200和302狀態的請求緩存10天,any 表示全部狀態 proxy_cache_key $uri; # 定義緩存key 默認是請求URL #****很重要*** 此項適用於配置要忽略的proxy_pass目標服務器的響應 header 項, #當目標服務器設置了 Cache-Control或Set-Cookie header等項時 則響應 #不會被緩存或影響緩存策略,因此這裏選擇忽略 proxy_ignore_headers Cache-Control Set-Cookie; proxy_pass https://openapi.baidu.com/oauth/2.0/token?xxxxxxx; } }
配置好後,記得建立緩存文件目錄(/data/nginx/cache , cache 這一層 nginx 能夠自動建立),而後重啓 nginx ,請求相關連接檢查配置是否生效,生效則緩存目錄會出現緩存文件:api
還有一些高級配置項, proxy_no_cache,proxy_cache_bypass,proxy_cache_purge,proxy_pass_headers,proxy_hide_headers,proxy_cache_background_update。。。用到的時候在詳細研究吧。跨域
參考:瀏覽器
https://blog.csdn.net/dengjiexian123/article/details/53386586緩存