nginx เชฎเชพเชŸเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“เชจเซเช‚ เชจเชฟเชฐเซเชฎเชพเชฃ, เชเช• เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เชถเซเชญเซ‡เชšเซเช›เชพเช“, เชธเชพเชฅเซ€เช“. เชฎเชพเชฐเชพ เช•เซ‹เชฎเซเชฌเซ‡เชŸ เชธเชฐเซเชตเชฐเซเชธ เชชเชฐ เชธเซเช‚เชฆเชฐ nginx 2006 เชฅเซ€ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชตเชนเซ€เชตเชŸเชจเชพ เชตเชฐเซเชทเซ‹เชฎเชพเช‚ เชฎเซ‡เช‚ เช˜เชฃเชพ เชฌเชงเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“ เช…เชจเซ‡ เชจเชฎเซ‚เชจเชพเช“ เชเช•เช เชพ เช•เชฐเซเชฏเชพ เช›เซ‡. เชฎเซ‡เช‚ nginx เชจเซ€ เช–เซ‚เชฌ เชชเซเชฐเชถเช‚เชธเชพ เช•เชฐเซ€ เช…เชจเซ‡ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เชเชตเซเช‚ เชฌเชนเชพเชฐ เช†เชตเซเชฏเซเช‚ เช•เซ‡ เชฎเซ‡เช‚ เชนเชฌ เชชเชฐ nginx เชนเชฌ เชชเชฃ เชถเชฐเซ‚ เช•เชฐเซเชฏเซเช‚ เช›เซ‡, เชชเชฃ, เชฌเชคเชพเชตเซ‹ m/
เชฎเชฟเชคเซเชฐเซ‹เช เชฎเชจเซ‡ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เชกเซ‡เชตเชฒเชชเชฎเซ‡เชจเซเชŸ เชซเชพเชฐเซเชฎ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เช•เชนเซเชฏเซเช‚, เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชฎเชพเชฐเชพ เชšเซ‹เช•เซเช•เชธ เชจเชฎเซ‚เชจเชพเช“ เช–เซ‡เช‚เชšเชตเชพเชจเซ‡ เชฌเชฆเชฒเซ‡, เชฎเชจเซ‡ เชเช• เชฐเชธเชชเซเชฐเชฆ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฏเชพเชฆ เช†เชตเซเชฏเซ‹. nginxconfig.io, เชœเซ‡ เช›เชพเชœเชฒเซ€เช“ เชชเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“เชจเซ‡ เชตเซ‡เชฐเชตเชฟเช–เซ‡เชฐ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ lets encrypt เชตเช—เซ‡เชฐเซ‡ เชฎเชพเชŸเซ‡ เชฌเชงเซเช‚ เชคเซˆเชฏเชพเชฐ เช•เชฐเซ‡ เช›เซ‡. เชฎเซ‡เช‚ เชตเชฟเชšเชพเชฐเซเชฏเซเช‚, เช•เซ‡เชฎ เชจเชนเซ€เช‚? เชœเซ‹ เช•เซ‡, เชนเซเช‚ เช เชนเช•เซ€เช•เชคเชฅเซ€ เช—เซเชธเซเชธเซ‡ เชฅเชฏเซ‹ เชนเชคเซ‹ เช•เซ‡ nginxconfig เชฎเชจเซ‡ wget/fetch/curl เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเซ‡เชจเซ‡ เชธเซ€เชงเชพ เชธเชฐเซเชตเชฐ เชชเชฐ เช…เชชเชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซเชฏเชพ เชตเชฟเชจเชพ, เชฌเซเชฐเชพเช‰เชเชฐเชฎเชพเช‚ เชเชฟเชช เช†เชฐเซเช•เชพเช‡เชต เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ€ เช‘เชซเชฐ เช•เชฐเซ‡ เช›เซ‡. เชถเซเช‚ เชจเซ‹เชจเชธเซ‡เชจเซเชธ, เชฎเชจเซ‡ เชฌเซเชฐเชพเช‰เชเชฐเชฎเชพเช‚ เชถเชพ เชฎเชพเชŸเซ‡ เชคเซ‡เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชฎเชจเซ‡ เช•เชจเซเชธเซ‹เชฒเชฎเชพเช‚เชฅเซ€ เชธเชฐเซเชตเชฐ เชชเชฐ เชคเซ‡เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช—เซเชธเซเชธเชพเชฎเชพเช‚, เชนเซเช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ€ เชนเชฟเช‚เชฎเชค เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เช—เซ€เชฅเชฌ เชชเชฐ เช—เชฏเซ‹, เชœเซ‡เชจเชพ เช•เชพเชฐเชฃเซ‡ เชคเซ‡เชจเซ‹ เช•เชพเช‚เชŸเซ‹ เชฅเชฏเซ‹ เช…เชจเซ‡ เชชเชฐเชฟเชฃเชพเชฎเซ‡, เช–เซ‡เช‚เชšเชตเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€. เชœเซ‡ เชฐเชธเชชเซเชฐเชฆ เชจ เชนเซ‹เชค เชคเซ‹ เชนเซเช‚ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชฒเช–เซ€เชถ เชจเชนเซ€เช‚ ๐Ÿ˜‰

nginx เชฎเชพเชŸเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“เชจเซเช‚ เชจเชฟเชฐเซเชฎเชพเชฃ, เชเช• เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เช…เชฒเชฌเชคเซเชค, เชธเซเชคเซเชฐเซ‹เชคเซ‹เชฎเชพเช‚ เช–เซ‹เชฆเชคเชพ เชชเชนเซ‡เชฒเชพ, เชฎเซ‡เช‚ เชœเซ‹เชฏเซเช‚ เช•เซ‡ เช•เซเชฐเซ‹เชฎ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒ เชเชฟเชช เช†เชฐเซเช•เชพเช‡เชตเชจเซ‡ เช•เชจเซเชซเชฟเช—เซเชธ เชธเชพเชฅเซ‡ เช•เซเชฏเชพเช‚ เช–เซ‡เช‚เชšเซ‡ เช›เซ‡, เช…เชจเซ‡ เชคเซเชฏเชพเช‚ โ€œเชฌเซเชฒเซ‹เชฌ:โ€ เชฅเซ€ เชถเชฐเซ‚ เชฅเชคเซเช‚ เชธเชฐเชจเชพเชฎเซเช‚ เชฎเชพเชฐเซ€ เชฐเชพเชน เชœเซ‹เชˆ เชฐเชนเซเชฏเซเช‚ เชนเชคเซเช‚, เช…เชฐเซ‡. เชคเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชธเซเชชเชทเซเชŸ เชฅเชˆ เช—เชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชธเซ‡เชตเชพ เชฐเชธเซเชคเชพเชฎเชพเช‚ เช•เช‚เชˆเชชเชฃ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชคเซ€ เชจเชฅเซ€, เชนเช•เซ€เช•เชคเชฎเชพเช‚, เชคเซ‡ เชฌเชงเซเช‚ js เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡. เช–เชฐเซ‡เช–เชฐ, เชเชฟเชช เช†เชฐเซเช•เชพเช‡เชต เช•เซเชฒเชพเชฏเช‚เชŸ, เชฌเซเชฐเชพเช‰เชเชฐ เช…เชจเซ‡ เชœเชพเชตเชพเชธเซเช•เซเชฐเชฟเชชเซเชŸ เชฆเซเชตเชพเชฐเชพ เชœ เชœเชจเชฐเซ‡เชŸ เชฅเชพเชฏ เช›เซ‡. เชคเซ‡. เชธเซŒเช‚เชฆเชฐเซเชฏ เช เช›เซ‡ เช•เซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ nginxconfig.io เช•เซ‡เชŸเชฒเชพเช• เชชเชฐ เช…เชชเชฒเซ‹เชก เช•เชฐเซ€เชจเซ‡ HTML เชชเซƒเชทเซเช  เชคเชฐเซ€เช•เซ‡ เชซเช•เซเชค เชธเชพเชšเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡ narod.ru เช…เชจเซ‡ เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเชถเซ‡) เช† เชเช• เช–เซ‚เชฌ เชœ เชฐเชฎเซเชœเซ€ เช…เชจเซ‡ เชฐเชธเชชเซเชฐเชฆ เช‰เช•เซ‡เชฒ เช›เซ‡, เชœเซ‹ เช•เซ‡, เชธเชฐเซเชตเชฐเซเชธ เชธเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡ เช–เซ‚เชฌ เชœ เช…เชธเซเชตเชฟเชงเชพเชœเชจเช• เช›เซ‡, เชนเช•เซ€เช•เชคเชฎเชพเช‚, เช† เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชถเซเช‚ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹ เชคเซ‡ เชฎเชพเชŸเซ‡. เชฌเซเชฐเชพเช‰เชเชฐ เชตเชกเซ‡ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒ เช†เชฐเซเช•เชพเช‡เชต เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเซ‹ เช…เชจเซ‡ เชชเช›เซ€ เชคเซ‡เชจเซ‡ nc เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเซ‹... 2019 เชฎเชพเช‚? เชชเชฐเชฟเชฃเชพเชฎเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเชจเซ‡ เชธเซ€เชงเชพ เชธเชฐเซเชตเชฐ เชชเชฐ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ‹ เชฎเชพเชฐเซเช— เชถเซ‹เชงเชตเชพเชจเซเช‚ เช•เชพเชฐเซเชฏ เชฎเซ‡เช‚ เชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เชธเซ‡เชŸ เช•เชฐเซเชฏเซเช‚ เช›เซ‡.
เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชซเซ‹เชฐเซเช• เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชฎเซ‡เช‚ เชฎเชพเชฐเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เชถเซเช‚ เช›เซ‡ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชฟเชšเชพเชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซเชฏเซเช‚. เช•เชพเชฐเซเชฏ เช เชนเช•เซ€เช•เชคเชฅเซ€ เชœเชŸเชฟเชฒ เชนเชคเซเช‚ เช•เซ‡ เชนเซเช‚ เชเชตเซ€ เชถเชฐเชคเชฅเซ€ เชตเชฟเชšเชฒเชฟเชค เชฅเชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชจ เชนเชคเซ‹ เช•เซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช•เซ‹เชˆ เชชเชฃ เชฌเซ‡เช•-เชเชจเซเชก เชตเชฟเชจเชพ, เชถเซเชฆเซเชง เชซเซเชฐเชจเซเชŸ-เชเชจเซเชก เชฐเชนเซ‡เชตเซ‹ เชœเซ‹เชˆเช. เช…เชฒเชฌเชคเซเชค, เชธเซŒเชฅเซ€ เชธเชฐเชณ เช‰เช•เซ‡เชฒ เชจเซ‹เชกเชœเชจเซ‡ เช–เซ‡เช‚เชšเชตเชพเชจเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชกเชพเชฏเชฐเซ‡เช•เซเชŸ เชฒเชฟเช‚เช•เซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“ เชธเชพเชฅเซ‡ เช†เชฐเซเช•เชพเช‡เชต เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชฆเชฌเชพเชฃ เช•เชฐเชตเชพเชจเซ‹ เช›เซ‡.
เช–เชฐเซ‡เช–เชฐ, เชคเซเชฏเชพเช‚ เช˜เชฃเชพ เชฌเชงเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เชจ เชนเชคเชพ. เชตเชงเซ เชธเซเชชเชทเซเชŸ เชฐเซ€เชคเซ‡, เชซเช•เซเชค เชเช• เชœ เชงเซเชฏเชพเชจเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚. เช…เชฎเชพเชฐเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“ เชธเซเชฏเซ‹เชœเชฟเชค เช•เชฐเชตเชพเชจเซ€ เช…เชจเซ‡ เชเช• เชฒเชฟเช‚เช• เชฎเซ‡เชณเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡เชจเซ‡ เช…เชฎเซ‡ เชเชฟเชช เช†เชฐเซเช•เชพเช‡เชต เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฐเซเชตเชฐ เช•เชจเซเชธเซ‹เชฒ เชชเชฐ เช•เซ‰เชชเชฟ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช.
เชชเชฐเชฟเชฃเชพเชฎเซ€ เชเชฟเชช เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚ เช•เซ‡เชŸเชฒเซ€เช• เชŸเซ‡เช•เซเชธเซเชŸ เชซเชพเช‡เชฒเซ‹เชจเซเช‚ เชตเชœเชจ เชฅเซ‹เชกเซเช‚เช• เชนเชคเซเช‚, เชถเชพเชฌเซเชฆเชฟเช• เชฐเซ€เชคเซ‡ เชฅเซ‹เชกเชพ เช•เชฟเชฒเซ‹เชฌเชพเช‡เชŸ. เชธเซเชชเชทเซเชŸ เช‰เช•เซ‡เชฒ เช เชนเชคเซ‹ เช•เซ‡ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒ เชเชฟเชช เช†เชฐเซเช•เชพเช‡เชตเชฎเชพเช‚เชฅเซ€ เชฌเซ‡เช 64 เชธเซเชŸเซเชฐเชฟเช‚เช— เชฎเซ‡เชณเชตเชตเซ€ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฌเชซเชฐเชฎเชพเช‚ เชซเซ‡เช‚เช•เซ€ เชฆเซ‡เชตเซ€, เชœเซเชฏเชพเชฐเซ‡ เช•เชจเซเชธเซ‹เชฒเชฎเชพเช‚ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ

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

เช†เชชเชฃเซ‡ เช† เชœ 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 เชเช• เชเชฟเชช เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเซ‹ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชเชฟเชช เช†เชฐเซเช•เชพเช‡เชต เชฌเชจเชพเชตเซเชฏเชพ เชชเช›เซ€, js เชคเซ‡เชจเซ‡ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฌเซเชฐเชพเช‰เชเชฐเชฎเชพเช‚ เชซเซ€เชก เช•เชฐเซ‡ เช›เซ‡ FileSaver.js:

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

เชœเซเชฏเชพเช‚ เชธเชพเชฎเช—เซเชฐเซ€ เช เชเชฟเชช เช†เชฐเซเช•เชพเช‡เชตเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎเซ€ เชฌเซเชฒเซ‹เชฌ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เช›เซ‡.

เช เซ€เช• เช›เซ‡, เชฎเชพเชฐเซ‡ เชฌเชธ เชคเซ‡เชจเซ€ เชฌเชพเชœเซเชฎเชพเช‚ เชฌเซ€เชœเซเช‚ เชฌเชŸเชจ เช‰เชฎเซ‡เชฐเชตเชพเชจเซเช‚ เชนเชคเซเช‚ เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เชฎเซ‡เช‚ เชคเซ‡เชจเชพ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซเชฏเซเช‚, เชคเซเชฏเชพเชฐเซ‡ เชนเซเช‚ เชชเชฐเชฟเชฃเชพเชฎเซ€ เชเชฟเชช เช†เชฐเซเช•เชพเช‡เชตเชจเซ‡ เชฌเซเชฐเชพเช‰เชเชฐเชฎเชพเช‚ เชธเชพเชšเชตเซ€เชถ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชคเซ‡เชฎเชพเช‚เชฅเซ€ base64 เช•เซ‹เชก เชฎเซ‡เชณเชตเซ€เชถ. เชฅเซ‹เชกเซ€เชตเชพเชฐ เชนเชฒเชšเชฒ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เชฎเชจเซ‡ เชซเช•เซเชค เชเช• เชกเชพเช‰เชจเชฒเซ‹เชกเชเชฟเชชเชจเซ‡ เชฌเชฆเชฒเซ‡ 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 เช›เซ‡, เช…เชจเซ‡ เชฒเซ‡เช–เช• เชชเซ‹เชคเซ‡ เช•เซ‰เชฒเชฌเซ…เช•เซเชธเชจเซ‡ เชตเชณเช—เซ€ เชฐเชนเซ‡ เช›เซ‡ เช…เชจเซ‡ เชตเชšเชจเซ‹ เชฆเซเชตเชพเชฐเชพ เชคเซ‡เชจเซ‹ เช…เชฎเชฒ เช•เชฐเซเชฏเซ‹ เชจเชฅเซ€. downloadZip เช เชนเชœเซ เชชเชฃ เช†เช‰เชŸเชชเซเชŸ เชคเชฐเซ€เช•เซ‡ saveAs เช•เชฐเซเชฏเซเช‚ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ downloadBase64 เช เชฅเซ‹เชกเซเช‚ เช…เชฒเช— เช•เชฐเซเชฏเซเช‚ เช›เซ‡. เช…เชฎเซ‡ เชเช• FileReader เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ€เช เช›เซ€เช เชœเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ html5 เชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เช›เซ‡ เช…เชจเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชเช•เชฆเชฎ เช›เซ‡ เชธเซเชฒเชญ เช‰เชชเชฏเซ‹เช— เชฎเชพเชŸเซ‡. เชœเซ‡, เชเช• เชธเชฎเชฏเซ‡, เชฌเซเชฒเซ‹เชฌเชฎเชพเช‚เชฅเซ€ เชฌเซ‡เช 64 เชธเซเชŸเซเชฐเชฟเช‚เช— เชฌเชจเชพเชตเซ€ เชถเช•เซ‡ เช›เซ‡, เช…เชฅเชตเชพ เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡, เชคเซ‡ DataURL เชธเซเชŸเซเชฐเชฟเช‚เช— เชฌเชจเชพเชตเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช† เช†เชชเชฃเชพ เชฎเชพเชŸเซ‡ เชเชŸเชฒเซเช‚ เชฎเชนเชคเซเชตเชจเซเช‚ เชจเชฅเซ€, เช•เชพเชฐเชฃ เช•เซ‡ DataURL เชฎเชพเช‚ เช†เชชเชฃเชจเซ‡ เชœเซ‡ เชœเซ‹เชˆเช เช›เซ‡ เชคเซ‡ เชฌเชฐเชพเชฌเชฐ เช›เซ‡. เชฌเชฟเชจเซเช—เซ‹, เชœเซเชฏเชพเชฐเซ‡ เชฎเซ‡เช‚ เช† เชฌเชงเซเช‚ เชฌเชซเชฐเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซเชฏเซ‹ เชคเซเชฏเชพเชฐเซ‡ เชฅเซ‹เชกเซ€ เชฎเซเชถเซเช•เซ‡เชฒเซ€ เชฎเชพเชฐเซ€ เชฐเชพเชน เชœเซ‹เชคเซ€ เชนเชคเซ€. เชฒเซ‡เช–เช•เซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชชเซเชธเซเชคเช•เชพเชฒเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เช•เซเชฒเชฟเชชเชฌเซ‹เชฐเซเชกเชœเซ‡เชเชธ, เชœเซ‡ เชคเชฎเชจเซ‡ เชชเชธเช‚เชฆ เช•เชฐเซ‡เชฒ เชŸเซ‡เช•เซเชธเซเชŸเชจเชพ เช†เชงเชพเชฐเซ‡ เชซเซเชฒเซ‡เชถ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชตเชฟเชจเชพ เช•เซเชฒเชฟเชชเชฌเซ‹เชฐเซเชก เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เชฎเซ‡เช‚ เชกเชฟเชธเซเชชเซเชฒเซ‡:เช•เซ‹เชˆ เชจเชนเซ€เช‚; เชธเชพเชฅเซ‡เชจเชพ เชคเชคเซเชตเชฎเชพเช‚ เชฎเชพเชฐเซ‹ base64 เชฎเซ‚เช•เชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚, เชชเชฐเช‚เชคเซ เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชนเซเช‚ เชคเซ‡เชจเซ‡ เช•เซเชฒเชฟเชชเชฌเซ‹เชฐเซเชก เชชเชฐ เชฎเซ‚เช•เซ€ เชถเช•เซเชฏเซ‹ เชจเชนเซ€เช‚ เช•เชพเชฐเชฃ เช•เซ‡ เช•เซ‹เชˆ เชตเชฟเชญเชพเชœเชจ เชฅเชคเซเช‚ เชจเชฅเซ€. เชคเซ‡เชฅเซ€, เชชเซเชฐเชฆเชฐเซเชถเชจเชจเซ‡ เชฌเชฆเชฒเซ‡:none; เชฎเซ‡เช‚ เช•เชฐเซเชฏเซเช‚

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

เชœเซ‡เชฃเซ‡ เชฎเชจเซ‡ เชคเชคเซเชตเชจเซ‡ เชฆเซƒเชถเซเชฏเชฎเชพเช‚เชฅเซ€ เช›เซเชชเชพเชตเชตเชพ เช…เชจเซ‡ เชตเชพเชธเซเชคเชตเชฎเชพเช‚ เชคเซ‡เชจเซ‡ เชชเซƒเชทเซเช  เชชเชฐ เช›เซ‹เชกเซ€ เชฆเซ‡เชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ€. เชตเซ‹เช‡เชฒเชพ, เช•เชพเชฐเซเชฏ เชชเซ‚เชฐเซเชฃ เชฅเชฏเซเช‚, เชœเซเชฏเชพเชฐเซ‡ เชฎเซ‡เช‚ เชฎเชพเชฐเชพ เชฌเชŸเชจ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซเชฏเซเช‚, เชคเซเชฏเชพเชฐเซ‡ เชฌเชซเชฐเชฎเชพเช‚ เช†เชจเซ€ เชœเซ‡เชฎ เชเช• เชฒเชพเช‡เชจ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€:

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

เชœเซ‡ เชฎเซ‡เช‚ เชธเชฐเซเชตเชฐ เชชเชฐเชจเชพ เช•เชจเซเชธเซ‹เชฒเชฎเชพเช‚ เช–เชพเชฒเซ€ เชชเซ‡เชธเซเชŸ เช•เชฐเซเชฏเซเช‚ เช…เชจเซ‡ เชคเชฐเชค เชœ เชคเชฎเชพเชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“ เชธเชพเชฅเซ‡ เชเชฟเชช เช†เชฐเซเช•เชพเช‡เชต เชชเซเชฐเชพเชชเซเชค เช•เชฐเซเชฏเซเช‚.
เช…เชจเซ‡, เช…เชฒเชฌเชคเซเชค, เชฎเซ‡เช‚ เชฒเซ‡เช–เช•เชจเซ‡ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€ เชฎเซ‹เช•เชฒเซ€, เช•เชพเชฐเชฃ เช•เซ‡... เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเช•เซเชฐเชฟเชฏ เช…เชจเซ‡ เชœเซ€เชตเช‚เชค เช›เซ‡, เชนเซเช‚ เชฒเซ‡เช–เช• เชคเชฐเชซเชฅเซ€ เช…เชชเชกเซ‡เชŸเซเชธ เชœเซ‹เชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ เช…เชจเซ‡ เชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชฌเชŸเชจ เช›เซ‡) เชฐเชธ เชงเชฐเชพเชตเชคเชพ เชฒเซ‹เช•เซ‹ เชฎเชพเชŸเซ‡, เชคเซ‡ เช…เชนเซ€เช‚ เช›เซ‡ เชฎเชพเชฐเซ‹ เช•เชพเช‚เชŸเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช…เชจเซ‡ เชนเซเช‚ เชตเชฟเชจเช‚เชคเซ€ เช–เซ‡เช‚เชšเซ‹, เชœเซเชฏเชพเช‚ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ เชฎเซ‡เช‚ เชถเซเช‚ เชธเซเชงเชพเชฐเซเชฏเซเช‚/ เช‰เชฎเซ‡เชฐเซเชฏเซเช‚ เช›เซ‡.
เชธเซŒเชจเซ‡ เชตเชฟเช•เชพเชธเชจเซ€ เชถเซเชญเช•เชพเชฎเชจเชพเช“)

nginx เชฎเชพเชŸเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“เชจเซเช‚ เชจเชฟเชฐเซเชฎเชพเชฃ, เชเช• เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€เชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹