рдирдЧрдиреЗрдХреНрд╕ рдореЗрдВ LUA: рдЗрдирд▓рд╛рдЗрди php рд╕реНрдЯрд╛рдЗрд▓ рдиреВрдбрд▓ рдХреЛрдб


рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рди рд▓реЗрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдПрдХ рдЕрд╕рд╛рдзрд╛рд░рдг рдордЬреЗрджрд╛рд░ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреЛрд╕реНрдЯ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ php рдкрд░ рдореБрд╕реНрдХрд░рд╛рд╣рдЯ, рдЬреЛ рдореЗрд░реЗ рдореБрдЦреНрдп рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА PHP рдбреЗрд╡рд▓рдкрд░реНрд╕ (рдореЗрд░реЗ рд╕рд╣рд┐рдд) рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЙрд╕ рджреМрд░ рд╕реЗ рдЧреБрдЬрд░реЗ рдЬрдм рдХреЛрдб html рдФрд░ php рдХрд╛ рдПрдХ рднрдпрд╛рдирдХ рдорд┐рд╢реНрд░рдг рд╣реИ, рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ crammedред рдФрд░ рдпрд╣ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдиреВрдбрд▓реНрд╕ / рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдореЗрдВ рдкреВрд░реЗ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред
рдФрд░ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкреНрд░реИрд▓ рдХреЗ рдкрд╣рд▓реЗ рддрдХ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдирдЧреАрдиреЗ рдХреЗ рддрд╣рдд рд▓реБрдЖ рдкрд░ред рдЬреИрд╕рд╛ рдЪрд┐рддреНрд░ рдореЗрдВ рд╣реИред

рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ( рд▓рд┐рдВрдХ рдЬреЛ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЬрд╡рд╛рдм рд╣реИ ):
<?lml tmpl:include('sugar') ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title> <?lml print(ngx.utctime()) ?></title> </head> <body> <?lml local alc = require('lib.alc') ?> , <?lml print(esc(req:get('name', 'traveler')), '/', ngx.var.remote_addr) ?>.   <?lml print(alc:inc('cnt')) ?>     . <?lml local hdrs = {} for k,v in pairs(ngx.req.get_headers()) do table.insert(hdrs, '<tr><td style="font-weight:bold;">'..esc(k)..'</td><td>'..esc(v)..'</td></tr>') end ?> <h3> <?lml print(ngx.req.get_method()) ?>   <?lml print(esc(ngx.var.request_uri)) ?></h3> <table><?lml print(hdrs) ?></table> <?lml include('footer') ?> 

рдпрд╛рдиреА рдиреВрдбрд▓реНрд╕ рдореЗрдВ рдкреВрд░реНрдг рд▓реБрдЖред рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:


рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред рдХреМрди рдХреЗрд╡рд▓ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ - рдЧрд┐рдердм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛, рднрд▓реЗ рд╣реА рд╡рд╣рд╛рдВ рдХреЛрдб рдФрд░ рдмрд┐рд▓реНрд▓реА рд░реЛрдПред

рд╕рднреА рдХрд╛рдо рдирд┐рдореНрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВ:


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, nginx рдХреЛ рд╕реНрд╡рдпрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:
 http { lua_shared_dict lml_shared 10m; lua_package_path '/path/to/lml/?.lua;;'; } #  location    ,  ,  location /lml { #      index ( ,   /path/to/lml/tmpl/index.lml) content_by_lua ' local tmpl = require "lib.tmpl" tmpl:set_root("/path/to/lml/tmpl/") tmpl:include("index") '; } 


рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИ: <? Lml;> рдЯреИрдЧ рдХреЗ рдмрд╛рд╣рд░ рд╕рднреА рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ stdout рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкреНрд░рд┐рдВрдЯ (TEXT), рдФрд░ рдЯреИрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╡реЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЯреИрдЧ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдмрд╛рд╣рд░ рдлреЗрдВрдХ рд░рд╣реЗ рд╣реИрдВред рдкреНрд░рд┐рдВрдЯ рдореЗрдВ HTML рдкрд╛рда рдХреЛ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рд╡рд░реНрдгреЛрдВ рд╕реЗ рдмрдЪрдирд╛ рди рдкрдбрд╝реЗ:
 stdout:print([[Hello world ]]) 

рд▓реЗрдХрд┐рди, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдХрд┐рд╕реА рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдЕрдВрджрд░ рд╢рд╛рдмреНрджрд┐рдХ рд╕реАрдорд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рд╕рдВрднрд╡ рд╣реИ (рд╣реИрд▓реЛ [[<? lml?>]] рд╡рд░реНрд▓реНрдб), рддреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдПрдХ рдмрд╣реБ-рд▓рд╛рдЗрди рд╢рд╛рдмреНрджрд┐рдХ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ "рдореБрдХреНрдд" рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реИ:
 print([[...]]) print([=[...]=]) print([==[...]==]) ... 


Php рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛, рдмрд╛рдпрдЯреЗрдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рди, рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рд╕реЗ рдХреИрд╢ рдУрдкреЛрдб рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдХрд▓рд╛рдкреВрд░реНрд╡рдХ ALC ( рд╡реИрдХрд▓реНрдкрд┐рдХ Lua Cache ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреИрд╢рд┐рдВрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдпрд╣ рдПрдХ рдмреЗрд╣рдж рдЫреАрди рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ! рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдордд рд╕рдордЭреЛ):
 function M:compile_string(str, filename) local cache_key = 'tmpl_bytecode:' .. filename local bytecode, created_at = cache:get(cache_key) local lua_func = nil if not bytecode then locked = cache:add(key_lock, 1, key_lock_ttl) bytecode, created_at = cache:get(cache_key) if not bytecode then if type(str) == 'function' then str = str(filename) end lua_func = assert(loadstring(str, filename)) bytecode = assert(string.dump(lua_func)) end if locked then if lua_func and bytecode then cache:set(cache_key, bytecode, 0, ngx.now()) end cache:delete(key_lock) end end if (not lua_func) and bytecode then lua_func = loadstring(bytecode, filename) end return lua_func end 

рд▓реБрдЖ рдХреЛрдб рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдЙрдЯрдкреБрдЯ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдФрд░ рд░реИрдо рдореЗрдВ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╛рдпрдЯреЗрдХреЛрдб рд╣реИред

рддрджрдиреБрд╕рд╛рд░, рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдЦрд┐рд╕рдХрд╛рдХрд░ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
 local function _include_string(str, filename) local lua_func = alc:compile_string(str, filename) if lua_func then lua_func() end end function M:include_string(str, filename) local succ, err = pcall(_include_string, str, filename) if not succ then ngx.status = ngx.HTTP_INTERNAL_SERVER_ERROR local errstr = 'Error (' .. filename .. '): ' .. err ngx.log(ngx.ERR, errstr) ngx.say(errstr) return ngx.exit(ngx.HTTP_OK) end return succ end --       (   ,       location nginx'): function M:include(name) local path = root_path .. name .. file_ext M:include_string( function(filename) local str = assert(file:read_all(filename)) return assert(parse_tmpl(str, filename)) end, path ) end 

рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ alc рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛: рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрдЬрд╛рдп compile_string рдЖрдкрдХреЛ рдбрд┐рд╕реНрдХ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдмрд╛рдЗрдЯрдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рдХреИрд╢ рдореЗрдВ рд╣реИред рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рд╣реА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЖрд▓рд╕реА рдЖрд╕реНрдердЧрд┐рдд рд▓реЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЫреЛрдЯреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ: lib.tmpl рдореЗрдВ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди, lib.alc рдореЗрдВ рдПрдХ рдХреИрд╢, lib.stdout рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдмрдлрд░рд┐рдВрдЧ, рдЖрджрд┐ред рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ рд╕реНрдкрд╖реНрдЯ рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдкреВрд░реНрдг рдирд╛рдо рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
 --   example.lml <?lml local stdout = require('lib.stdout') local html = require('lib.html') local tmpl = require('lib.tmpl') tmpl:include('header') stdout:print(html:escape(ngx.var.request_uri)) ?> 


рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рдЪреАрдиреА" рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рдЕрдирд┐рд╡рд╛рд░реНрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рдХреЛрдб рдореЗрдВ рдкреАрдврд╝реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ:
 local required_libs = {'stdout', 'html', 'req', 'tmpl'} -- tmpl_chunks   lua ,   lml  --         for _,l in ipairs(required_libs) do table.insert(tmpl_chunks, 1, 'local '..l..' = require("lib.'..l..'");') end 


рдЕрдм рдЗрди рдореЙрдбреНрдпреВрд▓реЛрдВ рдХреЛ рддреБрд░рдВрдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 --   example.lml <?lml tmpl:include('header') stdout:print(html:escape(ngx.var.request_uri)) ?> 


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдЯрдбрдЖрдЙрдЯ: рдкреНрд░рд┐рдВрдЯ, рдЯреАрдПрдордкреАрдПрд▓: рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдПрдЪрдЯреАрдПрдордПрд▓: рдмрдЪ, рдХреЛ рднреА рдореАрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрд▓рдПрдордПрд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕реНрддрд░ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
 -- sugar.lml <?lml function include(...) tmpl:include(...) end function print(...) stdout:print(...) end function esc(...) return html:escape(...) end ?> --   example.lml <?lml tmpl:include('sugar') include('header') print(esc(ngx.var.request_uri)) ?> 

рдпрд╣ рд╕рдорд╛рдзрд╛рди рдПрдХ рджреЛрдзрд╛рд░реА рддрд▓рд╡рд╛рд░ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рдХреЛ php рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рдХрд░реАрдм рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЕрдВрдд рдореЗрдВ, Athlon II рдХреЗ рд╕рд╛рде рд╕рд░рд▓рддрдо "рд╣реЛрдо рд╕рд░реНрд╡рд░" рдкрд░ php-fpm + apc рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕ рдмрд╛рдЗрдХ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдЧреЛрд▓рд╛рдХрд╛рд░ рдкрд░реАрдХреНрд╖рдг, рдПрдХ рд▓рд┐рдВрдХ рдЬреЛ рдкреЛрд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рддреБрд▓рдирд╛ рдЕрдзрд┐рдХрддрдо рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде 3 рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдПрдХ рд╣реА рдЖрджрд┐рдо php рдХреЛрдб рдХреЗ рд╕рд╛рде рд╣реБрдИред
рдЕрдм рддрдХ рдореИрдВрдиреЗ 100Mb LAN рдкрд░ рдШреЗрд░рд╛рдмрдВрджреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЧреНрд░рд┐рдб рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдиреЗ рдЖрд░рд╛рдо рдХрд┐рдпрд╛ред
рдШреЗрд░рд╛рдмрдВрджреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ -XX -t300S -b URL рдиреЗ рдирд┐рдореНрди рдЯреНрд░рд╛рдВрд╕ / рд╕реЗрдХрдВрдб рджрд┐рдЦрд╛рдпрд╛:
-c10-c100-c200-c500
php-рдПрдл рдкреА рдПрдо33503150 cpu рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛http 502 *http 502 *
рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдПрд▓.рдПрдо.рдПрд▓.рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛6950рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛
opshaker рдХреЗ рд╕рд╛рде рдПрд▓.рдПрдо.рдПрд▓.70008100 рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛8200 рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛7500 рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛

* рдмрд▓реНрдХ рдХрдиреЗрдХреНрдЯ () рдХреЛ рдпреВрдирд┐рдХреНрд╕ рдореЗрдВ: / var / run / php-fpm - *ред sock рд╡рд┐рдлрд▓ (11: рд╕рдВрд╕рд╛рдзрди рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрдиреБрдкрд▓рдмреНрдз)

рдпрд╣ рдЗрддрдирд╛ рднрдпрд╛рдирдХ рдирд╣реАрдВ рд▓рдЧрддрд╛ред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдЬреАрдердм рдХрд╛ рд▓рд┐рдВрдХ , рдЕрдЧрд░ рдХреЛрдИ рдЪреВрдХ рдЧрдпрд╛ рдпрд╛ рдЕрдВрдд рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ, рд▓реЗрдХрд┐рди рд╡рд┐рд╡рд░рдг рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдореИрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЙрдХрд╕рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ :)

Source: https://habr.com/ru/post/In217773/


All Articles