Wir haben einen Webservice implementiert, um die Domainvalidierung durchzuführen. Worauf wir neugierig sind, ist die Auswirkung auf die Leistung, wenn eine Webanfrage in der Methode allow_domain
ausgegeben wird? Und wie oft wird diese Methode aufgerufen? Wird es NUR kurz vor der Let's Encrypt-Sequenz aufgerufen?
Wenn es ein Zertifikat für eine Domain im Speicher gibt, müssten wir anscheinend nicht allow_domain
.
Vielleicht wäre ein bisschen mehr dieser Art von Erklärung in den Dokumenten nützlich.
Dankeschön.
Es wird aufgerufen, ob Sie ein Zertifikat haben oder nicht. Persönlich prüfe ich, ob wir bereits ein Zertifikat haben, bevor ich unser Backend frage, ob es in Ordnung ist, ein neues zu generieren.
-- 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 ...
Ich mache mir auch ein bisschen Sorgen über die Auswirkungen auf den Overhead / die Leistung, bin aber noch in der Planungsphase und noch nicht so weit.
@brianlund danke fürs teilen. Ich habe ein lokales lua_shared_dict
implementiert, um unsere Ergebnisse aus dem besagten Webdienst zu 'zwischenspeichern'.
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
Ihre Idee, den auto_ssl:get("storage")
Service zu überprüfen, gefällt mir sehr. Ich könnte mit etwas Ähnlichem gehen. Können wir davon ausgehen, dass dies bei jeder Anfrage passiert? Oder wird lua_shared_dict auto_ssl
als Caching-Layer für die Speicherung verwendet? So könnte es aussehen: https://github.com/GUI/lua-resty-auto-ssl/blob/master/lib/resty/auto-ssl/ssl_certificate.lua#L20
Ich frage mich, ob es in Ihrem Beispiel besser wäre, Folgendes zu überprüfen:
ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
Vergleich zu storage
direkt anzurufen.
Ich glaube, dass ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
nur den Shared-Memory-Cache überprüft. Ich habe vor, mehrere Knoten auszuführen, also benötige ich etwas, das von ihnen gemeinsam genutzt wird (den Redis-Speicher). Ich mag Ihre Cache-Lösung jedoch, sie würde viele Anrufe beim Speicherdienst sparen. Wenn ich Probleme damit sehe, sie so häufig aufzurufen, werde ich das im Hinterkopf behalten.
Ich wollte mich bei dir @jasonbouffard für deinen
Können wir davon ausgehen, dass dies bei jeder Anfrage passiert?
Das ist eine wirklich gute Frage.
Ich gehe davon aus, dass diese Methode aufgerufen wird, wenn kein Zertifikat für die Domäne vorhanden ist, aber ich bin mir nicht sicher.
Konnten Sie es
@Alir3z4
Darauf war ich auch neugierig.
Die Dokumente sind diesbezüglich nicht so transparent, also musste ich den Quellcode überprüfen.
Bei jeder Anfrage macht auto-ssl dies:
ngx.shared.auto_ssl
Wörterbuch abzurufen, die 1 Stunde lang zwischengespeichert werdenallow_domain
Methode aufWäre perfekt, um dies in README.md zu erklären.
Vielen Dank!
Die Quelle: