لقد قمنا بتنفيذ خدمة ويب للقيام بالتحقق من صحة المجال. ما يثير فضولنا هو تأثير الأداء لإصدار طلب ويب بطريقة allow_domain
؟ كم مرة تسمى هذه الطريقة أيضًا؟ هل يتم استدعاؤه فقط قبل تسلسل Let's Encrypt مباشرة؟
يبدو أنه إذا كانت هناك شهادة لمجال في التخزين فلن نحتاج إلى الاتصال بـ allow_domain
.
ربما يكون المزيد من هذا النوع من الشرح مفيدًا في المستندات.
شكرا لك.
يطلق عليه ما إذا كان لديك شهادة أم لا. أنا شخصياً أتحقق مما إذا كان لدينا بالفعل شهادة قبل أن أسأل خلفيتنا إذا كان من الجيد إنشاء شهادة جديدة.
-- 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 ...
أنا قلق قليلاً بشأن تأثير النفقات العامة / الأداء أيضًا ، لكنني ما زلت في مراحل التخطيط ولم أحصل على هذا الأمر حتى الآن.
brianlund شكرا للمشاركة. لقد نفذت lua_shared_dict
محليًا لـ "تخزين" نتائجنا من خدمة الويب المذكورة.
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
تعجبني حقًا فكرتك في التحقق من خدمة auto_ssl:get("storage")
. قد أذهب مع شيء مشابه. هل يمكننا افتراض حدوث ذلك عند كل طلب؟ أو يتم استخدام lua_shared_dict auto_ssl
طبقة التخزين المؤقت للتخزين؟ يبدو أنه قد يكون: https://github.com/GUI/lua-resty-auto-ssl/blob/master/lib/resty/auto-ssl/ssl_certificate.lua#L20
أتساءل عما إذا كان من الأفضل في مثالك التحقق من:
ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
مقابل الاتصال بـ storage
مباشرة.
أعتقد أن ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
يتحقق فقط من ذاكرة التخزين المؤقت للذاكرة المشتركة. أخطط لتشغيل عدة عقد ، لذا أحتاج إلى شيء يتم مشاركته عبرها (تخزين redis). ومع ذلك ، يعجبني حل ذاكرة التخزين المؤقت ، فإنه سيوفر الكثير من المكالمات إلى خدمة التخزين ، إذا رأيت أي مشاكل في الاتصال به كثيرًا ، فسأضع ذلك في الاعتبار.
أردت أن أشكرك jasonbouffard على الكود التجريبي الخاص بك هناك - لقد كان ذلك لبنة مفيدة للغاية بالنسبة لي! نقدر ذلك!
هل يمكننا افتراض حدوث ذلك عند كل طلب؟
هذا السؤال حقا جيد.
افتراضي هو أنه يتم استدعاء هذه الطريقة عندما لا تكون هناك شهادة للمجال ، لكنني لست متأكدًا من ذلك.
هل تمكنت من تأكيد ذلك jasonbouffard ؟
MustafaHosny اللهم امين
كنت أشعر بالفضول حيال هذا أيضًا.
المستندات ليست شفافة حول هذا الأمر ، لذلك اضطررت إلى فحص شفرة المصدر.
لذلك ، عند كل طلب ، يقوم auto-ssl بما يلي:
ngx.shared.auto_ssl
، والتي يتم تخزينها مؤقتًا لمدة ساعة واحدةallow_domain
يحددها المستخدمسيكون مثاليا لشرح هذا في README.md.
شكرا!
المصدر: