实现思路Nginx配置为COS代理:设置Nginx作为反向代理,转发请求至COS服务器。认证集成:在Nginx访问流程中嵌入认证环节,通过调用认证服务API,根据返回的HTTP状态码(如401代表未授权,200表示授权通过)来决定是否继续处理请求。缓存策略定制:针对性地为图片和视频资源启用缓存,确保高频访问的内容得到高效复用。实现细节代理配置:配置Nginx代理指向COS服务URL,实现请求转发。location ^~ /cosFile/{ #代理配置参数 proxy_connect_timeout 180; proxy_send_timeout 180; proxy_read_timeout 180; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $remote_addr; proxy_pass http://cos.xxxxx/12321xxx:csfile/; }认证配置:通过Nginx的auth_request模块,实现对每个请求的前置认证检查。#文件服务器代理缓存处理 location ^~ /cosFile/{ auth_request /valiauth; error_page 401 = @error401; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; proxy_pass http://cos.xxxxx/12321xxx:csfile/; } #文件服务器代理缓存后端认证地址 location /valiauth { internal; proxy_pass http://gateway/auth/checkAuth; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; } location @error401 { return 401 "Unauthorized"; }缓存配置:利用Nginx的proxy_cache指令,为符合条件的静态资源设定缓存规则。http{ #省略部分内容 #在 http 节点下 定义缓存路径及参数 proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=my_cache:50m max_size=4g inactive=10m use_temp_path=off; server{ #省略部分内容 #文件服务器代理缓存处理 location ^~ /cosFile/{ auth_request /valiauth; error_page 401 = @error401; add_header Cache-Control public; # 禁止目录浏览 autoindex off; # 2、开启缓存功能 proxy_cache my_cache; # 缓存配置 proxy_cache_key "$uri"; proxy_cache_min_uses 1; proxy_cache_methods HEAD GET; proxy_cache_valid 200 5m; add_header Nginx-Cache "$upstream_cache_status"; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; proxy_pass http://cos.xxxxx/12321xxx:csfile/; } } }图片和视频缓存配置:通过判断请求路径$request_uri的文件后缀决定返回变量$cache_control_policy为 0 或者 1,通过对proxy_cache_bypass 和 proxy_no_cache设置变量$cache_control_policy来决定是否需要绕过缓存,1 代表绕过,0 代表不绕过http{ #省略部分内容 #在 http 节点下 定义缓存路径及参数 proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=my_cache:50m max_size=4g inactive=10m use_temp_path=off; # 增加媒体判断 map $request_uri $cache_control_policy { ~*\.(jpg|jpeg|png|gif|bmp|tiff?|webp|svg|ico)$ 0; # 图片文件 ~*\.(mp4|webm|avi|mov|flv|wmv|mpeg|mkv|ogv)$ 0; # 视频文件 default 1; # 其他请求则缓存 } server{ #省略部分内容 #文件服务器代理缓存处理 location ^~ /cosFile/{ #设置认证路径 auth_request /valiauth; #设置401错误返回路径 error_page 401 = @error401; #增加客户端缓存头信息 add_header Cache-Control public; # 禁止目录浏览 autoindex off; #开启缓存功能 proxy_cache my_cache; proxy_cache_bypass $cache_control_policy; proxy_no_cache $cache_control_policy; #缓存的 key 使用请求地址 proxy_cache_key "$uri"; proxy_cache_min_uses 1; proxy_cache_methods HEAD GET; #状态为为 200 的文件 缓存48 个小时 proxy_cache_valid 200 2880m; #将缓存状态添加到响应头 add_header Nginx-Cache "$upstream_cache_status"; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; proxy_pass http://cos.xxxxx/12321xxx:csfile/; } } }最终生产配置示例:http{ #省略部分内容 #在 http 节点下 定义缓存路径及参数 # 定义缓存路径及参数 proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=my_cache:500m max_size=300g inactive=30d use_temp_path=off; # 增加媒体判断 map $request_uri $cache_control_policy { ~*\.(jpg|jpeg|png|gif|bmp|tiff?|webp|svg|ico)$ 0; # 图片文件 ~*\.(mp4|webm|avi|mov|flv|wmv|mpeg|mkv|ogv)$ 0; # 视频文件 default 1; # 其他请求则缓存 } server{ #省略部分内容 #文件服务器代理缓存处理 location ^~ /cosFile/{ #后端认证路径 auth_request /valiauth; #认证不通过返回的路径 error_page 401 = @error401; #增加缓存 add_header Cache-Control public; # 禁止目录浏览 autoindex off; # 缓存功能是否启用的配置 proxy_cache my_cache; proxy_cache_bypass $cache_control_policy; proxy_no_cache $cache_control_policy; # 缓存配置 proxy_cache_key "$uri"; proxy_cache_min_uses 1; proxy_cache_methods HEAD GET; proxy_cache_valid 200 5m; add_header Nginx-Cache "$upstream_cache_status"; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; proxy_pass http://cos.xxxxx/12321xxx:csfile/; } #文件服务器代理缓存后端认证地址 location /valiauth { internal; proxy_pass http://gateway/auth/checkAuth; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; } #401错误返回的内容 location @error401 { return 401 "Unauthorized"; } } }
实现思路Nginx配置为COS代理:设置Nginx作为反向代理,转发请求至COS服务器。认证集成:在Nginx访问流程中嵌入认证环节,通过调用认证服务API,根据返回的HTTP状态码(如401代表未授权,200表示授权通过)来决定是否继续处理请求。缓存策略定制:针对性地为图片和视频资源启用缓存,确保高频访问的内容得到高效复用。实现细节代理配置:配置Nginx代理指向COS服务URL,实现请求转发。location ^~ /cosFile/{ #代理配置参数 proxy_connect_timeout 180; proxy_send_timeout 180; proxy_read_timeout 180; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarder-For $remote_addr; proxy_pass http://cos.xxxxx/12321xxx:csfile/; }认证配置:通过Nginx的auth_request模块,实现对每个请求的前置认证检查。#文件服务器代理缓存处理 location ^~ /cosFile/{ auth_request /valiauth; error_page 401 = @error401; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; proxy_pass http://cos.xxxxx/12321xxx:csfile/; } #文件服务器代理缓存后端认证地址 location /valiauth { internal; proxy_pass http://gateway/auth/checkAuth; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; } location @error401 { return 401 "Unauthorized"; }缓存配置:利用Nginx的proxy_cache指令,为符合条件的静态资源设定缓存规则。http{ #省略部分内容 #在 http 节点下 定义缓存路径及参数 proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=my_cache:50m max_size=4g inactive=10m use_temp_path=off; server{ #省略部分内容 #文件服务器代理缓存处理 location ^~ /cosFile/{ auth_request /valiauth; error_page 401 = @error401; add_header Cache-Control public; # 禁止目录浏览 autoindex off; # 2、开启缓存功能 proxy_cache my_cache; # 缓存配置 proxy_cache_key "$uri"; proxy_cache_min_uses 1; proxy_cache_methods HEAD GET; proxy_cache_valid 200 5m; add_header Nginx-Cache "$upstream_cache_status"; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; proxy_pass http://cos.xxxxx/12321xxx:csfile/; } } }图片和视频缓存配置:通过判断请求路径$request_uri的文件后缀决定返回变量$cache_control_policy为 0 或者 1,通过对proxy_cache_bypass 和 proxy_no_cache设置变量$cache_control_policy来决定是否需要绕过缓存,1 代表绕过,0 代表不绕过http{ #省略部分内容 #在 http 节点下 定义缓存路径及参数 proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=my_cache:50m max_size=4g inactive=10m use_temp_path=off; # 增加媒体判断 map $request_uri $cache_control_policy { ~*\.(jpg|jpeg|png|gif|bmp|tiff?|webp|svg|ico)$ 0; # 图片文件 ~*\.(mp4|webm|avi|mov|flv|wmv|mpeg|mkv|ogv)$ 0; # 视频文件 default 1; # 其他请求则缓存 } server{ #省略部分内容 #文件服务器代理缓存处理 location ^~ /cosFile/{ #设置认证路径 auth_request /valiauth; #设置401错误返回路径 error_page 401 = @error401; #增加客户端缓存头信息 add_header Cache-Control public; # 禁止目录浏览 autoindex off; #开启缓存功能 proxy_cache my_cache; proxy_cache_bypass $cache_control_policy; proxy_no_cache $cache_control_policy; #缓存的 key 使用请求地址 proxy_cache_key "$uri"; proxy_cache_min_uses 1; proxy_cache_methods HEAD GET; #状态为为 200 的文件 缓存48 个小时 proxy_cache_valid 200 2880m; #将缓存状态添加到响应头 add_header Nginx-Cache "$upstream_cache_status"; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; proxy_pass http://cos.xxxxx/12321xxx:csfile/; } } }最终生产配置示例:http{ #省略部分内容 #在 http 节点下 定义缓存路径及参数 # 定义缓存路径及参数 proxy_cache_path /etc/nginx/cache levels=1:2 keys_zone=my_cache:500m max_size=300g inactive=30d use_temp_path=off; # 增加媒体判断 map $request_uri $cache_control_policy { ~*\.(jpg|jpeg|png|gif|bmp|tiff?|webp|svg|ico)$ 0; # 图片文件 ~*\.(mp4|webm|avi|mov|flv|wmv|mpeg|mkv|ogv)$ 0; # 视频文件 default 1; # 其他请求则缓存 } server{ #省略部分内容 #文件服务器代理缓存处理 location ^~ /cosFile/{ #后端认证路径 auth_request /valiauth; #认证不通过返回的路径 error_page 401 = @error401; #增加缓存 add_header Cache-Control public; # 禁止目录浏览 autoindex off; # 缓存功能是否启用的配置 proxy_cache my_cache; proxy_cache_bypass $cache_control_policy; proxy_no_cache $cache_control_policy; # 缓存配置 proxy_cache_key "$uri"; proxy_cache_min_uses 1; proxy_cache_methods HEAD GET; proxy_cache_valid 200 5m; add_header Nginx-Cache "$upstream_cache_status"; proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60; proxy_buffering on; proxy_buffer_size 32k; proxy_buffers 4 128k; proxy_pass http://cos.xxxxx/12321xxx:csfile/; } #文件服务器代理缓存后端认证地址 location /valiauth { internal; proxy_pass http://gateway/auth/checkAuth; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; } #401错误返回的内容 location @error401 { return 401 "Unauthorized"; } } }