рдФрд░ рдлрд┐рд░, рдХреИрдкреНрдЪрд╛ рдпрд╛ рдирдЧрдиреЗрдХреНрд╕ рднреА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрдврд╝рд╛рдИ рдХрд░рдирд╛ рд╣реИ

рдкрд░рд┐рдЪрдп


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


рдПрдХ рдирдпрд╛ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рдпрд╣ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╛рдо рдХреЗ рдПрдХ рдЕрдиреНрдп рддрдВрддреНрд░ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдП, рдирдЧреНрдиреЗрдХреНрд╕ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рд╣реИ рдЬреЛ рдХрднреА-рдХрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдПрдХ рдкреНрд░рддрд┐рдлрд▓ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдорд╛рдирддреЗ рд╣реИрдВред


рд╕реНрдерд┐рддрд┐


рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдмреЙрдЯреНрд╕ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд░реАрдХреНрд╖рдг "рдХреИрдкреНрдЪрд╛" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдлрд╝рд╛рдЗрд▓ рдЬрдВрдк рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо рдмрдирд╛рддреЗ рд╕рдордп, рдПрдХ рдХреЛрдб рдФрд░ рдХреБрдЫ рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд╡рд┐ рдЕрдкрдиреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд╣рдЪрд╛рди рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА + рдХреЛрдб рдЬреЛрдбрд╝реА рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрдВрдбрд╛рд░рдг рднреА рд╣реИред


рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд░реНрдо рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдФрд░ рдХреЛрдб рдХреЗ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреИрдкреНрдЪрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдкрд░, рдлрд╝рд╛рдЗрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджреА рдЬрд╛рддреА рд╣реИ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд▓рд┐рдВрдХ рд▓рд┐рдВрдХ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рд▓рд┐рдВрдХ рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЛ рдмреИрдХрдПрдВрдб рджреНрд╡рд╛рд░рд╛ рднреА рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА + рдХреЛрдб рдЬреЛрдбрд╝реА рдХреЛ рднреА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╣реИ рдЬреЛ рдмреИрдХрдПрдВрдб рдХреЗ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддреА рд╣реИред


рд╕рдорд╕реНрдпрд╛рдУрдВ


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


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


рдирд┐рд░реНрдгрдп


рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ


рджрд░рдЕрд╕рд▓, рдХреИрдкреНрдЪрд╛ рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреБрдВрдЬреА рд╣реЛрддреА рд╣реИ, рдЬреЛ рдмреИрдХрдПрдВрдб рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдЫрд╡рд┐ рдореЗрдВ рдХреЛрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдЫрд╡рд┐ рдмрд╣реБрдд рдмрдбрд╝реА рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдмреЗрд╕ 64 рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╛ рддреЛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рджреЗрддреЗ рд╣реИрдВ:


<img src="data:image/png;base64,{{ IMAGE CODE BASE64 }}"> <input type="hidden" name="key" value="{{ KEY }}"> 

рдпрд╛ JSON:


 { ... "data": { "image": "data:image/png;base64,{{ IMAGE CODE BASE64 }}", "key": "{{ KEY }}" } } 

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝реЙрд░реНрдо рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкреЗрдЬ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SSI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░реЙрдХреНрд╕реА рдкрд░ nginx рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдореЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ:


 ssi on; 

рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдбрд╛рд▓реЗ рдЧрдП рдлреЙрд░реНрдо рдкреЗрдЬ рдХреЗ рдХреЛрдб рдореЗрдВ:


 ... <form action="download" method="get" ...> ... <!--#include virtual="/x/captcha/generate"--> ... </form> ... 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдХреИрдкреНрдЪрд╛ рдХреЛ рдЕрд▓рдЧ рд╕реНрдерд╛рди рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдореИрдк рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрд╡рдВрдЯрд┐рдд рдХреА рд╣реИред рдЕрдм рдЖрдк рдХреИрд╢рд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рд╛рдВ, рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд╢рд╛рдорд┐рд▓ (SSI) рддрдВрддреНрд░ рд▓рдЧрднрдЧ рднреВрд▓ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП nginx рдореЙрдбреНрдпреВрд▓ рд╕рднреА рдЬреАрд╡рд┐рдд рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬреАрд╡рдВрдд рд╣реИ рдФрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╡реИрд╕реЗ, рдЕрдЧрд░ рдкреНрд░реЙрдХреНрд╕реА_рдкрд╛рд╕_ рдХреИрд╢ рдкреВрд░реЗ рдкреГрд╖реНрда рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИ , рддреЛ рд╡рд░реНрдЪреБрдЕрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рдЗрдиреНрд╕рд░реНрдЯ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдХреИрдкреНрдЪрд╛ рдХреИрдкреНрдЪрд╛


рдХреИрд╢рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреБрдЫ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдФрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, $ request_id рдЪрд░ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ - рдпрд╣ рдХрд╛рдлреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдФрд░ рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдЗрд╕ рдЪрд░ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рднрд╛рдЧ рдЪреБрдирдХрд░, рдЖрдк рдХреИрд╢ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 16 ^ n рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ n - рдЪрд░ рд╕реЗ рд╣рдореЗрдВ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рддреЛ:


рдХреИрд╢ рдЬрд╝реЛрди рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВ:


 proxy_cache_path /cache/nginx/captcha levels=1:1 keys_zone=captcha:10m max_size=128m; 

рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╣рдо рдХреНрд░рдорд╢рдГ n рдХрд╛ рдХреНрдпрд╛ рдореВрд▓реНрдп рдЪреБрдирддреЗ рд╣реИрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ:


  • рд╕реНрддрд░ = 1: 2
  • max_size = 128 рдореА
  • рдХреА_рдЬрд╝реЛрди = рдХреИрдкреНрдЪрд╛: 10 рдореА

рддреЛ рдпрд╣ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рдерд╛ред рдЕрдЧрд▓рд╛, рд╣рдо рдХреИрд╢ рдХреБрдВрдЬреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:


 server { ... set $captcha_salt 'salt'; if ( $request_id ~* "(\w{4})$" ) { set $cache_key $1; } ... 

$ Captcha_salt рдЪрд░ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдореБрдЦ рдЪреМрд░рд╛рд╣реЛрдВ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ n рдХреЛ 4 рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ 16 ^ 4 рдХреИрд╢ рд╕реНрд▓реЙрдЯ, рдХреБрд▓ рдХреИрд╢ рдЖрдХрд╛рд░ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд▓реЙрдЯ рдХреЗ рд▓рд┐рдП рдФрд╕рддрди 2kb рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ ( рдЕрдзрд┐рдХрддрдо_ 128 = ), рдЬреЛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдЖрдкрдХреЛ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ рдмрдврд╝рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рдмрдирд╛рдирд╛


 location /x/captcha/generate { proxy_cache captcha; proxy_cache_key "$captcha_salt:$cache_key"; proxy_cache_valid 200 365d; proxy_cache_valid any 0s; proxy_set_header Host "captcha.service.domain.my"; proxy_pass http://captcha_upstream/?cache_key=$cache_key; } 

"рдЕрдЪреНрдЫрд╛" рдмреИрдХрдПрдВрдб рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмрд╛рдХреА рдХреЛ рдХреИрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рд╣рд╛рдВ, рдЖрдк рддреБрд░рдВрдд рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рдореЗрдВ рдХреИрдкреНрдЪрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╡реИрд╕реЗ, рдПрдХ рд╕рдорд╛рди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрджреНрдо рдЧрддрд┐рд╢реАрд▓рддрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ F5 рджрдмрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ "рдЪрд┐рддреНрд░" рдЙрд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмреИрдХреЗрдВрдб рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рднрд░рд╛ рд╣реБрдЖ рдирд╣реАрдВ рд╣реИред

рд╣рдореЗрдВ рдлреЙрд░реНрдо рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп рд╕рдВрдмрдВрдзрд┐рдд рдХреИрд╢ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреИрдХрдПрдВрдб рдХреЛ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдмреАрдЪ, рдХреИрд╢_рдХреА рд╡реИрд▓реНрдпреВ рдХреЛ рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП рдлрд╝реАрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкреНрд░реЙрдХреНрд╕реА_рдХреИрд╢_рдкреБрд░реЗрдЬ рдирд┐рд░реНрджреЗрд╢ рдХреЗрд╡рд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ cache_purge рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЬреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рддреЛ, рдХреИрд╢ рдлреНрд▓рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди :


 location /x/captcha/cache/purge { internal; proxy_cache_purge captcha "$captcha_salt:$arg_cache_key"; } 

рдЗрд╕рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдЗрд╕ рд╕реНрдерд╛рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рд╣рдо http_mirror_module рдореЙрдбреНрдпреВрд▓ рдХреЗ рджрд░реНрдкрдг рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:


рдпрд╣реА рд╣реИ, рд╣рдо рдЪрд░ $ arg_cache_key рдХреА рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдХреИрд╢ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдлреЙрд░реНрдо рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдмрд╛рдХреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдХрд╛рдВрдЯреЗрджрд╛рд░ рдорд╛рд░реНрдЧ


рдпрд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдПрдХ рд╡рд┐рд╖рдп рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛: рдХреИрдкреНрдЪрд╛ рдХреЛрдб рдХреЗ рд╕рддреНрдпрд╛рдкрди рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреА рд╡рд╛рдкрд╕реА рдХреЛ рдХреИрд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЧрд▓рдд рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдХреИрд╢ рдХреЛ рдХреИрд╕реЗ рдзреЛрдпрд╛ рдЬрд╛рдПред рдлрд┐рд░ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рдкрд░ рдЙрддрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рд╣рдореЗрдВ рдЕрдм рдмреИрдХрдПрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ ... рдмрд┐рд▓реНрдХреБрд▓ ... рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдм рдХреБрдЫ рд╣реИред


рдХреИрдкреНрдЪрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдЬреЛ рдХрд╛рд░реНрдп рд░рд╣рд╛, рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдВрдЬреА + рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЬреЛрдбрд╝реА рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдирд┐рдХрд╛рд▓ рд░рд╣рд╛ рд╣реИред рдХреБрдВрдЬреА + рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде md5 рд░рд╛рд╢рд┐ рдХреА рдПрдХ рд╕рд░рд▓ рддреБрд▓рдирд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ: http_secure_link_module ред рдпрд╣реА рд╣реИ, рдХреБрдВрдЬреА рдХреЛ рдПрдХ рд╕реВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


key = md5_baseurl( salt + code )

рдЙрд╕реА рд╕рдордп, рдХреИрд╢ рд╕реНрд▓реЙрдЯ (рдХреИрд╢ рдХреА) рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╣рдо рдЗрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:


key = md5_baseurl( salt + code + cache_key )

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирдордХ рд╣реИ - рдпрд╣ $ рдХреИрдкреНрдЪрд╛_рд╕рд╛рд▓реНрдЯ рдЪрд░ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдЖрдпрд╛), рд▓реЗрдХрд┐рди рдмреИрдХреЗрдВрдб рдФрд░ рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рджреЛ рдЬрдЧрд╣реЛрдВ рдкрд░ рдирдордХ рд░рдЦрдирд╛ рдмреБрд░рд╛ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдпрд╣ рдХрд░рддреЗ рд╣реИрдВ:


 location /x/captcha/salt { allow {{ captcha backend IPs }}; deny all; return 200 "$captcha_salt"; } 

рдФрд░ рдмреИрдХрдПрдВрдб рдХреЛ рдирдордХ рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рдЬрд╛рдиреЗ рджреЗрдВред


рдкреНрд░рд╢реНрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рде рд░рд╣рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдПрдХ рдХреБрдВрдЬреА + рдХреЛрдб рдЬреЛрдбрд╝реА рдЬрдорд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреИрд╢рд┐рдВрдЧ рддрдВрддреНрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ cache_purge рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреЛ рдорд┐рд░рд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд╣реИред рдФрд░ рд╣рд╛рдБ, рдХрд┐ рдХреИрдкреНрдЪрд╛ рдХреБрдВрдЬреА рдмрдирд╛рддреЗ рд╕рдордп рдХреИрд╢ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред


рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ


рд╕реНрдерд╛рди рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдлрд┐рд░ рд╕реЗ рдХрд░реЗрдВ:


 location /download { proxy_set_header Host $host; proxy_set_header X-Context download; proxy_set_header X-File-Name $arg_filename; proxy_set_header X-Key $arg_key; proxy_set_header X-Code $arg_code; proxy_set_header X-Cache-Key $arg_cache_key; proxy_pass http://127.0.0.1/x/captcha/check; proxy_intercept_errors on; error_page 403 404 = /download/fail; } 

рдореИрдВ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╣рдо рдХреИрдкреНрдЪрд╛ рдЪреЗрдХ рдХреЗ рд╕реНрдерд╛рдиреАрдп рд╕реНрдерд╛рди рдкрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╕рдВрджрд░реНрдн = рдбрд╛рдЙрдирд▓реЛрдб рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╣рдо рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░ рд╕рдХреЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣реИрдВрдбрд▓рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИ:


  • 403 - рдХреЛрдб рд╕рддреНрдпрд╛рдкрди рддреНрд░реБрдЯрд┐ред рджрд░рдЕрд╕рд▓, рдЗрд╕рд▓рд┐рдП, рдкреНрд░реЙрдХреНрд╕реА_рдбреЗрдирд╕реЗрдкреНрдЯ_рд░рд┐рдпрд░реНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд╛рди рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • 404 - рдХреИрд╢ рд╕рдлрд╛рдИ рддреНрд░реБрдЯрд┐ред рдЕрдЧрд░ рдХреИрд╢ рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рддреЛ рдХреИрд╢_рдкреБрд░реЗрдЬ рдореЙрдбреНрдпреВрд▓ 404 рд╣реИред
  • 200 + рдПрдХреНрд╕реЗрд▓-рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ - рдлрд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХреЗ рд╕реНрдерд╛рди рдкрд░, рдЕрдЧрд░ рдХреИрдкреНрдЪрд╛ рдЪреЗрдХ рдареАрдХ рдЪрд▓рд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХреНрд╕-рдПрдХреНрд╕реЗрд▓-рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ: / рд╕реНрдЯреЛрд░ / рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧрд╛

рдЕрдЧрд░ error_page 2XX рдХреЛрдб рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдЗрд╕реЗ рдЕрдХреЗрд▓реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рдЖрдкрдХреЛ рдПрдХреНрд╕реЗрд▓-рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк 403 рдФрд░ 404 рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд╛рди рддреНрд░реБрдЯрд┐ рдХрд░рдирд╛:


 location /download/fail { internal; return 200 "FAIL DOWNLOAD"; } 

рдЖрдк рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрд╕ рд╕реНрдерд╛рди рдореЗрдВ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рдо рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд╛ рд╕реНрдерд╛рди рдмрдирд╛рддреЗ рд╣реИрдВ:


 location /store/file { internal; add_header Content-Disposition "attachment; filename=\"$arg_filename\""; alias /spool/tmp/; try_files $arg_filename =404; } 

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдХреЗрд╡рд▓ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдЗрд╕реЗ рдЬрд░реВрд░рддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреВрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рд╛рдЗрд▓ рднрдВрдбрд╛рд░рдг рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред


рдХреИрдкреНрдЪрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рд╕реНрдерд╛рди рд╣реИ :


 location /x/captcha/check { allow 127.0.0.1; deny all; secure_link_md5 "$captcha_salt$http_x_code$http_x_cache_key"; secure_link $http_x_key; if ($secure_link = "") { return 403 "FAIL CHECK CODE"; } proxy_set_header Host $host; proxy_pass http://127.0.0.1/x/captcha/purge; } 

рдЗрд╕рдХреЗ 2 рдмреНрд▓реЙрдХ рд╣реИрдВ: рдХреЛрдб рд╕рддреНрдпрд╛рдкрди рдФрд░ рдЖрдЧреЗ рдХреИрд╢ рдХреЛ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЙрд╕реА рд╕рдордп, рдпрджрд┐ рдХреЛрдб рдЪреЗрдХ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ, рддреЛ рддреБрд░рдВрдд 403 рд╡рд╛рдкрд╕ рдХрд░реЗрдВ (рдкрд╛рда рдорд╣рддреНрд╡рд╣реАрди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред


/ X / captcha / purx рдХреЗ рд▓рд┐рдП 2 рдЙрддреНрддрд░ рд╡рд┐рдХрд▓реНрдк рд▓реМрдЯрд╛рдПрдЧрд╛:


  • 200 + рдПрдХреНрд╕реЗрд▓-рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ - рд╕рдлрд▓ рдХреИрд╢ рдлреНрд▓рд╢рд┐рдВрдЧ рдкрд░ред рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдПрдХреНрд╕-рдПрдХреНрд╕реЗрд▓-рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдореЗрдВ рд╣реЛрдЧрд╛: / x / рдХреИрдкреНрдЪрд╛ / рдЪреЗрдХ / рдУрдХреЗ ;
  • 404 - рдЕрдЧрд░ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рдерд╛ред рдпрд╣ рдкрд░рд┐рдгрд╛рдо / рдбрд╛рдЙрдирд▓реЛрдб рд╕реЗ рдКрдкрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ error_page рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛;

/ X / captcha / purge рд╕реЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╣реИрдВрдбрд▓рд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ / download / / x / captcha / check рдХреЗ рдмреАрдЪ рдирд╣реАрдВред рджреВрд╕рд░реЗ, рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдирд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред


рдЖрдЗрдП рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИрдВрдбрд▓рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ:


 location /x/captcha/check/ok { internal; if ( $http_x_context = 'download' ) { add_header X-Accel-Redirect "/store/file?filename=$http_x_file_name"; } ... return 200 "OK"; } 

рджрд░рдЕрд╕рд▓, рдЪрд░ $ http_x_context ( рдПрдХреНрд╕-рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рд╣реИрдбрд░) рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХреНрд╕реЗрд▓-рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ / x / рдХреИрдкреНрдЪрд╛ / рдЪреЗрдХ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЬрд╡рд╛рдм рджреЗрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рднреА рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:


 location /x/captcha/purge { allow 127.0.0.1; deny all; proxy_cache_purge captcha "$http_x_cache_key"; add_header X-Accel-Redirect "/x/captcha/check/ok"; } 

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╕рдм, рдЕрдВрдд рдореЗрдВ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд nginx рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд┐рд▓рд╛:


 proxy_cache_path /cache/nginx/captcha levels=1:1 keys_zone=captcha:10m max_size=128m; server { ... location /download { proxy_set_header Host $host; proxy_set_header X-Context download; proxy_set_header X-File-Name $arg_filename; proxy_set_header X-Key $arg_key; proxy_set_header X-Code $arg_code; proxy_set_header X-Cache-Key $arg_cache_key; proxy_pass http://127.0.0.1/x/captcha/check; proxy_intercept_errors on; error_page 403 404 = /download/fail; } location /download/fail { internal; return 200 "FAIL DOWNLOAD"; } location /store/file { internal; add_header Content-Disposition "attachment; filename=\"$arg_filename\""; alias /spool/tmp/; try_files $arg_filename =404; } ... set $captcha_salt 'salt'; if ( $request_id ~* "(\w{4})$" ) { set $cache_key $1; } location /x/captcha/generate { proxy_cache captcha; proxy_cache_key "$captcha_salt:$cache_key"; proxy_cache_valid 200 365d; proxy_cache_valid any 0s; proxy_set_header Host "captcha.service.domain.my"; proxy_pass http://captcha_upstream/?cache_key=$cache_key; } location /x/captcha/salt { allow {{ captcha backend IPs }}; deny all; return 200 "$captcha_salt"; } location /x/captcha/check { allow 127.0.0.1; deny all; secure_link_md5 "$captcha_salt$http_x_code$http_x_cache_key"; secure_link $http_x_key; if ($secure_link = "") { return 403 "FAIL CHECK CODE"; } proxy_set_header Host $host; proxy_pass http://127.0.0.1/x/captcha/purge; } location /x/captcha/check/ok { internal; if ( $http_x_context = 'download' ) { add_header X-Accel-Redirect "/store/file?filename=$http_x_file_name"; } ... return 200 "OK"; } location /x/captcha/purge { allow 127.0.0.1; deny all; proxy_cache_purge captcha "$http_x_cache_key"; add_header X-Accel-Redirect "/x/captcha/check/ok"; } } 

рдЖрдкрдХреЛ рдХрд┐рди рдмрд╛рддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:

  • Accel-Redirect рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ 2XX рд╣реЛред рд╕рдЪ рд╣реИ, рдЕрдлрд╕реЛрд╕, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣реАрдВ рднреА рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдиреЗрдЧреНрдиреЗрдХреНрд╕ рдЕрдиреБрдпрд╛рдпреА рдЕрд╕рд╣рдордд рд╣реИрдВ;
  • рдирд┐рдЬреА рд╕реНрдерд╛рди рдХрд░реАрдм рдпрд╛ рддреЛ 127.0.0.1 рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ; рдЗрдирдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рд╕рднреА; рдпрд╛ рддреЛ рдЖрдВрддрд░рд┐рдХ; , рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рд╕реНрдерд╛рди рдХреЛ рдкреНрд░реЙрдХреНрд╕реА_рдкрд╛рд╕ , рдпрд╛ рдПрдХреНрд╕реЗрд▓-рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ ;
  • рдХреИрдкреНрдЪрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ / x / capcha / ... рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрд╕реИрд╕ рд╕рд░реНрд╡рд┐рд╕ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ;

рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХрд╛рдо рдХрд╛ рдПрдХ рдЪрд┐рддреНрд░ рднреА рдмрдирд╛рдпрд╛:


рдЫрд╡рд┐

рд╕рд╛рд░рд╛рдВрд╢


рдирддреАрдЬрддрди, рдмреИрдХрдПрдВрдб рд╕реЗ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЫрд╡рд┐ рдФрд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Nginx рдЖрд░рд╛рдо рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпреЗ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рддрд╛рд░реНрдХрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдпрд╣ рдХрд╛рдо рдХреЛ рдЧрддрд┐ рджреЗрдЧрд╛ рдФрд░ рдмреИрдХрдПрдВрдб рдкрд░ рд▓реЛрдб рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдордиреЗ рдХрд┐рд╕реА рднреА рдЕрд╕рд╛рдорд╛рдиреНрдп рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓:


  • proxy_cache;
  • рдПрдХреНрд╕реЗрд▓-рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди;
  • error_page;
  • secure_link;
  • cache_purge;

рдмрд╛рдХреА рддрд╛рд░реНрдХрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХрд╛ рд╕рд╣реА рдирд┐рд░реНрдорд╛рдг рд╣реИред


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

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


All Articles