【技巧】动态解决跨域问题Nginx动态判断是否需要加跨域

  • Post author:
  • Post category:其他


【技巧】动态解决跨域问题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 版权协议,转载请附上原文出处链接和本声明。