Lua-resty-auto-ssl: allow_domain fréquence d'appel

Créé le 6 oct. 2017  ·  6Commentaires  ·  Source: auto-ssl/lua-resty-auto-ssl

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.

Tous les 6 commentaires

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 :

  • essaie d'obtenir des certificats du dictionnaire ngx.shared.auto_ssl , qui sont mis en cache pendant 1 heure
  • appelle une méthode allow_domain définie par l'utilisateur
  • essaie d'obtenir des certificats du stockage
  • crée un nouveau certificat

Ce serait parfait pour expliquer cela dans README.md.
Merci!

La source:

https://github.com/auto-ssl/lua-resty-auto-ssl/blob/86d3c94807ad1585b464fad2d4defb379f9c152a/lib/resty/auto-ssl/ssl_certificate.lua#L104 -L157

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

jmvbxx picture jmvbxx  ·  6Commentaires

byrnedo picture byrnedo  ·  16Commentaires

discobean picture discobean  ·  8Commentaires

domharrington picture domharrington  ·  7Commentaires

ronaldgrn picture ronaldgrn  ·  8Commentaires