เบเบฒเบ™เบชเป‰เบฒเบ‡ configs เบชเปเบฒเบฅเบฑเบš nginx, เบ›เบฐเบซเบงเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡เบซเบ™เบถเปˆเบ‡

เบŠเบปเบกเป€เบŠเบตเบ, เบชเบฐเบซเบฒเบ. เบชเบงเบเบ‡เบฒเบกเปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเบเบฒเบ™เบ•เปเปˆเบชเบนเป‰เบ‚เบญเบ‡เบ‚เป‰เบญเบ nginx เป„เบ”เป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ 2006 เปเบฅเบฐเปƒเบ™เป„เบฅเบเบฐเบ›เบตเบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบซเบฒเบ™เบ‚เบญเบ‡เบ•เบปเบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเบฐเบชเบปเบกเบซเบผเบฒเบ configs เปเบฅเบฐเปเบกเปˆเปเบšเบš. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบเบปเบเบเป‰เบญเบ‡ nginx เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเปเบฅเบฐเบšเบฒเบ‡เบ—เบตเบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบ‚เป‰เบญเบเบเปเปˆเป€เบฅเบตเปˆเบก nginx hub เบขเบนเปˆเปƒเบ™เบชเบนเบ™, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™ m /
เปเบนเปˆเป„เบ”เป‰เบ‚เปเปƒเบซเป‰เบ‚เป‰เบญเบเบ•เบฑเป‰เบ‡เบŸเบฒเบกเบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เปเบฅเบฐเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบฅเบฒเบเปเบกเปˆเปเบšเบšเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบ‚เป‰เบญเบเบˆเบทเปˆเป„เบ”เป‰เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเปœเป‰เบฒเบชเบปเบ™เปƒเบˆ. nginxconfig.io, เป€เบŠเบดเปˆเบ‡เบเบฐเปเบˆเบเบเบฐเบˆเบฒเบ configs เปƒเบ™ shelves เปเบฅเบฐเบเบฐเบเบฝเบกเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบดเบ”เบงเปˆเบฒ, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเปเปˆ? เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ‚เป‰เบญเบเบฎเบนเป‰เบชเบถเบเบ„เบฝเบ”เปเบ„เป‰เบ™เบเบฑเบšเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ nginxconfig เบชเบฐเป€เบซเบ™เบตเปƒเบซเป‰เบ‚เป‰เบญเบเบ”เบฒเบงเป‚เบซเบฅเบ” zip archive เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบญเบฑเบšเป‚เบซเบฅเบ”เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป‚เบ”เบเปƒเบŠเป‰ wget/fetch/curl. เบชเบดเปˆเบ‡เบ—เบตเปˆเป„เบฎเป‰เบชเบฒเบฅเบฐ, เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš, เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบˆเบฒเบ console. เปƒเบˆเบฎเป‰เบฒเบ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป„เบ›เบซเบฒ github เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบ„เบงเบฒเบกเบเป‰เบฒเบซเบฒเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™, เป€เบŠเบดเปˆเบ‡เบ™เปเบฒเป„เบ›เบชเบนเปˆเบชเป‰เบญเบกเบ‚เบญเบ‡เบกเบฑเบ™เปเบฅเบฐ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡. เบ—เบตเปˆเบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเบ‚เบฝเบ™เบ–เป‰เบฒเบกเบฑเบ™เบšเปเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ ๐Ÿ˜‰

เบเบฒเบ™เบชเป‰เบฒเบ‡ configs เบชเปเบฒเบฅเบฑเบš nginx, เบ›เบฐเบซเบงเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡เบซเบ™เบถเปˆเบ‡

เปเบ™เปˆเบ™เบญเบ™, เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ‚เบธเบ”เบ„เบปเป‰เบ™เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบšเปˆเบญเบ™เบ—เบตเปˆ Chrome เบ”เบถเบ‡เปเบŸเป‰เบก zip เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ, เปเบฅเบฐเบกเบตเบ—เบตเปˆเบขเบนเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ "blob:" เบฅเปเบ–เป‰เบฒเบ‚เป‰เบญเบ, oops. เบกเบฑเบ™เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เปเบฅเป‰เบงเบงเปˆเบฒเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบšเปเปˆเป„เบ”เป‰เบชเป‰เบฒเบ‡เบชเบดเปˆเบ‡เปƒเบ”เบ•เบฒเบกเบ—เบฒเบ‡, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบกเบฑเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เป€เบฎเบฑเบ”เป‚เบ”เบ js. เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, zip archive เปเบกเปˆเบ™เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบฅเบนเบเบ„เป‰เบฒ, เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš, เปเบฅเบฐ javascript เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ„เบงเบฒเบกเบ‡เบฒเบกเปเบกเปˆเบ™เบงเปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™ nginxconfig.io เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™เบซเบ™เป‰เบฒ html, เบญเบฑเบšเป‚เบซเบผเบ”เบเบฑเบšเบšเบฒเบ‡ narod.ru เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบ) เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ•เบฐเบซเบฅเบปเบเปเบฅเบฐเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบ, เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบฑเบ™เบšเปเปˆเบชเบฐเบ”เบงเบเบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เบ”เบฒเบงเป‚เบซเบผเบ”เปเบŸเป‰เบกเบˆเบฑเบ”เป€เบเบฑเบšเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบ”เป‰เบงเบเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบญเบ™เบกเบฑเบ™เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป‚เบ”เบเปƒเบŠเป‰ nc... เปƒเบ™เบ›เบต 2019? เบ‚เป‰เบญเบเบ•เบฑเป‰เบ‡เบ•เบปเบงเป€เบญเบ‡เป€เบ›เบฑเบ™เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบŠเบญเบเบซเบฒเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบ”เบฒเบงเป‚เบซเบฅเบ” config เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเบเบปเบ‡เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.
เบซเบผเบฑเบ‡เบˆเบฒเบ forking เป‚เบ„เบ‡เบเบฒเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™. เบงเบฝเบเบ‡เบฒเบ™เปเบกเปˆเบ™เบชเบฑเบšเบชเบปเบ™เป‚เบ”เบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบ‚เป‰เบญเบเบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐ deviate เบˆเบฒเบเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเป‚เบ„เบ‡เบเบฒเบ™เบ„เบงเบ™เบˆเบฐเบเบฑเบ‡เบ„เบปเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบซเบ™เป‰เบฒเบšเปเบฅเบดเบชเบธเบ”, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ back-end เปƒเบ”. เปเบ™เปˆเบ™เบญเบ™, เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบเบฒเบ™เบ”เบถเบ‡ nodejs เปเบฅเบฐเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบกเบฑเบ™เบชเป‰เบฒเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป‚เบ”เบเบเบปเบ‡.
เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบšเปเปˆเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบซเบผเบฒเบ. เบซเบผเบฒเบเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™, เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบซเบ™เบถเปˆเบ‡เบกเบฒเปƒเบ™เปƒเบˆ. เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ configs เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ„เบฑเบ”เบฅเบญเบเป„เบ›เบ—เบตเปˆ server console เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบš zip archive.
เป„เบŸเบฅเปŒเบ‚เปเป‰เบ„เบงเบฒเบกเบซเบผเบฒเบเบญเบฑเบ™เปƒเบ™เปเบŸเป‰เบก zip เบ—เบตเปˆเป€เบ›เบฑเบ™เบœเบปเบ™เบญเบญเบเบกเบฒเบกเบตเบ™เปเป‰เบฒเปœเบฑเบเปœเป‰เบญเบเปœเบถเปˆเบ‡, เป€เบ—เบปเปˆเบฒเบเบฑเบšเบชเบญเบ‡เบชเบฒเบกเบเบดเป‚เบฅเป„เบš. เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบฒเบ base64 เบˆเบฒเบเปเบŸเป‰เบก zip เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปเบฅเบฐเบ–เบดเป‰เบกเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ buffer, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ—เบตเปˆเบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ™ console.

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

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ zip เบ”เบฝเบงเบเบฑเบ™เบ™เบตเป‰.

nginxconfig.io เบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰เปƒเบ™ AngularJS, เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เป„เบ”เป‰เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เปƒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบ–เป‰เบฒเบœเบนเป‰เบ‚เบฝเบ™เบšเปเปˆเป„เบ”เป‰เป€เบฅเบทเบญเบเบเบญเบš js เบ—เบตเปˆเบกเบตเบ›เบฐเบ•เบดเบเบดเบฅเบดเบเบฒ. เปเบ•เปˆเบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบงเปˆเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบชเบงเบเบ‡เบฒเบกเบเบงเปˆเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™ VueJS, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบซเบปเบงเบ‚เปเป‰เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”.
เปƒเบ™เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡ zip archive:

$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 archive, js feeds เบกเบฑเบ™เป„เบ›เบซเบฒเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเป‚เบ”เบเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” FileSaver.js:

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

เบšเปˆเบญเบ™เบ—เบตเปˆเป€เบ™เบทเป‰เบญเบซเบฒเปเบกเปˆเบ™เบงเบฑเบ”เบ–เบธ blob เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบš zip.

เบ•เบปเบเบฅเบปเบ‡, เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบ„เบทเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบธเปˆเบกเบญเบทเปˆเบ™เบ—เบตเปˆเบขเบนเปˆเบ‚เป‰เบฒเบ‡เบกเบฑเบ™เปเบฅเบฐเป€เบกเบทเปˆเบญเบ‚เป‰เบญเบเบ„เบฅเบดเบเปƒเบชเปˆเบกเบฑเบ™, เบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเบšเบฑเบ™เบ—เบถเบ zip archive เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเป„เบ›เบซเบฒเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš, เปเบ•เปˆเป„เบ”เป‰เบฎเบฑเบšเบฅเบฐเบซเบฑเบ” base64 เบˆเบฒเบเบกเบฑเบ™. เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบžเปโ€‹เปƒเบˆโ€‹เป€เบฅเบฑเบโ€‹เบ™เป‰เบญเบโ€‹, เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบš 2 เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹, เปเบ—เบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบซเบ™เบถเปˆเบ‡ downloadZipโ€‹:

$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 archive เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เป„เบ›เบซเบฒเบงเบดเบ—เบตเบเบฒเบ™ generateZip เบชเปˆเบงเบ™เบ•เบปเบง, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบ™เบตเป‰เปเบกเปˆเบ™ AngularJS, เปเบฅเบฐเบœเบนเป‰เบ‚เบฝเบ™เป€เบญเบ‡เบเบถเบ”เบซเบกเบฑเป‰เบ™เบเบฑเบšเบเบฒเบ™เป€เบญเบตเป‰เบ™เบ„เบทเบ™เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™เบœเปˆเบฒเบ™เบ„เปเบฒเบชเบฑเบ™เบเบฒ. downloadZip เบเบฑเบ‡เป€เบฎเบฑเบ” saveAs เป€เบ›เบฑเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ downloadBase64 เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ. เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบงเบฑเบ”เบ–เบธ FileReader เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเบซเบฒเบžเบงเบเป€เบฎเบปเบฒเปƒเบ™ html5 เปเบฅเบฐเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เปเบฅเป‰เบง เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰. เป€เบŠเบดเปˆเบ‡, เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบง, เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบฒเบ base64 เบˆเบฒเบ blob, เบซเบผเบทเปเบ—เบ™เบ—เบตเปˆเบˆเบฐ, เบกเบฑเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰ DataURL string, เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ, เป€เบžเบฒเบฐเบงเปˆเบฒ. DataURL เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™. Bingo, snag เป€เบฅเบฑเบเบ™เป‰เบญเบเบฅเปเบ–เป‰เบฒเบ‚เป‰เบญเบเป€เบกเบทเปˆเบญเบ‚เป‰เบญเบเบžเบฐเบเบฒเบเบฒเบกเป€เบญเบปเบฒเบชเบดเปˆเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เป„เบงเป‰เปƒเบ™ buffer. เบœเบนเป‰เบ‚เบฝเบ™เปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™ clipboardjs, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบฎเปˆเบงเบกเบเบฑเบš clipboard เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบงเบฑเบ”เบ–เบธ flash, เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเป€เบฅเบทเบญเบ. เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเป€เบญเบปเบฒ base64 เบ‚เบญเบ‡เบ‚เป‰เบญเบเบขเบนเปˆเปƒเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบกเบตเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™: เบšเปเปˆเบกเบต; เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบ‚เป‰เบญเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบชเปˆเบกเบฑเบ™เปƒเบชเปˆ clipboard เป„เบ”เป‰เป€เบžเบฒเบฐเบงเปˆเบฒ เบšเปเปˆเบกเบตเบเบฒเบ™เปเบเบเบเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบชเบฐเปเบ”เบ‡: none; เบ‚เป‰เบญเบโ€‹เป€เบฎเบฑเบ”

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

เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบ—เบฑเบ‡เบชเบญเบ‡เป€เบŠเบทเปˆเบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบˆเบฒเบเบเบฒเบ™เป€เบšเบดเปˆเบ‡เปเบฅเบฐเบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบ›เปˆเบญเบเปƒเบซเป‰เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบซเบ™เป‰เบฒ. Voila, เบงเบฝเบเบ‡เบฒเบ™เป„เบ”เป‰เบ–เบทเบเบชเปเบฒเป€เบฅเบฑเบ”, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบฅเบดเบเปƒเบชเปˆเบ›เบธเปˆเบกเบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ, เป€เบชเบฑเป‰เบ™เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™ buffer:

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

เบ—เบตเปˆเบ‚เป‰เบญเบเบžเบฝเบ‡เปเบ•เปˆเบงเบฒเบ‡เบฅเบปเบ‡เปƒเบ™ console เปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเปเบฅเบฐเบ—เบฑเบ™เบ—เบตเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบเบฑเบš zip เบเบฑเบš config เบ—เบฑเบ‡เบซเบกเบปเบ”.
เปเบฅเบฐ, เปเบ™เปˆเบ™เบญเบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ”เบถเบ‡เบเบฑเบšเบœเบนเป‰เบ‚เบฝเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒ ... เป‚เบ„เบ‡เบเบฒเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™เบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเปเบฅเบฐเบกเบตเบŠเบตเบงเบดเบ”เบŠเบตเบงเบฒ, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเป€เบซเบฑเบ™เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบˆเบฒเบเบœเบนเป‰เบ‚เบฝเบ™เปเบฅเบฐเบกเบตเบ›เบธเปˆเบกเบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบญเบ‡) เบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เบ—เบตเปˆเบชเบปเบ™เปƒเบˆ, เบ™เบตเป‰เปเบกเปˆเบ™ เบชเป‰เบญเบกเบ‚เบญเบ‡เบ‚เป‰เบญเบ เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เปเบฅเบฐโ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹ เบ”เบถเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเปเบเป‰เป„เบ‚ / เป€เบžเบตเปˆเบก.
เบชเบธเบเบชเบฑเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบธเบเบ„เบปเบ™)

เบเบฒเบ™เบชเป‰เบฒเบ‡ configs เบชเปเบฒเบฅเบฑเบš nginx, เบ›เบฐเบซเบงเบฑเบ”เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เบ”เบถเบ‡เบซเบ™เบถเปˆเบ‡

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™