Lua-resty-auto-ssl: рдЕрдкрдЧреНрд░реЗрдб рдЧрд╛рдЗрдб

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдЬреБрд▓ре░ 2019  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: auto-ssl/lua-resty-auto-ssl

рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХреИрд╕реЗ рдХрд░реЗрдВ? рдХреЛрдИ рдЕрдкрдЧреНрд░реЗрдб рдЧрд╛рдЗрдб рдЙрдкрд▓рдмреНрдз рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@bryanus рдХреГрдкрдпрд╛ рдЗрд╕ рдХреЛрдб рдХреЛ рдЖрдЬрдорд╛рдПрдВ:

init_by_lua_block {
    auto_ssl = (require "resty.auto-ssl").new()
    auto_ssl:set("allow_domain", function(domain)

    -- reading from domains.txt and in testing

    local shell_execute = require "resty.auto-ssl.utils.shell_execute"
    local ngx_re = require "ngx.re"
    local result, err = shell_execute({"cat", "/home/user/domains.txt"})

    if err then
      ngx.log(ngx.ERR, "allow_domain cat error: ", err)
    else
      local domains = ngx_re.split(result["output"], "\n")
      for _, d in ipairs(domains) do
        if (domain == d) then
          return true
        end
      end
    end

    return false

    end)
    auto_ssl:set("renew_check_interval", 43200)
    auto_ssl:init()
  }

рд╡реНрдпрд╛рдЦреНрдпрд╛:

рдкреНрд░рддрд┐рдмрджреНрдз https://github.com/GUI/lua-resty-auto-ssl/commit/59758847b44981edfaf484d3a981deea82409332 рдиреЗ lua-resty-auto-ssl рдХреЗ рд▓рд┐рдП https://github.com/GUI/lua-shell-games рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдпрд╣рд╛рдВред

рдЗрд╕реЗ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ API shell_execute() рдмрджрд▓ рдЧрдпрд╛ (рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд╕рд╛рде рд╣реА рд╡рд╛рдкрд╕реА рдорд╛рди)ред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ Nginx рдореЗрдВ Lua рдХреЛрдб рдбреАрдмрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рджреБрдГрд╕реНрд╡рдкреНрди рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдХрд┐рд╕реА рджрд┐рди рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╕рднреА 11 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ 0.12.0 рд╕реЗ 0.13.1 рддрдХ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рднреА рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред

рдХреНрдпрд╛ рдореИрдВ рд╕рд┐рд░реНрдл sudo luarocks install lua-resty-auto-ssl рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдпрд╛ рдпрд╣ рдореЗрд░реЗ рд╡рд░реНрддрдорд╛рди 0.12.0 рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди/рд╕реЗрдЯрдЕрдк рдХреЛ рдорд┐рдЯрд╛ рджреЗрдЧрд╛?

рдпрд╛ рдХреНрдпрд╛ @ronaldgetz рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдирд┐рд░реНрдЬрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ?

рдЯреАрдЖрдИрдП.

рдореИрдВрдиреЗ 12 рд╕реЗ 13.1 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ sudo luarocks install lua-resty-auto-ssl рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ sudo systemctl restart openresty рдХреЗ рд╕рд╛рде рдУрдкрдирд░реЗрд╕реНрдЯреА рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ :)

рдзрдиреНрдпрд╡рд╛рдж @aviatrix! рддреЛ, рдмрд╕ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ nginx рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдпрд╛ рдХреБрдЫ рднреА рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдореЗрд░реЗ рдЕрдВрджрд░ рдмрд╣реБрдд рдХреБрдЫ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рдирдпрд╛ рдбреЛрдореЗрди рдЬрд╛рд░реА рдХрд░рдиреЗ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ рдореИрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реВрдВ? рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╡реИрд╕реЗ рднреА рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ...

@bryanus рд╣рдореЗрд╢рд╛ рдХреБрдЫ рднреА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмреИрдХрдЕрдк рдмрдирд╛рддреЗ рд╣реИрдВ! рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрдард┐рди рддрд░реАрдХреЗ рд╕реЗ рд╕реАрдЦрд╛ рд╣реИред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЙрдиреНрдлрд┐рдЧ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдирд┐рдЬреА рд░реЗрдкреЛ рдореЗрдВ рд╡рд░реНрдЬрди рдХрдВрдЯреНрд░реЛрд▓ рдореЗрдВ рд░рдЦреЗрдВ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЙрдиреНрдлрд┐рдбреЗрдВрд╕ рдлреЛрд▓реНрдбрд░ рдХреЛ рд╕реАрдкреА рдХрд░реЗрдВред

рдпрд╣ рдЕрджреНрдпрддрди (13.1) рдирд┐рд░реНрднрд░рддрд╛ Dehydrated рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдХреЗ Let's Encrypt рджреНрд╡рд╛рд░рд╛ v1 ACME рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╣рд┐рд╖реНрдХрд░рдг рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ Let's Encrypt рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ-рдПрдХ рдорд╣реАрдиреЗ рдореЗрдВ рдирдП рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред

рдзрдиреНрдпрд╡рд╛рдж @aviatrix! рдореИрдВ рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛ рджреВрдВрдЧрд╛ рдФрд░ рдпрд╣рд╛рдВ рд╡рд╛рдкрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реВрдВрдЧрд╛ред

рдУрд╣ред рдЕрдкрдЧреНрд░реЗрдб/рдЗрдВрд╕реНрдЯреЙрд▓ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ рдФрд░ рдУрдкрдирд░реЗрд╕реНрдЯреА рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░ рдЗрд╕рдиреЗ рддреБрд░рдВрдд рдореЗрд░рд╛ рд╕реЗрдЯрдЕрдк рддреЛрдбрд╝ рджрд┐рдпрд╛:

2019/11/08 21:06:23 [error] 2973#2973: *113 [lua] ssl_certificate.lua:310: ssl_certificate(): auto-ssl: failed to run do_ssl: /usr/local/openresty/luajit/share/lua/5.1/shell-games.lua:233: bad argument #1 (table expected, got string), context: ssl_certificate_by_lua*, client: 103.3.244.23, server: 0.0.0.0:443

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдпрд╣ рдПрдХ рд╕реНрдЯреЗрдЬрд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдкрд░ рдерд╛ рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рдирд┐рд╡рд╛рд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ @aviatrix? рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рд╕рд┐рд░реНрдл рд▓рд╛рдЗрди рд╕рдВрдкрд╛рджрди рдореЗрдВ рдкреИрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдЪреАрдЬреЗрдВ рдХрд╛рдо рдХрд░рддреА рд░рд╣рддреА рд╣реИрдВред

рдЕрджреНрдпрддрди: рддреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реАрдзреЗ @ronaldgetz рдХреЗ рдкреИрдЪ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдЬрд▓рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдУрдкрдирд░реЗрд╕реНрдЯреА рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдЬрдм рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкреВрд░реНрдг рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдорд┐рд▓реА рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдкрдХрдбрд╝рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреИрдЪ "рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛" рд╣реИ?

@bryanus рдХреНрдпрд╛ рдЖрдк рд╢рд╛рдпрдж рдбреЛрдореЗрди рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ рдХрд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ lua-resty-auto-ssl рдХреА рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬрд╝ рд╢реЗрд▓ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдПрдХ рдХрд╕реНрдЯрдо рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрдЯ рдХрдорд╛рдВрдб рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ)ред рд╢реЗрд▓ рддрд░реНрдХреЛрдВ рдХреЛ рдЕрдм рдкрд╣рд▓реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд╣реАрдВ рд╕реЗ рдмрд╕ рдПрдХ рдЕрдиреБрдорд╛рди, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдореЗрдВ рднреА рджреЗрдЦрд╛ рдерд╛ред

@andreasschroth рд╡рд╛рд╣! рдареАрдХ рдпрд╣реА рдореИрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ! рдореИрдВ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧ рдореЗрдВ рдПрдХ рд╢рд╛рд╢реНрд╡рдд рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЛрдореЗрди рдХреЛ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдореЗрдВ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реВрдБ:

````
init_by_lua_block {
auto_ssl = ("resty.auto-ssl" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдирдпрд╛ ()
auto_ ssl: рд╕реЗрдЯ ("allow_domain", рдлрд╝рдВрдХреНрд╢рди (рдбреЛрдореЗрди)

-- reading from domains.txt and in testing

local shell_execute = require "resty.auto-ssl.utils.shell_execute"
local ngx_re = require "ngx.re"
local status, output, err = shell_execute("cat /home/user/domains.txt")

if err then
  ngx.log(ngx.ERR, "allow_domain cat error: ", err)
else
  local domains = ngx_re.split(output, "\n")
  for _, d in ipairs(domains) do
    if (domain == d) then
      return true
    end
  end
end

return false

end)
auto_ssl:set("renew_check_interval", 43200)
auto_ssl:init()

}
````

рдХреНрдпрд╛ рдЖрдк рд╡рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдереЗ? рдореИрдВ рдереЛрдбрд╝рд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдВ рдХрд┐ рдЯреЗрдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЦреЛрд▓ рдХрдорд╛рдВрдб рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореБрдЭреЗ рдЗрд╕ рдкрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдЦреЛрджрдирд╛ рд╣реЛрдЧрд╛ред рдЖрдкрдиреЗ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рдХрд┐рдпрд╛? рдЗрд╕ рдЯрд┐рдк рдСрдл рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

@bryanus рдХреГрдкрдпрд╛ рдЗрд╕ рдХреЛрдб рдХреЛ рдЖрдЬрдорд╛рдПрдВ:

init_by_lua_block {
    auto_ssl = (require "resty.auto-ssl").new()
    auto_ssl:set("allow_domain", function(domain)

    -- reading from domains.txt and in testing

    local shell_execute = require "resty.auto-ssl.utils.shell_execute"
    local ngx_re = require "ngx.re"
    local result, err = shell_execute({"cat", "/home/user/domains.txt"})

    if err then
      ngx.log(ngx.ERR, "allow_domain cat error: ", err)
    else
      local domains = ngx_re.split(result["output"], "\n")
      for _, d in ipairs(domains) do
        if (domain == d) then
          return true
        end
      end
    end

    return false

    end)
    auto_ssl:set("renew_check_interval", 43200)
    auto_ssl:init()
  }

рд╡реНрдпрд╛рдЦреНрдпрд╛:

рдкреНрд░рддрд┐рдмрджреНрдз https://github.com/GUI/lua-resty-auto-ssl/commit/59758847b44981edfaf484d3a981deea82409332 рдиреЗ lua-resty-auto-ssl рдХреЗ рд▓рд┐рдП https://github.com/GUI/lua-shell-games рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдпрд╣рд╛рдВред

рдЗрд╕реЗ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ API shell_execute() рдмрджрд▓ рдЧрдпрд╛ (рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд╕рд╛рде рд╣реА рд╡рд╛рдкрд╕реА рдорд╛рди)ред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ Nginx рдореЗрдВ Lua рдХреЛрдб рдбреАрдмрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рджреБрдГрд╕реНрд╡рдкреНрди рд▓рдЧрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдХрд┐рд╕реА рджрд┐рди рдпрд╣ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдзрдиреНрдпрд╡рд╛рдж @andreasschrothред рдореИрдВ lua-resty-shell рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдореЗрд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╢реЙрдЯ рджреВрдВрдЧрд╛ (рд╕рдВрднрд╡рддрдГ рдХрд▓) рдФрд░ рд╡рд╛рдкрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ!

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @andreasschrothред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЖрдкрдиреЗ рдореЗрд░реЗ рд╕рд╢рд░реНрдд рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ; рдЬрд┐рддрдирд╛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЛрдЪрд╛ рдерд╛ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╢рд╛рдорд┐рд▓ред рд╣рд╛рдВ, nginx config рдореЗрдВ Lua рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рджрд░реНрджрдирд╛рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрдбрд╝реА рдорджрдж рд╕реЗ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ! рдЪреАрдпрд░реНрд╕! ;-)

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕