nginx์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ์ƒ์„ฑ, ํ•˜๋‚˜์˜ ํ’€ ์š”์ฒญ ๊ธฐ๋ก

์•ˆ๋…•ํ•˜์„ธ์š”, ๋™์ง€๋“ค. ๋‚ด ์ „ํˆฌ ์„œ๋ฒ„์—์„œ๋Š” ์•„๋ฆ„๋‹ต์Šต๋‹ˆ๋‹ค. Nginx์— 2006๋…„๋ถ€ํ„ฐ ์šด์˜๋˜์–ด ์™”์œผ๋ฉฐ ์ˆ˜๋…„ ๋™์•ˆ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ๋งŽ์€ ๊ตฌ์„ฑ๊ณผ ํ…œํ”Œ๋ฆฟ์„ ์ถ•์ ํ–ˆ์Šต๋‹ˆ๋‹ค. nginx๋ฅผ ์—„์ฒญ ์นญ์ฐฌํ–ˆ๋Š”๋ฐ ์™ ์ง€ ๊ทธ ํ—ˆ๋ธŒ์—์„œ nginx ํ—ˆ๋ธŒ๋„ ์‹œ์ž‘ํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋ฐํ˜€์กŒ๋„ค์š”.
์นœ๊ตฌ๋“ค์ด ๋‚˜์—๊ฒŒ ๊ฐœ๋ฐœ ํŒœ์„ ์„ค์ •ํ•ด ๋‹ฌ๋ผ๊ณ  ๋ถ€ํƒํ–ˆ๊ณ , ๋‚ด ํŠน์ • ํ…œํ”Œ๋ฆฟ์„ ๋“œ๋ž˜๊ทธํ•˜๋Š” ๋Œ€์‹  ํฅ๋ฏธ๋กœ์šด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ๊ฐ๋‚ฌ์Šต๋‹ˆ๋‹ค. nginxconfig.io, ๊ตฌ์„ฑ์„ ์„ ๋ฐ˜์— ๋ถ„์‚ฐ์‹œํ‚ค๊ณ  ์•”ํ˜ธํ™” ํ—ˆ์šฉ ๋“ฑ์„ ์œ„ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์™œ ์•ˆ ๋˜๋ƒ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” nginxconfig๊ฐ€ wget/fetch/curl์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์— ์ง์ ‘ ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  zip ์•„์นด์ด๋ธŒ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ๋‹ค์šด๋กœ๋“œํ•˜๋„๋ก ์ œ์•ˆํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋ถ„๋…ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ง๋„ ์•ˆ๋˜๋Š” ์†Œ๋ฆฌ, ์™œ ๋ธŒ๋ผ์šฐ์ €์— ํ•„์š”ํ•˜๊ณ  ์ฝ˜์†”์˜ ์„œ๋ฒ„์— ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ํ™”๊ฐ€ ๋‚˜์„œ ํ”„๋กœ์ ํŠธ์˜ ๋‚ด์šฉ์„ ๋ณด๊ธฐ ์œ„ํ•ด github์— ๊ฐ”๋Š”๋ฐ, ๊ทธ ๊ฒฐ๊ณผ ํฌํฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กญ์ง€ ์•Š๋‹ค๋ฉด ๊ธ€์„ ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿ˜‰

nginx์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ์ƒ์„ฑ, ํ•˜๋‚˜์˜ ํ’€ ์š”์ฒญ ๊ธฐ๋ก

๋ฌผ๋ก , ์†Œ์Šค๋ฅผ ํŒŒํ—ค์น˜๊ธฐ ์ „์— Chrome์ด ๊ตฌ์„ฑ๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑ๋œ zip ์•„์นด์ด๋ธŒ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์œ„์น˜๋ฅผ ์‚ดํŽด๋ณด์•˜๋Š”๋ฐ "blob:"๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฃผ์†Œ๊ฐ€ ๋‚˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ๋„์ค‘์— ์•„๋ฌด ๊ฒƒ๋„ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ์ด๋ฏธ ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ชจ๋“  ์ž‘์—…์€ js์— ์˜ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ zip ์•„์นด์ด๋ธŒ๋Š” ํด๋ผ์ด์–ธํŠธ, ๋ธŒ๋ผ์šฐ์ € ๋ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ž์ฒด์— ์˜ํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ์•„๋ฆ„๋‹ค์›€์€ ํ”„๋กœ์ ํŠธ๊ฐ€ nginxconfig.io ๊ฐ„๋‹จํžˆ HTML ํŽ˜์ด์ง€๋กœ ์ €์žฅํ•˜๊ณ  ์ผ๋ถ€ ํŽ˜์ด์ง€์— ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. narod.ru ๊ทธ๋Ÿฌ๋ฉด ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค) ์ด๊ฒƒ์€ ๋งค์šฐ ์žฌ๋ฏธ ์žˆ๊ณ  ํฅ๋ฏธ๋กœ์šด ์†”๋ฃจ์…˜์ด์ง€๋งŒ ์‹ค์ œ๋กœ ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋„๋ก ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์•„์นด์ด๋ธŒ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋กœ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„ NC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. 2019๋…„์—๋Š”? ๋‚˜๋Š” ๊ฒฐ๊ณผ ๊ตฌ์„ฑ์„ ์„œ๋ฒ„์— ์ง์ ‘ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ์ž‘์—…์„ ์Šค์Šค๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ”„๋กœ์ ํŠธ๋ฅผ ํฌํฌํ•œ ํ›„, ๋‚˜๋Š” ๋‚ด ์„ ํƒ์ด ๋ฌด์—‡์ธ์ง€ ์ƒ๊ฐํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฐฑ์—”๋“œ ์—†์ด ์ˆœ์ˆ˜ํ•œ ํ”„๋ŸฐํŠธ์—”๋“œ๋กœ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์—์„œ ๋ฒ—์–ด๋‚˜๊ณ  ์‹ถ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…์ด ๋ณต์žกํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์€ nodejs๋ฅผ ๋Œ์–ด์™€ ์ง์ ‘ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ์ด ํฌํ•จ๋œ ์•„์นด์ด๋ธŒ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์‚ฌ์‹ค ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ๋ณ„๋กœ ์—†์—ˆ์–ด์š”. ๋” ์ •ํ™•ํ•˜๊ฒŒ๋Š” ๋”ฑ ํ•˜๋‚˜๋งŒ ๋– ์˜ฌ๋ž๋‹ค. zip ์•„์นด์ด๋ธŒ๋ฅผ ์–ป์œผ๋ ค๋ฉด ๊ตฌ์„ฑ์„ ์„ค์ •ํ•˜๊ณ  ์„œ๋ฒ„ ์ฝ˜์†”์— ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋งํฌ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ zip ์•„์นด์ด๋ธŒ์— ํฌํ•จ๋œ ์—ฌ๋Ÿฌ ํ…์ŠคํŠธ ํŒŒ์ผ์˜ ๋ฌด๊ฒŒ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ช‡ ํ‚ฌ๋กœ๋ฐ”์ดํŠธ์— ๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์ƒ์„ฑ๋œ zip ์•„์นด์ด๋ธŒ์—์„œ base64 ๋ฌธ์ž์—ด์„ ๊ฐ€์ ธ์™€ ๋ฒ„ํผ์— ๋„ฃ๋Š” ๋™์‹œ์— ์„œ๋ฒ„์—์„œ ์ฝ˜์†”์˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

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๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ๊ณต๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ๋ณดํ˜ธ๊ธฐ.js:

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

์—ฌ๊ธฐ์„œ content๋Š” zip ์•„์นด์ด๋ธŒ์˜ ๊ฒฐ๊ณผ blob ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

์ข‹์•„, ๋‚ด๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์€ ๊ทธ ์˜†์— ๋˜ ๋‹ค๋ฅธ ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋ฟ์ด์—ˆ๊ณ , ๊ทธ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๊ฒฐ๊ณผ zip ์•„์นด์ด๋ธŒ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋กœ๋ถ€ํ„ฐ base64 ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ๋…ธ๋ ฅ ๋์— ํ•˜๋‚˜์˜ 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 ์•„์นด์ด๋ธŒ ์ƒ์„ฑ ์ž์ฒด๋ฅผ ๋น„๊ณต๊ฐœ generateZip ๋ฉ”์†Œ๋“œ ๋“ฑ์œผ๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด AngularJS์ธ๋ฐ ์ž‘์„ฑ์ž ์ž์‹ ์ด ์ฝœ๋ฐฑ๋งŒ ๊ณ ์ˆ˜ํ•˜๊ณ  Promise๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. downloadZip์€ ์—ฌ์ „ํžˆ โ€‹โ€‹saveAs๋ฅผ ์ถœ๋ ฅ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ downloadBase64๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” html5์—์„œ ์ œ๊ณต๋˜์—ˆ๋˜ FileReader ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์–ป๊ธฐ ์‰ฌ์šด ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•œ. ํ•œ ๋ฒˆ์— blob์—์„œ base64 ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์˜คํžˆ๋ ค DataURL ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. DataURL์—๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ํ•„์š”ํ•œ ๊ฒƒ์ด ์ •ํ™•ํžˆ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋น™๊ณ , ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋ฒ„ํผ์— ๋„ฃ์œผ๋ ค๊ณ  ํ•  ๋•Œ ์•ฝ๊ฐ„์˜ ๊ฑธ๋ฆผ๋Œ์ด ๋‚˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ž‘์„ฑ์ž๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆฝ๋ณด๋“œ, ์„ ํƒํ•œ ํ…์ŠคํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”Œ๋ž˜์‹œ ๊ฐœ์ฒด ์—†์ด ํด๋ฆฝ๋ณด๋“œ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” base64๋ฅผ display:none; ์š”์†Œ์— ๋„ฃ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์ง€๋งŒ ์ด ๊ฒฝ์šฐ์—๋Š” ํด๋ฆฝ๋ณด๋“œ์— ๋„ฃ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ฆฌ๊ฐ€ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€์‹ ์— display:none; ๋‚ด๊ฐ€ ๊ทธ๋žฌ์–ด

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

์ด๋ฅผ ํ†ตํ•ด ์š”์†Œ๋ฅผ ๋ณด๊ธฐ์—์„œ ์ˆจ๊ธฐ๊ณ  ์‹ค์ œ๋กœ ํŽ˜์ด์ง€์— ๊ทธ๋Œ€๋กœ ๋‘˜ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์งœ์ž”, ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ค„์ด ๋ฒ„ํผ์— ๋ฐฐ์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

์„œ๋ฒ„์˜ ์ฝ˜์†”์— ๊ฐ„๋‹จํžˆ ๋ถ™์—ฌ๋„ฃ๊ณ  ๋ชจ๋“  ๊ตฌ์„ฑ์ด ํฌํ•จ๋œ zip ์•„์นด์ด๋ธŒ๋ฅผ ์ฆ‰์‹œ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋ฌผ๋ก , ์ž‘์„ฑ์ž์—๊ฒŒ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒ๋ฉด... ํ”„๋กœ์ ํŠธ๊ฐ€ ํ™œ๋ฐœํ•˜๊ณ  ํ™œ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ์ž‘์„ฑ์ž์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋‚˜๋งŒ์˜ ๋ฒ„ํŠผ์„ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.) ๊ด€์‹ฌ ์žˆ๋Š” ๋ถ„์€ ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•˜์„ธ์š”. ๋‚ด ํฌํฌ ํ”„๋กœ์ ํŠธ์™€ ๊ทธ ์ž์‹  ํ’€ ์š”์ฒญ, ๋‚ด๊ฐ€ ์ˆ˜์ •/์ถ”๊ฐ€ํ•œ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋‘ ํ–‰๋ณตํ•œ ๋ฐœ์ „๋˜์„ธ์š”)

nginx์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ์ƒ์„ฑ, ํ•˜๋‚˜์˜ ํ’€ ์š”์ฒญ ๊ธฐ๋ก

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€