Kami telah menerapkan layanan web untuk melakukan validasi domain. Yang membuat kami penasaran adalah dampak kinerja dari mengeluarkan permintaan web dalam metode allow_domain
? Juga seberapa sering metode ini disebut? Apakah ini disebut HANYA sebelum urutan Let's Encrypt?
Tampaknya jika ada sertifikat untuk domain dalam penyimpanan yang tidak perlu kita panggil allow_domain
.
Mungkin sedikit lebih banyak dari jenis penjelasan ini akan berguna dalam dokumen.
Terima kasih.
Disebut apakah Anda memiliki sertifikat atau tidak. Secara pribadi saya memeriksa apakah kami sudah memiliki sertifikat sebelum saya bertanya kepada backend kami apakah boleh membuat yang baru.
-- 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 ...
Saya agak khawatir tentang dampak overhead/kinerja juga, tetapi saya masih dalam tahap perencanaan dan belum sampai sejauh ini.
@brianlund terima kasih telah berbagi. Saya telah menerapkan lua_shared_dict
untuk 'cache' hasil kami dari layanan web tersebut.
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
Saya sangat menyukai ide Anda untuk memeriksa layanan auto_ssl:get("storage")
. Saya mungkin pergi dengan sesuatu yang serupa. Bisakah kita berasumsi ini terjadi pada setiap permintaan? Atau apakah lua_shared_dict auto_ssl
menggunakan lapisan caching untuk penyimpanan? Sepertinya mungkin: https://github.com/GUI/lua-resty-auto-ssl/blob/master/lib/resty/auto-ssl/ssl_certificate.lua#L20
Saya ingin tahu apakah akan lebih baik dalam contoh Anda untuk memeriksa:
ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
vs memanggil storage
secara langsung.
Saya percaya ngx.shared.auto_ssl:get("domain:fullchain_der:" .. domain)
hanya memeriksa cache memori bersama. Saya berencana untuk menjalankan banyak node jadi perlu sesuatu yang dibagikan di antara mereka (penyimpanan redis). Saya suka solusi cache Anda, itu akan menghemat banyak panggilan ke layanan penyimpanan, jika saya melihat ada masalah dengan memanggilnya sesering itu, saya akan mengingatnya.
Saya ingin mengucapkan terima kasih @jasonbouffard untuk kode demo Anda di sana - itu adalah blok bangunan yang sangat berguna bagi saya! Menghargai itu!
Bisakah kita berasumsi ini terjadi pada setiap permintaan?
Ini adalah pertanyaan yang sangat bagus.
Asumsi saya adalah metode ini dipanggil ketika tidak ada sertifikat untuk domain, tetapi saya tidak yakin tentang itu.
Sudah bisa konfirmasi @jasonbouffard ?
@Alir3z4
Saya juga penasaran dengan hal ini.
Dokumen tidak begitu transparan tentang ini, jadi saya harus memeriksa kode sumbernya.
Jadi, pada setiap permintaan, auto-ssl melakukan ini:
ngx.shared.auto_ssl
, yang di-cache selama 1 jamallow_domain
ditentukan penggunaAkan sempurna untuk menjelaskan ini di README.md.
Terima kasih!
Sumber: