Я использую openresty/nginx+lua для отправки обращений на стороне сервера в протокол измерения Google Analytics. Однако функция, которую я использую (ngx.location.capture
), несовместима с HTTP/2 и проблема «не будет исправлена». По-видимому, выход — использовать модуль «resty.http». Должно быть, я делаю что-то неправильно при миграции, потому что она больше не отправляет хиты.
Вот код, который работает:
location /example {
resolver 8.8.8.8 ipv6=off;
access_by_lua_block {
local request = {
v = 1,
t = "pageview",
tid = "UA-XXXXXXX-Y",
cid = ngx.md5(ngx.var.remote_addr .. ngx.var.http_user_agent),
uip = ngx.var.remote_addr,
dp = ngx.var.request_uri,
dr = ngx.var.http_referer,
ua = ngx.var.http_user_agent,
ul = ngx.var.http_accept_language
}
local res = ngx.location.capture( "/gamp", {
method = ngx.HTTP_POST,
body = ngx.encode_args(request)
})
}
}
location = /gamp {
internal;
expires epoch;
access_log off;
proxy_pass_request_headers off;
proxy_pass_request_body on;
proxy_pass https://google-analytics.com/collect;
}
Вот как я пытался и потерпел неудачу:
location /example {
access_by_lua_block {
local request = {
v = 1,
t = "pageview",
tid = "UA-XXXXXXX-Y",
cid = ngx.md5(ngx.var.remote_addr .. ngx.var.http_user_agent),
uip = ngx.var.remote_addr,
dp = ngx.var.request_uri,
dr = ngx.var.http_referer,
ua = ngx.var.http_user_agent,
ul = ngx.var.http_accept_language
}
local http = require "resty.http"
local httpc = http.new()
local res, err = httpc:request_uri("https://google-analytics.com/collect", {
method = "POST",
body = ngx.encode_args(request)
})
}
}
err
при вызовеrequest_uri
? - person Rok   schedule 29.09.2019ngx.encode_args(request)
храниться в свойствеquery
объектаparams
вместоbody?
- person Rok   schedule 29.09.2019