Nous avons mis en place un service Web pour effectuer la validation de domaine. Ce qui nous intéresse, c'est l'impact sur les performances de l'émission d'une requête Web dans la méthode allow_domain
? Aussi, à quelle fréquence cette méthode est-elle appelée? Est-il appelé UNIQUEMENT juste avant la séquence Let's Encrypt ?
Il semblerait que s'il existe un certificat pour un domaine en stockage, nous n'aurions pas besoin d'appeler allow_domain
.
Peut-être qu'un peu plus de ce type d'explication serait utile dans la doc.
Merci.
Il est appelé que vous ayez un certificat ou non. Personnellement, je vérifie si nous avons déjà un certificat avant de demander à notre backend s'il est possible d'en générer un nouveau.
-- 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 ...
Je suis également un peu préoccupé par l'impact sur les frais généraux/les performances, mais je suis encore en phase de planification et je n'en suis pas encore à ce stade.
@brianlund merci pour le partage. J'ai implémenté un lua_shared_dict
local pour "mettre en cache" nos résultats à partir dudit service 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
J'aime beaucoup votre idée de vérifier le service auto_ssl:get("storage")
. Je pourrais aller avec quelque chose de similaire. Pouvons-nous supposer que cela se produit à chaque demande ? Ou est-ce que lua_shared_dict auto_ssl
utilise une couche de mise en cache pour le stockage ? Il semble que cela pourrait être : https://github.com/GUI/lua-resty-auto-ssl/blob/master/lib/resty/auto-ssl/ssl_certificate.lua#L20
Je me demande s'il ne serait pas mieux dans votre exemple de vérifier :
ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
vs appeler directement storage
.
Je crois que ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
ne vérifie que le cache de la mémoire partagée. Je prévois d'exécuter plusieurs nœuds, j'ai donc besoin de quelque chose qui soit partagé entre eux (le stockage redis). J'aime bien votre solution de cache, cela économiserait beaucoup d'appels au service de stockage, si je vois des problèmes à l'appeler aussi fréquemment, je garderai cela à l'esprit.
Je voulais vous remercier @jasonbouffard pour votre code de démonstration là - c'était un bloc de construction extrêmement utile pour moi ! Appréciez-le !
Pouvons-nous supposer que cela se produit à chaque demande ?
C'est une très bonne question.
Mon hypothèse est que cette méthode est appelée lorsqu'il n'y a pas de certificat pour le domaine, mais je n'en suis pas sûr.
As-tu pu le confirmer @jasonbouffard ?
@Alir3z4
J'étais également curieux à ce sujet.
Les documents ne sont pas si transparents à ce sujet, j'ai donc dû inspecter le code source.
Ainsi, à chaque requête, auto-ssl fait ceci :
ngx.shared.auto_ssl
, qui sont mis en cache pendant 1 heureallow_domain
définie par l'utilisateurCe serait parfait pour expliquer cela dans README.md.
Merci!
La source: