A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/benagricola/lua-resty-fastcgi below:

benagricola/lua-resty-fastcgi: Lua FCGI client driver for ngx_lua based on the cosocket API.

Lua FastCGI client driver for ngx_lua based on the cosocket API.

Experimental, API may change without warning.

Requires ngx_lua > 0.9.5

Require the resty.fastcgi module in init_by_lua.

Create an instance of the fastcgi class in your content_by_lua.

Call the connect method with a socket path or hostname:port combination to connect.

Use the request_simple method to make a basic FastCGI request which returns a result object containing http body and headers, or nil, err.

init_by_lua '
  fcgi = require("resty.fastcgi")
';

server {
    root /var/www;

    location / {

        content_by_lua '
            local fcgic = fcgi.new()

            fcgic:set_timeout(2000)
            fcgic:connect("127.0.0.1",9000)

            ngx.req.read_body()

            fcgic:set_timeout(60000)

            local res, err = fcgic:request_simple({
                fastcgi_params = {
                    DOCUMENT_ROOT     = ngx.var.document_root,
                    SCRIPT_FILENAME   = ngx.var.document_root .. "/index.php",
                    SCRIPT_NAME       = "/",
                    REQUEST_METHOD    = ngx.var.request_method,
                    CONTENT_TYPE      = ngx.var.content_type,
                    CONTENT_LENGTH    = ngx.var.content_length,
                    REQUEST_URI       = ngx.var.request_uri,
                    QUERY_STRING      = ngx.var.args,
                    SERVER_PROTOCOL   = ngx.var.server_protocol,
                    GATEWAY_INTERFACE = "CGI/1.1",
                    SERVER_SOFTWARE   = "lua-resty-fastcgi",
                    REMOTE_ADDR       = ngx.var.remote_addr,
                    REMOTE_PORT       = ngx.var.remote_port,
                    SERVER_ADDR       = ngx.var.server_addr,
                    SERVER_PORT       = ngx.var.server_port,
                    SERVER_NAME       = ngx.var.server_name
                },
                headers = ngx.req.get_headers(),
                body    = ngx.req.get_body_data(),
            })

            if not res then
                ngx.status = 500
                ngx.log(ngx.ERR,"Error making FCGI request: ",err)
                ngx.exit(500)
            else
                for k,v in pairs(res.headers) do
                  ngx.header[k] = v
                end
                ngx.status = res.status
                ngx.say(res.body)
            end

            fcgic:close()
        ';
    }
}

syntax: fcgi_client = fcgi.new()

Returns a new fastcgi object.

syntax: ok, err = fcgi_client:connect(host or sockpath[,port])

Attempts to connect to the FastCGI server details given.

fcgi_class = require('resty.fastcgi')
local fcgi_client = fcgi_class.new()

local ok, err = fcgi_client:connect("127.0.0.1",9000)

if not ok then
    ngx.log(ngx.ERR, err)
    ngx.status = 500
    return ngx.exit(ngx.status)
end

ngx.log(ngx.info, 'Connected to ' .. err.host.host .. ':' .. err.host.port)

syntax: res, err = fcgi_client:request_simple({params...})

Makes a FCGI request to the connected socket using the details given in params.

Returns a result object containing HTTP body and headers. Internally this uses the streaming API.

e.g.

local params = {
    fastcgi_params = {
        DOCUMENT_ROOT     = ngx.var.document_root,
        SCRIPT_FILENAME   = ngx.var.document_root .. "/index.php",
        SCRIPT_NAME       = "/",
        REQUEST_METHOD    = ngx.var.request_method,
        CONTENT_TYPE      = ngx.var.content_type,
        CONTENT_LENGTH    = ngx.var.content_length,
        REQUEST_URI       = ngx.var.request_uri,
        QUERY_STRING      = ngx.var.args,
        SERVER_PROTOCOL   = ngx.var.server_protocol,
        GATEWAY_INTERFACE = "CGI/1.1",
        SERVER_SOFTWARE   = "lua-resty-fastcgi",
        REMOTE_ADDR       = ngx.var.remote_addr,
        REMOTE_PORT       = ngx.var.remote_port,
        SERVER_ADDR       = ngx.var.server_addr,
        SERVER_PORT       = ngx.var.server_port,
        SERVER_NAME       = ngx.var.server_name
    },
    headers = ngx.req.get_headers(),
    body    = ngx.req.get_body_data(),
}

res, err = fcgi_client:request_simple(params)

if not res then
    ngx.log(ngx.ERR, err)
    ngx.status = 500
    return ngx.exit(ngx.status)
end

local res_headers = res.headers
local res_body = res.body

syntax: res, err = fcgi_client:request({params...})

Makes a FCGI request to the connected socket using the details given in params.

Returns number of bytes written to socket or nil, err. This method is intended to be used with the response streaming functions.

e.g.

local params = {
    fastcgi_params = {
        DOCUMENT_ROOT     = ngx.var.document_root,
        SCRIPT_FILENAME   = ngx.var.document_root .. "/index.php",
        SCRIPT_NAME       = "/",
        REQUEST_METHOD    = ngx.var.request_method,
        CONTENT_TYPE      = ngx.var.content_type,
        CONTENT_LENGTH    = ngx.var.content_length,
        REQUEST_URI       = ngx.var.request_uri,
        QUERY_STRING      = ngx.var.args,
        SERVER_PROTOCOL   = ngx.var.server_protocol,
        GATEWAY_INTERFACE = "CGI/1.1",
        SERVER_SOFTWARE   = "lua-resty-fastcgi",
        REMOTE_ADDR       = ngx.var.remote_addr,
        REMOTE_PORT       = ngx.var.remote_port,
        SERVER_ADDR       = ngx.var.server_addr,
        SERVER_PORT       = ngx.var.server_port,
        SERVER_NAME       = ngx.var.server_name
    },
    headers = ngx.req.get_headers(),
    body    = ngx.req.get_body_data(),
}

res, err = fcgi_client:request(params)

if not res then
    ngx.log(ngx.ERR, err)
    ngx.status = 500
    return ngx.exit(ngx.status)
end

local body_reader = fcgic:get_response_reader()
local chunk, err
repeat
    chunk, err = body_reader(32768)

    if err then
        return nil, err, tbl_concat(chunks)
    end

    if chunk then
        -- Parse stdout here for e.g. HTTP headers
        ngx.print(chunk.stdout)
    end
until not chunk

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4