ドメイン検証を行うためのWebサービスを実装しました。 私たちが興味を持っているのは、 allow_domain
メソッドでWebリクエストを発行することによるパフォーマンスへの影響です。 また、このメソッドはどのくらいの頻度で呼び出されますか? 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共有してくれてありがとう。 上記のWebサービスからの結果を「キャッシュ」するためにローカル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で確認できましたか?
@ Alir3z4
これにも興味がありました。
ドキュメントはこれについてそれほど透過的ではないので、ソースコードを調べる必要がありました。
したがって、すべてのリクエストで、auto-sslはこれを行います。
ngx.shared.auto_ssl
ディクショナリから証明書を取得しようとしますallow_domain
メソッドを呼び出しますREADME.mdでこれを説明するのに最適です。
ありがとう!
起源: