【技巧】动态解决跨域问题Nginx动态判断是否需要加跨域Lua
通过 Lua 实现
header_filter_by_lua
location ^~ /oa {
# 配置变量
set $my_headers $my_headers;
set $resp_header "";
# 重点
# 变量 动态跨域(解决如果服务端也配置了跨域会报错的问题)
set $dynamic_cross_origin "";
proxy_pass http://tpln-file-manage-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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_connect_timeout 300s;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
# 重点
add_header 'Access-Control-Allow-Origin' $dynamic_cross_origin;
add_header 'test-aaa' $dynamic_cross_origin;
add_header 'test-headers_all' $my_headers;
# 重点
#Lua header过滤器
header_filter_by_lua '
-- =========== Lua语法 Start ============
-- 获取响应头
local h = ngx.resp.get_headers()
-- json工具
local cjson = require "cjson"
-- 编码成字符串
local hstr = cjson.encode(h)
-- 获取响应头里跨域信息
local access = h["access-control-allow-origin"]
-- 如果跨域信息为空的话 则动态增加支持跨域
if(access == nil)
then
ngx.var.dynamic_cross_origin = "*"
end
ngx.var.my_headers = hstr
-- =========== Lua语法 End ============
';
}
版权声明:本文为G971005287W原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。