微服单独部署-.do请求报错解决(20200311nginx问题)

如题

已邀请:

1、修改nginx.conf

在34-35行添加如下,解决map_hash报错

map_hash_max_size 8096;
map_hash_bucket_size 128;

在66-69行,修改添加如下,当前是注释状态

    lua_need_request_body on;
    lua_package_path "/usr/local/src/lualib/?.lua;;";
    lua_package_cpath "/usr/local/src/lualib/?.so;;";
     init_worker_by_lua_file /data/iuap/middleware/nginx/conf.d/tools.lua;

2、修改conf.d/upstream-tomcat.conf , 大概30-130行,替换整段.do

    location ~* /nccloud(.*)\.do$ {
         set $appcode '';
         set $service '';
         rewrite_by_lua_block {
             local parameters  = split_path(ngx.var.uri)
             local server = ""
             local bussiness = ""
             local appcode = ""
             local randservice = ""
             --获得请求的headers来判断是否表单请求
             local receive_headers = ngx.req.get_headers()
             --获取匹配的URI如果是需要随机服务响应的
             randservice = isRandomService(ngx.var.uri)
             --如果参数为空则url不合法
             if(#parameters == 0) then
                ngx.exit(ngx.HTTP_FORBIDDEN)
             end
             --如果参数层级为5层则不进行解析直接往后传
             local len = table.getn(parameters)
             if (len > 5) then
                bussiness = parameters[2]
             else
                --获取url的匹配是否为平台action
                local module = parameters[2]
                if receive_headers["transcode"] then
                    appcode = receive_headers["transcode"]
                    ngx.log(ngx.ERR, "transcode:"..appcode)
                else
                   --form表单请求的appcode的解析
                   if (receive_headers["Content-Type"] == "application/x-www-form-urlencoded") then
                      --未考虑临时缓存问题,大于默认的缓存值则需要从datafile中找数据
                      local post_args_tab = ngx.req.get_post_args()
                      appcode = post_args_tab["sys_appcode"]
                   elseif randservice == false then
                      local dkjson = require("dkjson")
                      local data = ngx.req.get_body_data()
                      local obj, pos, err = dkjson.decode(data, 1, nil)
                      appcode = obj.sysParamJson.sys_appcode
                   end
                end
                --如果为随机服务策略,则随机增加领域标识
                if (randservice == true or isSpecialAppCode(appcode)) then
                    local bussinessServices = {"baseapp"}
                    if not bussinessServices then
                       bussiness = module
                    else
                       --随机取当前的服务来进行响应
                       local serviceNum = table.getn(bussinessServices)
                       math.randomseed(tostring(ngx.now()):reverse():sub(1, 6))
                       local serviceIndex = math.random(1,serviceNum)
                       bussiness = bussinessServices[serviceIndex]
                       ngx.log(ngx.ERR, "URL rewrite random:"..bussiness)
                    end
                else
                    --如果为平台action则进行body的解析
                    local platformservice = isPlatformService(ngx.var.uri)
                     if (platformservice == true) then
                       if appcode then
                          local bussinessData = ""
                          local res = ngx.location.capture('/nccloud/uapbd/platform/pub/queryservicebyAppcode.do',
                           {
                               method = ngx.HTTP_POST,
                               header = header,
                               args = {transcode = appcode},
                               body = "{\"sysParamJson\":{\"busiaction\": \"查询appCode对应的服务\"}}"
                           }
                          )
                          if (200 == res.status or 403 == res.status) then
                             ngx.log(ngx.ERR, "rockzhu res.status"..res.status)
                             if res.header["service"] then
                                bussinessData = res.header["service"]
                                ngx.log(ngx.ERR, "rockzhu res.service"..res.header["service"])
                             end
                          end
                           --如果不存在该服务标识,则默认为模块
                          if not bussinessData then
                             bussiness = "baseapp"
                          else
                             bussiness = bussinessData
                          end
                       else
                          bussiness = "baseapp"
                       end
                     else
                       nxg.log("URL rewrite failed!")
                       ngx.exit(404)
                     end
                   end
                 ngx.log(ngx.ERR, "URL rewrite server:"..bussiness)
               end
           --url进行拼接
           for i,v in ipairs(parameters) do
               if (i == 2 ) then
                    server = server .. "/" .. bussiness
               end
               server = server .. "/" .. v
           end
            ngx.log(ngx.ERR, "URL relocation server:"..server)
            ngx.exec(server)
        }
       }


如果conf.d/upstream-tomcat.conf最后有如下,则删除

    lua_need_request_body on;
    lua_package_path "/usr/local/src/lualib/?.lua;;";
    lua_package_cpath "/usr/local/src/lualib/?.so;;";
     init_worker_by_lua_file /data/iuap/middleware/nginx/conf.d/tools.lua;

另,删除conf.d/upstream-tomcat.conf下的

map $appcode $bussinessmodule{
xx
xx
xx
}


要回复问题请先登录注册