60 content_by_lua '
61 local header_key = "header__" .. ngx.var.uri
62 local body_key = "body__" .. ngx.var.uri
63 local memcached = require "resty.memcached"
64 local memc = memcached:new()
65 memc:connect("127.0.0.1", 11211)
66 header, flags, err = memc:get(header_key)
67 body, flags, err = memc:get(body_key)
68
69 if header and body then
70 ngx.status = ngx.HTTP_OK
71 ngx.header["Content-Length"] = string.len(body)
72 for k,v in string.gmatch(header, "(%w+): (.+)") do
73 ngx.header[k]=v
74 end
75 ngx.print(body)
76 else
77 local res = ngx.location.capture("/wiki".. ngx.var.uri)
78 local value = ""
79 ngx.status = ngx.HTTP_OK
80 for k,v in pairs(res.header) do
81 ngx.header[k]=v
82 value = value .. k .. ": " .. v .. "\\r\\n"
83 end
84 ngx.print(res.body)
85
86 local ok, err = memc:set(header_key, value)
87 local ok, err = memc:set(body_key, res.body)
88 if not ok then
89 ngx.log(ngx.ERR, "cannot set memcached: ", err)
90 end
91 end
92 ';
93 }