แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒแƒชแƒ˜แƒ nginx-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ

แƒ›แƒแƒ’แƒ”แƒกแƒแƒšแƒ›แƒ”แƒ‘แƒ˜แƒ—, แƒแƒ›แƒฎแƒแƒœแƒแƒ’แƒ”แƒ‘แƒ. แƒšแƒแƒ›แƒแƒ–แƒ˜แƒ แƒฉแƒ”แƒ›แƒก แƒกแƒแƒ‘แƒ แƒซแƒแƒšแƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ–แƒ” nginx แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก 2006 แƒฌแƒšแƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒฌแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒ›แƒแƒ•แƒšแƒแƒ‘แƒแƒจแƒ˜ แƒ“แƒแƒ›แƒ˜แƒ’แƒ แƒแƒ•แƒ“แƒ แƒฃแƒแƒ›แƒ แƒแƒ•แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒ“แƒ แƒจแƒแƒ‘แƒšแƒแƒœแƒ˜. nginx-แƒก แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ•แƒแƒฅแƒ”แƒ‘แƒ“แƒ˜ แƒ“แƒ แƒ แƒแƒขแƒแƒ›แƒฆแƒแƒช แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ, แƒ แƒแƒ› แƒฐแƒแƒ‘แƒ–แƒ”แƒช แƒ™แƒ˜ แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” nginx hub, แƒแƒฉแƒ•แƒ”แƒœแƒ” แƒ›/
แƒ›แƒ”แƒ’แƒแƒ‘แƒ แƒ”แƒ‘แƒ›แƒ แƒ›แƒ—แƒฎแƒแƒ•แƒ”แƒก แƒ›แƒแƒ—แƒ—แƒ•แƒ˜แƒก แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒฃแƒšแƒ˜ แƒคแƒ”แƒ แƒ›แƒ แƒ“แƒแƒ›แƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ แƒ“แƒ แƒ˜แƒ›แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“, แƒ แƒแƒ› แƒฉแƒ”แƒ›แƒ˜ แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒจแƒแƒ‘แƒšแƒแƒœแƒ”แƒ‘แƒ˜ แƒ’แƒแƒ“แƒแƒ›แƒ”แƒขแƒแƒœแƒ, แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ’แƒแƒ›แƒแƒฎแƒกแƒ”แƒœแƒ“แƒ. nginxconfig.io, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ•แƒ แƒชแƒ”แƒšแƒ”แƒ‘แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒก แƒ—แƒแƒ แƒแƒ”แƒ‘แƒ–แƒ” แƒ“แƒ แƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒ“แƒแƒจแƒ˜แƒคแƒ•แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ.แƒจ. แƒ•แƒ˜แƒคแƒ˜แƒฅแƒ แƒ”, แƒ แƒแƒขแƒแƒ›แƒแƒช แƒแƒ แƒ? แƒ—แƒฃแƒ›แƒชแƒ, แƒ’แƒแƒ›แƒแƒ‘แƒ แƒแƒ–แƒ แƒ˜แƒ› แƒคแƒแƒฅแƒขแƒ›แƒ, แƒ แƒแƒ› nginxconfig แƒ›แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒก แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒก zip แƒแƒ แƒฅแƒ˜แƒ•แƒ˜ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜, แƒ˜แƒกแƒ” แƒ แƒแƒ› แƒแƒ  แƒ›แƒแƒซแƒšแƒ”แƒ•แƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒแƒก แƒแƒ•แƒขแƒ•แƒ˜แƒ แƒ—แƒ แƒ˜แƒ’แƒ˜ แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” wget/fetch/curl-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—. แƒ แƒ แƒกแƒ˜แƒกแƒฃแƒšแƒ”แƒšแƒ”แƒ, แƒ แƒแƒจแƒ˜ แƒ›แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜, แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ›แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ™แƒแƒœแƒกแƒแƒšแƒ˜แƒ“แƒแƒœ. แƒ’แƒแƒ‘แƒ แƒแƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ˜แƒ•แƒ”แƒ“แƒ˜ github-แƒจแƒ˜, แƒ แƒแƒ—แƒ แƒ›แƒ”แƒœแƒแƒฎแƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒแƒช แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ˜แƒ แƒ›แƒ˜แƒกแƒ˜ แƒฉแƒแƒœแƒ’แƒแƒšแƒ˜ แƒ“แƒ, แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“, แƒ“แƒแƒฎแƒ”แƒ•แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ. แƒ แƒแƒ–แƒ”แƒช แƒแƒ  แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ“แƒ˜ แƒ แƒแƒ› แƒแƒ  แƒ˜แƒงแƒแƒก แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ ๐Ÿ˜‰

แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒแƒชแƒ˜แƒ nginx-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ

แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒกแƒแƒœแƒแƒ› แƒฌแƒงแƒแƒ แƒแƒ”แƒ‘แƒก แƒฉแƒแƒ•แƒฃแƒฆแƒ แƒ›แƒแƒ•แƒ“แƒ˜, แƒ’แƒแƒ“แƒแƒ•แƒฎแƒ”แƒ“แƒ”, แƒกแƒแƒ˜แƒ“แƒแƒœ แƒ˜แƒฆแƒ”แƒ‘แƒก Chrome แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš zip-แƒแƒ แƒฅแƒ˜แƒ•แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ แƒ˜แƒฅ โ€žblob:โ€œ-แƒ˜แƒ— แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ แƒ›แƒ”แƒšแƒแƒ“แƒ, แƒฃแƒค. แƒฃแƒ™แƒ•แƒ” แƒชแƒฎแƒแƒ“แƒ˜ แƒ’แƒแƒฎแƒ“แƒ, แƒ แƒแƒ› แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒ’แƒ–แƒแƒ–แƒ” แƒแƒ แƒแƒคแƒ”แƒ แƒก แƒฌแƒแƒ แƒ›แƒแƒฅแƒ›แƒœแƒ˜แƒก, แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“, แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ js-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ . แƒ›แƒแƒ แƒ—แƒšแƒแƒช, zip แƒแƒ แƒฅแƒ˜แƒ•แƒ˜ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก, แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜แƒก แƒ“แƒ แƒ—แƒแƒ•แƒแƒ“ Javascript-แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ . แƒ˜แƒ›แƒแƒ—. แƒกแƒ˜แƒšแƒแƒ›แƒแƒ–แƒ” แƒ˜แƒ›แƒแƒจแƒ˜แƒ, แƒ แƒแƒ› แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ nginxconfig.io แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒ แƒแƒ’แƒแƒ แƒช html แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜, แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒฃแƒšแƒ˜ แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ—แƒจแƒ˜ narod.ru แƒ“แƒ แƒ˜แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒก) แƒ”แƒก แƒซแƒแƒšแƒ˜แƒแƒœ แƒกแƒแƒกแƒแƒชแƒ˜แƒšแƒ แƒ“แƒ แƒกแƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜แƒ, แƒ—แƒฃแƒ›แƒชแƒ แƒกแƒแƒจแƒ˜แƒœแƒšแƒแƒ“ แƒ›แƒแƒฃแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“, แƒคแƒแƒฅแƒขแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“, แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ แƒ”แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜. แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ”แƒ— แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒ แƒฅแƒ˜แƒ•แƒ˜ แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒ˜แƒ— แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ“แƒแƒ˜แƒขแƒแƒœแƒ”แƒ— แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” nc... 2019 แƒฌแƒ”แƒšแƒก? แƒ›แƒ” แƒฉแƒ”แƒ›แƒก แƒ—แƒแƒ•แƒก แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ•แƒแƒ“แƒ’แƒ˜แƒœแƒ”, แƒ แƒแƒ› แƒ›แƒ”แƒžแƒแƒ•แƒ แƒ’แƒ–แƒ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ’แƒแƒ“แƒ›แƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“.
แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒแƒ•แƒ˜แƒฌแƒงแƒ” แƒคแƒ˜แƒฅแƒ แƒ˜ แƒ˜แƒ›แƒแƒ–แƒ”, แƒ—แƒฃ แƒ แƒ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒฅแƒแƒœแƒ“แƒ. แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒแƒก แƒ˜แƒก แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ“แƒ, แƒ แƒแƒ› แƒแƒ  แƒ›แƒ˜แƒœแƒ“แƒแƒ“แƒ แƒ’แƒแƒ“แƒแƒ•แƒฃแƒฎแƒ•แƒ˜แƒ แƒ˜แƒ› แƒžแƒ˜แƒ แƒแƒ‘แƒแƒก, แƒ แƒแƒ› แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ แƒฉแƒ”แƒก แƒกแƒฃแƒคแƒ—แƒ แƒคแƒ แƒแƒœแƒข-แƒ”แƒœแƒ“, แƒงแƒแƒ•แƒ”แƒšแƒ’แƒ•แƒแƒ แƒ˜ แƒ‘แƒ”แƒฅ-แƒ”แƒœแƒ“แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒฃแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒกแƒ˜ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ nodejs-แƒ˜แƒก แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒก แƒแƒ แƒฅแƒ˜แƒ•แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒ— แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ แƒ˜ แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—.
แƒกแƒ˜แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒ”แƒจแƒ˜, แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ˜ แƒแƒ  แƒ˜แƒงแƒ. แƒฃแƒคแƒ แƒ แƒกแƒฌแƒแƒ แƒ”แƒ“, แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ—แƒ˜ แƒ’แƒแƒ›แƒแƒฎแƒกแƒ”แƒœแƒ“แƒ. แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒแƒ— แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒแƒ— แƒ‘แƒ›แƒฃแƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒ“แƒแƒ•แƒแƒ™แƒแƒžแƒ˜แƒ แƒแƒ— แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒ™แƒแƒœแƒกแƒแƒšแƒ–แƒ”, แƒ แƒแƒ—แƒ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒแƒ— zip แƒแƒ แƒฅแƒ˜แƒ•แƒ˜.
แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒš zip แƒแƒ แƒฅแƒ˜แƒ•แƒจแƒ˜ แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ˜แƒฌแƒแƒœแƒ˜แƒ“แƒ, แƒคแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒแƒ“ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ™แƒ˜แƒšแƒแƒ‘แƒแƒ˜แƒขแƒก. แƒแƒจแƒ™แƒแƒ แƒ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒ˜แƒงแƒ base64 แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ zip แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ’แƒแƒ“แƒแƒ’แƒ“แƒ”แƒ‘แƒ แƒ‘แƒฃแƒคแƒ”แƒ แƒจแƒ˜, แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒงแƒแƒคแƒœแƒ˜แƒกแƒแƒก แƒ™แƒแƒœแƒกแƒแƒšแƒจแƒ˜ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ˜แƒ—.

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

แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ•แƒ˜แƒซแƒšแƒ˜แƒ แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒ˜แƒ’แƒ˜แƒ•แƒ” zip แƒคแƒแƒ˜แƒšแƒ˜.

nginxconfig.io AngularJS-แƒจแƒ˜ แƒ˜แƒงแƒ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜, แƒ•แƒ”แƒ แƒช แƒ™แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒ›แƒ˜แƒ“แƒ’แƒ”แƒœแƒ˜แƒ, แƒ แƒ แƒ™แƒ˜แƒšแƒแƒ›แƒ”แƒขแƒ แƒ˜แƒก แƒ™แƒแƒ“แƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒแƒ“แƒ แƒกแƒแƒญแƒ˜แƒ แƒ, แƒ—แƒฃ แƒแƒ•แƒขแƒแƒ แƒก แƒแƒ  แƒแƒ”แƒ แƒฉแƒ˜แƒ แƒ แƒ”แƒแƒฅแƒขแƒ˜แƒฃแƒšแƒ˜ js แƒคแƒ แƒ”แƒ˜แƒ›แƒ•แƒแƒ แƒ˜. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒจแƒ•แƒ”แƒœแƒ˜แƒ•แƒ แƒแƒ“ แƒฌแƒแƒ แƒ›แƒแƒ›แƒ˜แƒ“แƒ’แƒ”แƒœแƒ˜แƒ, แƒ แƒแƒ›แƒ“แƒ”แƒœแƒแƒ“ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ“แƒ แƒšแƒแƒ›แƒแƒ–แƒ˜แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ VueJS-แƒจแƒ˜, แƒ—แƒฃแƒ›แƒชแƒ แƒ”แƒก แƒกแƒฃแƒš แƒกแƒฎแƒ•แƒ แƒ—แƒ”แƒ›แƒแƒ.
แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ แƒ”แƒกแƒฃแƒ แƒกแƒ”แƒ‘แƒจแƒ˜ แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ— zip แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒก:

$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 แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ zip, แƒกแƒแƒ“แƒแƒช แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜. zip แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, js แƒแƒฌแƒ•แƒ“แƒ˜แƒก แƒ›แƒแƒก แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— FileSaver.js:

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

แƒกแƒแƒ“แƒแƒช แƒจแƒ˜แƒœแƒแƒแƒ แƒกแƒ˜ แƒแƒ แƒ˜แƒก zip แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ blob แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜.

แƒ™แƒแƒ แƒ’แƒ˜, แƒ แƒแƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒ”แƒ™แƒ”แƒ—แƒ”แƒ‘แƒ˜แƒœแƒ, แƒ˜แƒงแƒ แƒ›แƒ˜แƒก แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒ— แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒฆแƒ˜แƒšแƒแƒ™แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ“แƒ แƒ แƒแƒชแƒ แƒ›แƒแƒกแƒ–แƒ” แƒ“แƒแƒ•แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ“แƒ˜, แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒš zip แƒแƒ แƒฅแƒ˜แƒ•แƒก แƒ‘แƒ แƒแƒฃแƒ–แƒ”แƒ แƒจแƒ˜ แƒแƒ  แƒจแƒ”แƒ•แƒ˜แƒœแƒแƒฎแƒแƒ•แƒ“แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ˜แƒกแƒ’แƒแƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ“แƒ˜ base64 แƒ™แƒแƒ“แƒก. แƒชแƒแƒขแƒแƒ—แƒ˜ แƒฉแƒฎแƒฃแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ›แƒ” แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ” 2 แƒ›แƒ”แƒ—แƒแƒ“แƒ˜, แƒ”แƒ แƒ—แƒ˜ แƒฉแƒแƒ›แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ˜แƒก Zip-แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“:

$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',
	});
};

แƒ แƒแƒ’แƒแƒ แƒช แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒœแƒ˜แƒจแƒœแƒ”แƒ—, แƒ›แƒ” แƒ’แƒแƒ“แƒแƒ•แƒ˜แƒขแƒแƒœแƒ” แƒ—แƒแƒ•แƒแƒ“ zip แƒแƒ แƒฅแƒ˜แƒ•แƒ˜แƒก แƒ—แƒแƒแƒ‘แƒ private generateZip แƒ›แƒ”แƒ—แƒแƒ“แƒ–แƒ” แƒ“แƒ แƒ.แƒจ. แƒ”แƒก แƒแƒ แƒ˜แƒก AngularJS แƒ“แƒ แƒแƒ•แƒขแƒแƒ แƒ˜ แƒ—แƒแƒ•แƒแƒ“ แƒ˜แƒชแƒแƒ•แƒก แƒ’แƒแƒ›แƒแƒฎแƒ›แƒแƒฃแƒ แƒ”แƒ‘แƒ”แƒ‘แƒก แƒ“แƒ แƒแƒ  แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ“แƒ แƒ›แƒแƒก แƒ“แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ—. downloadZip-แƒ›แƒ แƒ›แƒแƒ˜แƒœแƒช แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ saveAs, แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒแƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜, แƒฎแƒแƒšแƒ downloadBase64-แƒ›แƒ แƒแƒ“แƒœแƒแƒ• แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ แƒแƒ› แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ. แƒฉแƒ•แƒ”แƒœ แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— FileReader แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฉแƒ•แƒ”แƒœแƒแƒ›แƒ“แƒ” แƒ›แƒแƒ•แƒ˜แƒ“แƒ html5-แƒจแƒ˜ แƒ“แƒ แƒฃแƒ™แƒ•แƒ” แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ”แƒ แƒ— แƒ“แƒ แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ blob-แƒ“แƒแƒœ base64 แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ, แƒฃแƒคแƒ แƒ แƒกแƒฌแƒแƒ แƒแƒ“, DataURL แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒช แƒ˜แƒกแƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ DataURL แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ˜แƒ›แƒแƒก, แƒ แƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ. แƒ‘แƒ˜แƒœแƒ’แƒ, แƒžแƒแƒขแƒแƒ แƒ แƒœแƒแƒ™แƒšแƒ˜ แƒ›แƒ”แƒšแƒแƒ“แƒ, แƒ แƒแƒชแƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒแƒคแƒ แƒ˜แƒก แƒ‘แƒฃแƒคแƒ”แƒ แƒจแƒ˜ แƒฉแƒแƒ“แƒ”แƒ‘แƒแƒก แƒ•แƒชแƒ“แƒ˜แƒšแƒแƒ‘แƒ“แƒ˜. แƒแƒ•แƒขแƒแƒ แƒ›แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ แƒ‘แƒฃแƒคแƒ”แƒ แƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ˜แƒ›แƒฃแƒจแƒแƒแƒ— แƒ‘แƒฃแƒคแƒ”แƒ แƒ—แƒแƒœ แƒคแƒšแƒ”แƒจ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”, แƒจแƒ”แƒ แƒฉแƒ”แƒฃแƒšแƒ˜ แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ”. แƒ—แƒแƒ•แƒ“แƒแƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒแƒ“, แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ”, แƒฉแƒ”แƒ›แƒ˜ base64 แƒฉแƒแƒ›แƒ”แƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒœแƒ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒจแƒ˜ display:none;, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ›แƒ” แƒ•แƒ”แƒ  แƒ›แƒแƒ•แƒแƒฎแƒ”แƒ แƒฎแƒ” แƒ›แƒ˜แƒกแƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ แƒ‘แƒฃแƒคแƒ”แƒ แƒจแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒแƒ  แƒฎแƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒœแƒชแƒแƒšแƒ™แƒ”แƒ•แƒ”แƒ‘แƒ. แƒแƒ›แƒ˜แƒขแƒแƒ›, แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒชแƒ•แƒšแƒแƒ“:none; แƒ›แƒ” แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”

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

แƒ แƒแƒ›แƒแƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ›แƒชแƒ, แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ˜ แƒ“แƒแƒ›แƒ”แƒ›แƒแƒšแƒ แƒ›แƒฎแƒ”แƒ“แƒ•แƒ”แƒšแƒแƒ‘แƒ˜แƒ“แƒแƒœ แƒ“แƒ แƒ แƒ”แƒแƒšแƒฃแƒ แƒแƒ“ แƒ“แƒแƒ›แƒ”แƒขแƒแƒ•แƒ”แƒ‘แƒ˜แƒœแƒ แƒ˜แƒ’แƒ˜ แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ”. Voila, แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ, แƒ แƒแƒชแƒ แƒฉแƒ”แƒ›แƒก แƒฆแƒ˜แƒšแƒแƒ™แƒก แƒ“แƒแƒ•แƒแƒญแƒ˜แƒ แƒ”, แƒ‘แƒฃแƒคแƒ”แƒ แƒจแƒ˜ แƒ›แƒแƒ—แƒแƒ•แƒกแƒ“แƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒฎแƒแƒ–แƒ˜:

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

แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒฉแƒแƒกแƒ•แƒ˜แƒ— แƒ™แƒแƒœแƒกแƒแƒšแƒจแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ“แƒ แƒ›แƒแƒจแƒ˜แƒœแƒ•แƒ” แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ” zip แƒแƒ แƒฅแƒ˜แƒ•แƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒ—.
แƒ“แƒ, แƒ แƒ แƒ—แƒฅแƒ›แƒ แƒฃแƒœแƒ“แƒ, แƒ’แƒแƒ•แƒฃแƒ’แƒ–แƒแƒ•แƒœแƒ” แƒ—แƒฎแƒแƒ•แƒœแƒ แƒแƒ•แƒขแƒแƒ แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ... แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ˜ แƒ“แƒ แƒชแƒแƒชแƒฎแƒแƒšแƒ˜แƒ, แƒ›แƒกแƒฃแƒ แƒก แƒ•แƒœแƒแƒฎแƒ แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒแƒ•แƒขแƒแƒ แƒ˜แƒกแƒ’แƒแƒœ แƒ“แƒ แƒ›แƒฅแƒแƒœแƒ“แƒ”แƒก แƒฉแƒ”แƒ›แƒ˜ แƒฆแƒ˜แƒšแƒแƒ™แƒ˜) แƒ“แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒฃแƒšแƒ—แƒแƒ—แƒ•แƒ˜แƒก แƒแƒฅ แƒแƒ แƒ˜แƒก แƒฉแƒ”แƒ›แƒ˜ แƒฉแƒแƒœแƒ’แƒแƒšแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ“แƒ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ—แƒแƒ•แƒ˜ แƒ—แƒฎแƒแƒ•แƒœแƒ, แƒกแƒแƒ“แƒแƒช แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ˜แƒฎแƒ˜แƒšแƒแƒ— แƒ แƒ แƒ’แƒแƒ•แƒแƒกแƒฌแƒแƒ แƒ”/แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒ”.
แƒงแƒ•แƒ”แƒšแƒแƒก แƒ‘แƒ”แƒ“แƒœแƒ˜แƒ”แƒ แƒ˜ แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ)

แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒแƒชแƒ˜แƒ nginx-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ˜แƒกแƒขแƒแƒ แƒ˜แƒ

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ