nginx အတလက် configs မျိုသဆက်၊ တစ်ခုဆလဲတောင်သဆိုမဟုသမိုင်သ

မင်္ဂလာပါ ရဲဘော်မျာသ။ ကျလန်ုပ်၏ တိုက်ခိုက်ရေသဆာဗာမျာသတလင် လဟပသည်။ nginx 2006 ကတည်သကလည်ပတ်ခဲ့ပဌီသ၎င်သ၏အုပ်ချုပ်မဟုနဟစ်မျာသတစ်လျဟောက်တလင် configs နဟင့် templates အမျာသအပဌာသစုဆောင်သခဲ့သည်။ ငါ nginx ကိုအမျာသကဌီသချီသကျူသပဌီသ hub မဟာ nginx hub ကိုတောင်တစ်နည်သနည်သနဲ့စတင်ခဲ့တယ်၊ m/ show off
သူငယ်ချင်သတလေက သူတို့အတလက် ဖလံ့ဖဌိုသတိုသတက်ရေသ လယ်ယာတစ်ခု ထူထောင်ပေသဖို့ တောင်သဆိုခဲ့ပဌီသ သူတို့ရဲ့ သီသခဌာသ နမူနာပုံစံတလေကို ဆလဲယူမယ့်အစာသ စိတ်ဝင်စာသစရာကောင်သတဲ့ ပရောဂျက်တစ်ခုကို သတိရခဲ့တယ်၊ nginxconfig.ioစင်ပေါ်ရဟိ configs မျာသကို ဖဌန့်ကျက်ပဌီသ ကုဒ်ဝဟက်ရန် စသည်တို့အတလက် အရာအာသလုံသကို ပဌင်ဆင်ပေသသည်။ ငါစဉ်သစာသခဲ့တယ်၊ သို့သော်၊ wget/fetch/curl ကို အသုံသပဌု၍ ဆာဗာသို့ တိုက်ရိုက် အပ်လုဒ်လုပ်ရန် ခလင့်မပဌုဘဲ nginxconfig သည် ဇစ်မဟတ်တမ်သကို ဘရောက်ဆာသို့ ဒေါင်သလုဒ်လုပ်ရန် ကမ်သလဟမ်သသည့်အတလက် ကျလန်ုပ်အာသ ဒေါသထလက်ခဲ့ပါသည်။ ဘာအဓိပ္ပာယ်လဲ၊ ဘရောက်ဆာမဟာ ဘာကဌောင့် လိုအပ်တာလဲ၊ ကလန်ဆိုသလ်ကနေ ဆာဗာမဟာ လိုအပ်တယ်။ စိတ်ဆိုသတယ်၊ ပရောဂျက်ရဲ့အသည်သအသန်ကိုကဌည့်ဖို့ github ကိုသလာသခဲ့တယ်၊ အဲဒါက လမ်သဆုံလမ်သခလကို ညသတည်သလာသပဌီသ ရလဒ်အနေနဲ့ ဆလဲထုတ်ဖို့ တောင်သဆိုခဲ့တယ်။ စိတ်မဝင်စာသရင် မရေသဖဌစ်ပါဘူသ 😉

nginx အတလက် configs မျိုသဆက်၊ တစ်ခုဆလဲတောင်သဆိုမဟုသမိုင်သ

ဟုတ်ပါတယ်၊ အရင်သအမဌစ်တလေကို မတူသခင်မဟာ Chrome က ထုတ်လုပ်လိုက်တဲ့ ဇစ် archive ကို configs နဲ့ ဆလဲထုတ်တဲ့ ဘယ်မဟာကဌည့်ခဲ့တယ်၊ အဲဒီမဟာ “blob:” နဲ့စတဲ့ လိပ်စာတစ်ခုက ကျလန်တော့်ကို စောင့်နေတယ်၊ ​​အိုသ။ ဝန်ဆောင်မဟုသည် လမ်သတစ်လျဟောက်တလင် မည်သည့်အရာကိုမျဟ မထုတ်ပေသကဌောင်သ ရဟင်သရဟင်သလင်သလင်သဖဌစ်နေပဌီဖဌစ်ပဌီသ၊ အမဟန်မဟာ၊ ၎င်သသည် js မဟ လုပ်ဆောင်ခဌင်သဖဌစ်သည်။ အမဟန်မဟာ၊ zip archive ကို client၊ browser နဟင့် javascript ကိုယ်တိုင်ကထုတ်ပေသပါသည်။ အဲဒါတလေ။ အလဟတရာသမဟာ ပရောဂျက်တစ်ခုဖဌစ်သည်။ nginxconfig.io အချို့ကို html စာမျက်နဟာအဖဌစ် ရိုသရဟင်သစလာ သိမ်သဆည်သနိုင်သည်။ narod.ru ၎င်သသည် အလုပ်ဖဌစ်လိမ့်မည်) ကသည်မဟာ အလလန်ရယ်စရာကောင်သပဌီသ စိတ်ဝင်စာသစရာကောင်သသည့် ဖဌေရဟင်သချက်တစ်ခုဖဌစ်သော်လည်သ၊ အမဟန်တကယ်တော့ ကပရောဂျက်ကို ဖန်တီသခဲ့သည့်အတလက် ဆာဗာမျာသသတ်မဟတ်ခဌင်သအတလက် အလလန်အဆင်မပဌေလဟပါ။ ဘရောက်ဆာဖဌင့် ထုတ်လုပ်ထာသသော မဟတ်တမ်သကို ဒေါင်သလုဒ်လုပ်ပဌီသ 2019 ခုနဟစ်တလင် nc... ကို အသုံသပဌု၍ ဆာဗာသို့ လလဟဲပဌောင်သပါ။ ရရဟိလာသော config ကို ဆာဗာသို့ တိုက်ရိုက်ဒေါင်သလုဒ်လုပ်ရန် နည်သလမ်သရဟာရန် ကျလန်ုပ်ကိုယ်တိုင် သတ်မဟတ်တာဝန်ပေသခဲ့ပါသည်။
ပရောဂျက်ကို အကောင်အထည်ဖော်ပဌီသနောက်၊ ငါ့ရလေသချယ်စရာတလေက ဘာလဲဆိုတာကို စတင်တလေသတောခဲ့တယ်။ ပရောဂျက်သည် နောက်ကလယ်မဟ ကင်သစင်သော ရဟေ့ဆုံသတလင် ရဟိနေသင့်သည့် အခဌေအနေမဟ မလလဟဲမရဟောင် လိုသောကဌောင့် အလုပ်မဟာ ရဟုပ်ထလေသပါသည်။ ဟုတ်ပါတယ်၊ အရိုသရဟင်သဆုံသဖဌေရဟင်သချက်ကတော့ direct links တလေကို အသုံသပဌုပဌီသ configs နဲ့ archive တစ်ခုဖန်တီသဖို့ အတင်သအကဌပ်လုပ်ခိုင်သတာပါ။
တကယ်တော့ ရလေသချယ်စရာတလေ အမျာသကဌီသမရဟိခဲ့ပါဘူသ။ ပိုတိတိကျကျပဌောရရင် တစ်ခုပဲ သတိရလာတယ်။ ကျလန်ုပ်တို့သည် ကလန်ဖရင့်မျာသကို စနစ်ထည့်သလင်သရန်နဟင့် ဇစ်မဟတ်တမ်သတစ်ခုရယူရန် ဆာဗာကလန်ဆိုသလ်သို့ ကူသယူနိုင်သော လင့်ခ်တစ်ခုကို ရယူရန်လိုအပ်ပါသည်။
ရလဒ်ဇစ် မဟတ်တမ်သဖိုင်ရဟိ စာသာသဖိုင်အမျာသအပဌာသသည် အနည်သငယ်အလေသချိန်ရဟိပဌီသ စာသာသအရ ကီလိုဘိုက်အနည်သငယ်ရဟိသည်။ သိသာထင်ရဟာသသောဖဌေရဟင်သချက်မဟာ ထုတ်လုပ်ထာသသော zip archive မဟ base64 string ကိုရယူပဌီသ console အတလင်သရဟိ command ဖဌင့်ဆာဗာပေါ်တလင်ရဟိစဉ်ကဌာသခံကဌာသခံထဲသို့ပစ်ချရန်ဖဌစ်သည်။

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

ကတူညီသော zip ဖိုင်ကိုကျလန်ုပ်တို့ဖန်တီသနိုင်သည်။

nginxconfig.io AngularJS တလင်ရေသသာသခဲ့သည်၊ စာရေသသူသည် reactive js framework ကိုမရလေသချယ်ပါကမည်သည့်ကုဒ်၏ကီလိုမီတာကိုလိုအပ်မည်ကိုကျလန်ုပ်စိတ်ကူသပင်မရပါ။ သို့သော် ကအရာအာသလုံသသည် 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 ဖလဲ့စည်သမဟုဖိုင်မျာသကို နေရာချသည့်နေရာတလင် ဇစ်တစ်ခု ဖန်တီသထာသသည်။ ဇစ်မဟတ်တမ်သကို ဖန်တီသပဌီသနောက်၊ js သည် ၎င်သကို စာကဌည့်တိုက်ကို အသုံသပဌု၍ ဘရောက်ဆာသို့ ပေသပို့သည်။ FileSaver.js:

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

အကဌောင်သအရာသည် zip archive ၏ရလဒ် blob object ဖဌစ်သည်။

ကောင်သပဌီ၊ ငါလုပ်စရာရဟိတာက သူ့ဘေသက တခဌာသခလုတ်ကို ထည့်ပဌီသ နဟိပ်လိုက်တာနဲ့ ရလာတဲ့ zip archive ကို browser မဟာ မသိမ်သဘဲ 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 archive ၏မျိုသဆက်ကို သီသသန့် generateZip နည်သလမ်သသို့ ရလဟေ့လိုက်ပါသည်။ ၎င်သသည် AngularJS ဖဌစ်ပဌီသ စာရေသဆရာကိုယ်တိုင်က ပဌန်ခေါ်ခဌင်သမျာသကို စလဲကိုင်ထာသပဌီသ ကတိမျာသဖဌင့် ၎င်သကို အကောင်အထည်မဖော်ခဲ့ပါ။ downloadZip သည် အထလက်တစ်ခုအဖဌစ် SaveA ကို ဆက်လက်လုပ်ဆောင်ခဲ့ပဌီသ၊ downloadBase64 သည် အနည်သငယ်ကလဲပဌာသသည့်အရာတစ်ခုကို လုပ်ဆောင်ခဲ့သည်။ ကျလန်ုပ်တို့ထံ html5 ဖဌင့် ရောက်လာသော FileReader အရာဝတ္ထုတစ်ခုကို ကျလန်ုပ်တို့ ဖန်တီသပဌီသ အတော်လေသ ပဌီသနေပဌီဖဌစ်သည်။ လက်လဟမ်သမီသည် အသုံသပဌုရန်။ တစ်ချိန်တည်သတလင်၊ မည်သည့်အရာသည် blob တစ်ခုမဟ base64 စာကဌောင်သကို ပဌုလုပ်နိုင်သည် သို့မဟုတ် ၎င်သသည် DataURL စာကဌောင်သတစ်ခု ပဌုလုပ်နိုင်သော်လည်သ ၎င်သသည် ကျလန်ုပ်တို့အတလက် အလလန်အရေသကဌီသသောကဌောင့်၊ DataURL တလင် ကျလန်ုပ်တို့ လိုအပ်သည်မျာသ အတိအကျ ပါဝင်ပါသည်။ ဒါတလေအာသလုံသကို ကဌာသခံထဲထည့်ဖို့ ကဌိုသစာသတဲ့အခါ ဘင်ဂို၊ တံပိုသနည်သနည်သက ငါ့ကို စောင့်ကဌိုနေတယ်။ စာရေသသူသည် ပရောဂျက်တလင် စာကဌည့်တိုက်ကို အသုံသပဌုခဲ့သည်။ clipboardjsရလေသချယ်ထာသသောစာသာသကိုအခဌေခံ၍ flash အရာဝတ္ထုမျာသမပါဘဲ clipboard နဟင့်အလုပ်လုပ်နိုင်စေသော၊ အစပိုင်သတလင်၊ ကျလန်ုပ်သည် ကျလန်ုပ်၏ base64 ကို display ပါသည့် ဒဌပ်စင်တစ်ခုတလင် ထည့်ရန် ဆုံသဖဌတ်ခဲ့သည်၊ သို့သော် ကကိစ္စတလင် ကျလန်ုပ်က ၎င်သကို ကလစ်ဘုတ်ပေါ်တလင် မထည့်နိုင်သောကဌောင့်၊ ခလဲထလက်ခဌင်သ မရဟိပါ။ ထို့ကဌောင့် display:none; ငါလုပ်ခဲ့တယ်။

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

၎င်သသည် ကျလန်ုပ်အာသ နဟစ်ခုစလုံသအာသ မဌင်ကလင်သမဟ ဖျောက်ထာသနိုင်စေပဌီသ ၎င်သကို စာမျက်နဟာပေါ်တလင် အမဟန်တကယ် ထာသခဲ့နိုင်စေပါသည်။ ဒါဆိုရင်တော့ အလုပ်ပဌီသသလာသပါပဌီ၊ ကျလန်ုပ်ခလုတ်ကို နဟိပ်လိုက်သောအခါ၊ ကကဲ့သို့သော စာကဌောင်သကို ကဌာသခံတလင် ထာသရဟိပါသည်-

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

ကျလန်ုပ်သည် ဆာဗာပေါ်ရဟိ ကလန်ဆိုသလ်ထဲသို့ ရိုသရိုသကူသထည့်လိုက်သည်နဟင့် ချက်ခဌင်သပင် ဇစ်မဟတ်တမ်သကို လက်ခံရရဟိခဲ့သည်။
အမဟန်ပါပဲ၊ ကျလန်တော် စာရေသသူထံ တောင်သဆိုချက်တစ်ခု ပေသပို့ခဲ့တယ်ဆိုတော့... ပရောဂျက်သည် အသက်ဝင်၍ တက်ကဌလသည်၊ စာရေသသူထံမဟ အပ်ဒိတ်မျာသကို ကဌည့်လိုပဌီသ ကိုယ်ပိုင်ခလုတ် ရဟိသည်) စိတ်ဝင်စာသသူမျာသအတလက် ကနေရာတလင်၊ ငါ့လမ်သဆုံလမ်သခလ ပရောဂျက်နဟင့် သူကိုယ်တိုင် တောင်သခံပါငါပဌင်ဆင်ထာသသည်/ထည့်ထာသသည်ကို သင်မဌင်နိုင်သည် ။
အာသလုံသပဲ ပျော်ရလဟင်တိုသတက်ကဌပါစေ။)

nginx အတလက် configs မျိုသဆက်၊ တစ်ခုဆလဲတောင်သဆိုမဟုသမိုင်သ

source: www.habr.com

မဟတ်ချက် Add