Implementamos un servicio web para realizar la validación de dominios. ¿Lo que nos interesa es el impacto en el rendimiento de emitir una solicitud web en el método allow_domain
? Además, ¿con qué frecuencia se llama a este método? ¿Se llama SOLO justo antes de la secuencia Let's Encrypt?
Parecería que si hubiera un certificado para un dominio almacenado, no necesitaríamos llamar allow_domain
.
Quizás un poco más de este tipo de explicación sería útil en los documentos.
Gracias.
Se llama si tiene un certificado o no. Personalmente, verifico si ya tenemos un certificado antes de preguntarle a nuestro backend si está bien generar uno nuevo.
-- 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 ...
También estoy un poco preocupado por el impacto de la sobrecarga / rendimiento, pero todavía estoy en las etapas de planificación y aún no he llegado tan lejos.
@brianlund gracias por compartir. Implementé un lua_shared_dict
local para 'almacenar en caché' nuestros resultados de dicho servicio 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
Me gusta mucho tu idea de comprobar el servicio auto_ssl:get("storage")
. Podría ir con algo similar. ¿Podemos asumir que esto sucede en cada solicitud? ¿O se está usando lua_shared_dict auto_ssl
una capa de almacenamiento en caché? Parece que podría ser: https://github.com/GUI/lua-resty-auto-ssl/blob/master/lib/resty/auto-ssl/ssl_certificate.lua#L20
Me pregunto si sería mejor en su ejemplo verificar:
ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
vs llamar a storage
directamente.
Creo que ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
solo verifica la memoria caché compartida. Planeo ejecutar varios nodos, por lo que necesito algo que se comparta entre ellos (el almacenamiento de redis). Sin embargo, me gusta su solución de caché, ahorraría muchas llamadas al servicio de almacenamiento, si veo algún problema al llamarlo con tanta frecuencia, lo tendré en cuenta.
Quería agradecerle a @jasonbouffard por su código de demostración allí, ¡fue un bloque de construcción extremadamente útil para mí! ¡Lo aprecio!
¿Podemos asumir que esto sucede en cada solicitud?
Esta es una muy buena pregunta.
Supongo que se llama a este método cuando no hay un certificado para el dominio, pero no estoy seguro.
¿Has podido confirmarlo @jasonbouffard ?
@ Alir3z4
También tenía curiosidad por esto.
Los documentos no son tan transparentes sobre esto, así que tuve que inspeccionar el código fuente.
Entonces, en cada solicitud, auto-ssl hace esto:
ngx.shared.auto_ssl
, que se almacenan en caché durante 1 horaallow_domain
definido por el usuarioSería perfecto para explicar esto en README.md.
¡Gracias!
La fuente: