рд╣рдордиреЗ рдбреЛрдореЗрди рд╕рддреНрдпрд╛рдкрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рд▓рд╛рдЧреВ рдХреА рд╣реИред рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддреНрд╕реБрдХ рд╣реИрдВ рдХрд┐ allow_domain
рдкрджреНрдзрддрд┐ рдореЗрдВ рд╡реЗрдм рдЕрдиреБрд░реЛрдз рдЬрд╛рд░реА рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡ рдХреНрдпрд╛ рд╣реИ? рд╕рд╛рде рд╣реА рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЗрд╕реЗ рд▓реЗрдЯреНрд╕ рдПрдирдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рднрдВрдбрд╛рд░рдг рдореЗрдВ рдХрд┐рд╕реА рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░рдорд╛рдг рд╣реИ рдХрд┐ рд╣рдореЗрдВ 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)
рдХреЗрд╡рд▓ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреИрд╢ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдХрдИ рдиреЛрдбреНрд╕ рдЪрд▓рд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЙрдирдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП (рд░реЗрдбрд┐рд╕ рд╕реНрдЯреЛрд░реЗрдЬ)ред рдореБрдЭреЗ рдЖрдкрдХрд╛ рдХреИрд╢ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕реНрдЯреЛрд░реЗрдЬ рд╕реЗрд╡рд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдХреЙрд▓ рдмрдЪрд╛рдПрдЧрд╛, рдЕрдЧрд░ рдореБрдЭреЗ рдЗрд╕реЗ рдмрд╛рд░-рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреВрдВрдЧрд╛ред
рдореИрдВ рд╡рд╣рд╛рдВ рдЖрдкрдХреЗ рдбреЗрдореЛ рдХреЛрдб рдХреЗ рд▓рд┐рдП @jasonbouffard рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ рдерд╛! рдЗрд╕рдХреА рдкреНрд░рд╢рдВрд╕рд╛ рдХрд░рдирд╛!
рдХреНрдпрд╛ рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╣рд░ рдЕрдиреБрд░реЛрдз рдкрд░ рд╣реЛрддрд╛ рд╣реИ?
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдкреНрд░рд╢реНрди рд╣реИред
рдореЗрд░реА рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛ рдЖрдк @jasonbouffard рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░
@Alir3z4
рдореИрдВ рднреА рдЗрд╕рдХреЛ рд▓реЗрдХрд░ рдЙрддреНрд╕реБрдХ рдерд╛ред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдиреЗ рдкрд╛рд░рджрд░реНрд╢реА рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рддреЛ, рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдкрд░, рдСрдЯреЛ-рдПрд╕рдПрд╕рдПрд▓ рдпрд╣ рдХрд░рддрд╛ рд╣реИ:
ngx.shared.auto_ssl
рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ 1 рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИallow_domain
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИрдЗрд╕реЗ README.md рдореЗрдВ рд╕рдордЭрд╛рдирд╛ рд╕рд╣реА рд╣реЛрдЧрд╛ред
рдзрдиреНрдпрд╡рд╛рдж!
рд╕реНрд░реЛрдд: