有个项目用到了百度语音接口,因为功能比较小因此不想在服务端写,打算直接用 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缓存