Nginx 监听任意端口但重写 8080

Nginx 监听任意端口但重写 8080

我已经使用 Openresty 设置了一个 nginx 代理。该代理占用了一个 HTTP SOAP POST要求,使用在 HTTP 服务器 8080 端口的根位置(“/”)内编写的 LUA 脚本对其进行修改,然后将其发送到后端服务器进行处理,该服务器正常工作。

当代理将连接中继到后端服务器时,它会根据 TCP 规范创建一个新的连接,并生成一个不同于端口 8080 的新源端口,后端服务器应该在此端口进行响应。

有没有办法拦截回复在 nginx 上,以便它能够拦截此类响应并使用 LUA 脚本对其进行相应的修改?

感谢您提供的任何见解。

答案1

以下是基于我之前的回答的示例:

    location / {
        access_by_lua '
            ngx.req.read_body()
            local body = ngx.req.get_body_data()
            body = string.gsub(body, "_v4", "_v2")
            ngx.req.set_body_data(body)
            local header = ngx.req.get_headers()["Content-Type"]
            header = string.gsub(header, "_v4", "_v2")
            ngx.req.set_header("Content-Type", header)
        ';
        proxy_pass http://192.168.1.3:1234;
        body_filter_by_lua '
            # getting response body
            local body = ngx.arg[1]
            # response body is in a "body" variable now
            # do some modifications with "body" variable
            # just an example: convert body to uppercase
            body = string.upper(body)
            # setting back modified response body
            ngx.arg[1] = body
        ';
    }

如果您的响应主体足够大,事情可能会变得更加复杂,因为响应是按部分处理的(按 nginx 术语中的数据块处理)。

相关内容