s3 oss nginx/openresty location

        location /archive/oss {
            # 使用 Lua 脚本处理请求
            content_by_lua_block {
                -- 获取请求的 URI 和查询参数
                local uri = ngx.var.uri
                local args = ngx.req.get_uri_args()

                -- 定义一个表来存储需要保留的参数
                local allowed_keys = {
                    "X-Amz-Algorithm",
                    "X-Amz-Date",
                    "X-Amz-SignedHeaders",
                    "X-Amz-Expires",
                    "X-Amz-Credential",
                    "X-Amz-Signature"
                }

                local new_args = {}

                -- 遍历所有参数,只保留指定的参数
                for key, value in pairs(args) do
                    for _, allowed_key in ipairs(allowed_keys) do
                        if key == allowed_key then
                            table.insert(new_args, key .. "=" .. value)
                            break
                        end
                    end
                end

                -- 将保留的参数拼接成新的查询字符串
                local new_args_str = table.concat(new_args, "&")

                -- 去掉 /archive/oss 路径
                local new_uri = uri:gsub("^/archive/oss/", "/")

                -- 构造新的请求 URL
                local new_url = "http://s3.nvpc-middleware.svc.cluster.local:8333" .. new_uri
                if new_args_str ~= "" then
                    new_url = new_url .. "?" .. new_args_str
                end
                -- 将新的请求路径和参数存储在 Nginx 变量中
                ngx.var.new_url = new_url
                -- 转发请求到后端服务
                ngx.exec("@proxy", new_url)
            }
        }

        # 定义一个内部 location 来处理代理
        location @proxy {
            internal;
            # 从 Nginx 变量中获取新的请求路径和参数
            set $new_url $new_url;

            # 构造完整的后端服务 URL
            proxy_pass $new_url;

            # 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 X-Forwarded-Proto $scheme;

            # proxy_set_header Host $http_host;
            # proxy_set_header X-Real-IP $remote_addr;
            # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # proxy_set_header X-Forwarded-Proto $scheme;
            # proxy_set_header Authorization $http_authorization;
        }

 

posted @ 2025-05-22 00:51  牧之丨  阅读(29)  评论(0)    收藏  举报