Implementamos um serviço web para fazer a validação de domínio. O que estamos curiosos é sobre o impacto no desempenho de emitir uma solicitação da web no método allow_domain
? Além disso, com que frequência esse método é chamado? É chamado APENAS antes da sequência Let's Encrypt?
Parece que há um certificado para um domínio em armazenamento que não precisaríamos chamar de allow_domain
.
Talvez um pouco mais desse tipo de explicação seja útil nos documentos.
Obrigada.
É chamado quer você tenha um certificado ou não. Pessoalmente, eu verifico se já temos um certificado antes de perguntar ao nosso back-end se está tudo bem para gerar um novo.
-- first check if we have the certificate already, else check with backend if we allow it
local certstorage = auto_ssl:get("storage")
local fullchain_pem, privkey_pem = certstorage:get_cert(domain)
if fullchain_pem then
return true
else ...
Também estou um pouco preocupado com a sobrecarga / impacto no desempenho, mas ainda estou nos estágios de planejamento e não cheguei tão longe ainda.
@brianlund obrigado por compartilhar. Implementei um lua_shared_dict
para 'armazenar em cache' nossos resultados do referido serviço da web.
auto_ssl:set("allow_domain", function(domain)
local http = require "resty.http"
local httpc = http.new()
local cjson = require "cjson"
local our_allow_domain_cache = ngx.shared.our_allow_domain_cache
local found = our_allow_domain_cache:get(domain)
if found == nil then
local res, err = httpc:request_uri("[is domain allowed web service]"..domain, {
method = "GET",
})
if not res then
found = false
else
local data = cjson.decode(res.body)
found = data.found
end
-- Cache for 60 seconds, for now...
our_allow_domain_cache:set(domain, found, 60)
else
if found then
-- Known good domain, keep it in cache for a little longer
our_allow_domain_cache:set(domain, found, 300)
end
end
Gosto muito da sua ideia de verificar o serviço auto_ssl:get("storage")
. Eu poderia ir com algo semelhante. Podemos supor que isso aconteça em todas as solicitações? Ou lua_shared_dict auto_ssl
sendo usado como uma camada de cache para armazenamento? Parece que pode ser: https://github.com/GUI/lua-resty-auto-ssl/blob/master/lib/resty/auto-ssl/ssl_certificate.lua#L20
Eu me pergunto se seria melhor em seu exemplo verificar:
ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
vs chamar storage
diretamente.
Acredito que ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
apenas verifica o cache de memória compartilhada. Pretendo executar vários nós, então preciso de algo que seja compartilhado entre eles (o armazenamento redis). Eu gosto da sua solução de cache, porém, ela economizaria muitas chamadas para o serviço de armazenamento, se eu vir algum problema em chamá-la com tanta frequência, vou manter isso em mente.
Gostaria de agradecer a você @jasonbouffard por seu código de demonstração lá - foi um bloco de construção extremamente útil para mim! Agradeço!
Podemos supor que isso aconteça em todas as solicitações?
Esta é uma pergunta muito boa.
Minha suposição é que este método é chamado quando não há certificado para o domínio, mas não tenho certeza sobre isso.
Você conseguiu confirmar @jasonbouffard ?
@ Alir3z4
Eu também estava curioso sobre isso.
Os documentos não são tão transparentes sobre isso, então tive que inspecionar o código-fonte.
Portanto, em cada solicitação, o auto-ssl faz o seguinte:
ngx.shared.auto_ssl
, que são armazenados em cache por 1 horaallow_domain
definido pelo usuárioSeria perfeito explicar isso no README.md.
Obrigado!
A fonte: