nginx рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕

рдирдорд╕реНрдХрд╛рд░ рд╕рд╛рдерд┐рдпреЛрдВ. рдореЗрд░реЗ рд▓рдбрд╝рд╛рдХреВ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реБрдВрджрд░ nginx 2006 рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рд╢рд╛рд╕рди рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬрдорд╛ рдХрд┐рдП рд╣реИрдВред рдореИрдВрдиреЗ nginx рдХреА рдмрд╣реБрдд рдкреНрд░рд╢рдВрд╕рд╛ рдХреА рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╣рдм рдкрд░ рдПрдХ nginx рд╣рдм рднреА рд╢реБрд░реВ рдХрд┐рдпрд╛, рджрд┐рдЦрд╛рд╡рд╛ m/
рджреЛрд╕реНрддреЛрдВ рдиреЗ рдореБрдЭрд╕реЗ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд╛рд╕ рдлрд╝рд╛рд░реНрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореБрдЭреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╛рдж рдЖрдИ nginxconfig.io, рдЬреЛ рдЕрд▓рдорд╛рд░рд┐рдпреЛрдВ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрд┐рдЦреЗрд░рддрд╛ рд╣реИ рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛, рдХреНрдпреЛрдВ рдирд╣реАрдВ? рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЗрд╕ рддрдереНрдп рд╕реЗ рдХреНрд░реЛрдзрд┐рдд рдерд╛ рдХрд┐ nginxconfig рдореБрдЭреЗ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдореБрдЭреЗ wget/fetch/curl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реАрдзреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджрд┐рдП рдмрд┐рдирд╛ред рдХреНрдпрд╛ рдмрдХрд╡рд╛рд╕ рд╣реИ, рдореБрдЭреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдореБрдЭреЗ рдХрдВрд╕реЛрд▓ рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЧреБрд╕реНрд╕реЗ рдореЗрдВ, рдореИрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдЧрд╣рд░рд╛рдИ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрдердм рдкрд░ рдЧрдпрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдЗрд╕рдХрд╛ рдХрд╛рдВрдЯрд╛ рдирд┐рдХрд▓ рдЧрдпрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╣реБрдЖред рдпрджрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рди рд╣реЛрддрд╛ рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ ЁЯШЙ

nginx рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕

рдмреЗрд╢рдХ, рд╕реНрд░реЛрддреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреНрд░реЛрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХрд╣рд╛рдВ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ "рдмреНрд▓реЙрдм:" рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкрддрд╛ рдореЗрд░рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЙрдлрд╝ред рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдХреБрдЫ рднреА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рдм js рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рдЬрд╝рд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡ рдХреНрд▓рд╛рдЗрдВрдЯ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рд╣реА рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗред рдЦреВрдмрд╕реВрд░рддреА рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ nginxconfig.io рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ HTML рдкреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ narad.ru рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛) рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдордЬреЗрджрд╛рд░ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд┐рд╕ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ 2019 рдореЗрдВ nc... рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ? рдореИрдВрдиреЗ рдкрд░рд┐рдгрд╛рдореА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реАрдзреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдХрд╛рд░реНрдп рдЗрд╕ рддрдереНрдп рд╕реЗ рдЬрдЯрд┐рд▓ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рд╢рд░реНрдд рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмреИрдХ-рдПрдВрдб рдХреЗ рд╢реБрджреНрдз рдлреНрд░рдВрдЯ-рдПрдВрдб рдмрдиреА рд░рд╣рдиреА рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ, рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдиреЛрдбрдЬ рдХреЛ рдЦреАрдВрдЪрдирд╛ рдФрд░ рд╕реАрдзреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рджрд░рдЕрд╕рд▓, рдЬреНрдпрд╛рджрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдереЗ. рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдмрд╛рдд рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдИред рд╣рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХрдВрд╕реЛрд▓ рдкрд░ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдореА рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХрдИ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рдЬрди рдХрд╛рдлреА рдХрдо рдерд╛, рд╡рд╕реНрддреБрддрдГ рдХреБрдЫ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯред рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдпрд╣ рдерд╛ рдХрд┐ рдЙрддреНрдкрдиреНрди рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдмреЗрд╕ 64 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдкрд░ рдмрдлрд░ рдореЗрдВ рдлреЗрдВрдХ рджреЗрдВ

echo 'base64string' | base64 --decode > config.zip

рд╣рдо рдпрд╣реА рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ.

nginxconfig.io AngularJS рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВ рдХрд▓реНрдкрдирд╛ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдпрджрд┐ рд▓реЗрдЦрдХ рдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ js рдлреНрд░реЗрдорд╡рд░реНрдХ рдирд╣реАрдВ рдЪреБрдирд╛ рд╣реЛрддрд╛ рддреЛ рдХрд┐рддрдиреЗ рдХрд┐рд▓реЛрдореАрдЯрд░ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреАред рд▓реЗрдХрд┐рди рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ VueJS рдореЗрдВ рдпрд╣ рд╕рдм рдХрд┐рддрдирд╛ рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рд╣рдо рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рджреЗрдЦрддреЗ рд╣реИрдВ:

$scope.downloadZip = function() {
	var zip = new JSZip();

	var sourceCodes = $window.document.querySelectorAll('main .file .code.source');

	for (var i = 0; i < sourceCodes.length; i++) {
		var sourceCode = sourceCodes[i];

		var name	= sourceCode.dataset.filename;
		var content	= sourceCode.children[0].children[0].innerText;

		if (!$scope.isSymlink() && name.match(/^sites-available//)) {
			name = name.replace(/^sites-available//, 'sites-enabled/');
		}

		zip.file(name, content);

		if (name.match(/^sites-available//)) {
			zip.file(name.replace(/^sites-available//, 'sites-enabled/'), '../' + name, {
				unixPermissions: parseInt('120755', 8),
			});
		}
	}

	zip.generateAsync({
		type: 'blob',
		platform: 'UNIX',
	}).then(function(content) {
		saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
	});

	gtag('event', $scope.getDomains().join(','), {
		event_category: 'download_zip',
	});
};

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ jszip рдПрдХ рдЬрд╝рд┐рдк рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдЬрд╣рд╛рдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЗрдВ рд░рдЦреА рдЬрд╛рддреА рд╣реИрдВред рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреЗрдПрд╕ рдЗрд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдлрд╝реАрдб рдХрд░рддрд╛ рд╣реИ рдлрд╝рд╛рдЗрд▓рд╕реЗрд╡рд░.рдЬреЗ.рдПрд╕:

saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');

рдЬрд╣рд╛рдВ рд╕рд╛рдордЧреНрд░реА рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдкрд░рд┐рдгрд╛рдореА рдмреНрд▓реЙрдм рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред

рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдмрд╕ рдЗрд╕рдХреЗ рдЖрдЧреЗ рдПрдХ рдФрд░ рдмрдЯрди рдЬреЛрдбрд╝рдирд╛ рдерд╛ рдФрд░ рдЬрдм рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛, рддреЛ рдореИрдВ рдкрд░рд┐рдгрд╛рдореА рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рд╣реЗрдЬ рдирд╣реАрдВ рдкрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрд╕рд╕реЗ рдмреЗрд╕ 64 рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реВрдВрдЧрд╛ред рдереЛрдбрд╝рд╛ рдЗрдзрд░-рдЙрдзрд░ рднрдЯрдХрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рдбрд╛рдЙрдирд▓реЛрдбрдЬрд╝рд┐рдк рдХреЗ рдмрдЬрд╛рдп 2 рд╡рд┐рдзрд┐рдпрд╛рдБ рдорд┐рд▓реАрдВ:

$scope.downloadZip = function() {
	generateZip(function (content) {
		saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
	});

	gtag('event', $scope.getDomains().join(','), {
		event_category: 'download_zip',
	});
};
$scope.downloadBase64 = function() {
	generateZip(function (content) {
		var reader = new FileReader();
		reader.readAsDataURL(content);
		reader.onloadend = function() {
			var base64 = reader.result.replace(/^data:.+;base64,/, '');
			// ╨▓ ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╨╛╨╣ base64 ╨║╨░╨║ ╤А╨░╨╖ ╨╜╤Г╨╢╨╜╤Л╨╣ ╨╝╨╜╨╡ zip ╨░╤А╤Е╨╕╨▓ ╨▓ ╨▓╨╕╨┤╨╡ base64 ╤Б╤В╤А╨╛╨║╨╕
		}
	});

	gtag('event', $scope.getDomains().join(','), {
		event_category: 'download_base64',
	});
};

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдореИрдВрдиреЗ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреА рдкреАрдврд╝реА рдХреЛ рдирд┐рдЬреА рдЬреЗрдирд░реЗрдЯрдЬрд╝рд┐рдк рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, рдЗрддреНрдпрд╛рджрд┐ред рдпрд╣ AngularJS рд╣реИ, рдФрд░ рд▓реЗрдЦрдХ рд╕реНрд╡рдпрдВ рдХреЙрд▓рдмреИрдХ рдкрд░ рдХрд╛рдпрдо рд╣реИ рдФрд░ рд╡рд╛рджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдбрд╛рдЙрдирд▓реЛрдбрдЬрд╝рд┐рдк рдиреЗ рдЕрднреА рднреА рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рдПрдЬрд╝ рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ рдбрд╛рдЙрдирд▓реЛрдбрдмреЗрд╕64 рдиреЗ рдХреБрдЫ рдЕрд▓рдЧ рдХрд┐рдпрд╛ред рд╣рдо рдПрдХ FileReader рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ html5 рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдпрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рд╣реИ рдЙрдкрд▓рдмреНрдз рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреЗ рд▓рд┐рдПред рдЬреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдмреНрд▓реЙрдм рд╕реЗ рдмреЗрд╕64 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдпреВрдБ рдХрд╣реЗрдВ рдХрд┐ рдпрд╣ рдПрдХ DataURL рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ DataURL рдореЗрдВ рд╡рд╣реА рдореМрдЬреВрдж рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд┐рдВрдЧреЛ, рдЬрдм рдореИрдВрдиреЗ рдпрд╣ рд╕рдм рдмрдлрд░ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рддреЛ рдПрдХ рдЫреЛрдЯреА рд╕реА рджрд┐рдХреНрдХрдд рдореЗрд░рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реА рдереАред рд▓реЗрдЦрдХ рдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдбjs, рдЬреЛ рдЖрдкрдХреЛ рдЪрдпрдирд┐рдд рдкрд╛рда рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдлрд╝реНрд▓реИрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд┐рдирд╛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдмреЗрд╕64 рдХреЛ рдбрд┐рд╕реНрдкреНрд▓реЗ:рдХреЛрдИ рдирд╣реАрдВ; рд╡рд╛рд▓реЗ рддрддреНрд╡ рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдЗрд╕реЗ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдкрд░ рдирд╣реАрдВ рд░рдЦ рд╕рдХрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЕрд▓рдЧрд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛. рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп show:none; рдореИрдВрдиреЗ рдХрд┐рдпрд╛

position: absolute;
z-index: -1;
opacity: 0;

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

echo 'base64string' | base64 --decode > config.zip

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

nginx рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ