nginx لاءِ ترتيبن جي پيدائش، ھڪڙي پل جي درخواست جي تاريخ

سلام ، ساٿيو. منهنجي جنگي سرور تي خوبصورت نگنڪس 2006 کان هلي رهيو آهي ۽ ان جي انتظاميه جي ڪيترن سالن کان مون تمام گهڻيون ترتيبون ۽ ٽيمپليٽس گڏ ڪيا آهن. مون نينڪس جي تمام گهڻي ساراهه ڪئي ۽ ڪنهن طرح اهو ظاهر ٿيو ته مون حب تي هڪ نينڪس هب پڻ شروع ڪيو، پڻ، ڏيکاريو m/
دوستن مون کي انھن لاءِ ڊولپمينٽ فارم ٺاھڻ لاءِ چيو ۽ انھن کي پنھنجي مخصوص ٽيمپليٽس کي ڇڪڻ بدران مون کي ھڪ دلچسپ پروجيڪٽ ياد آيو. nginxconfig.io، جيڪو شيلف تي ترتيبن کي اسڪري ڪري ٿو ۽ هر شي کي تيار ڪري ٿو lets encrypt، وغيره. مون سوچيو، ڇو نه؟ بهرحال، مون کي ان حقيقت کان بيزار ٿي ويو هو ته nginxconfig مون کي پيش ڪري ٿو زپ آرڪائيو کي برائوزر ۾ ڊائون لوڊ ڪرڻ جي، بغير مون کي ان کي سڌو سنئون سرور تي اپلوڊ ڪرڻ جي اجازت ڏيڻ جي wget/fetch/curl استعمال ڪندي. ڇا بيوقوف، مون کي ان جي برائوزر ۾ ڇو ضرورت آهي، مون کي ان جي سرور تي ڪنسول جي ضرورت آهي. ناراض، مان گيٿب ڏانهن ويو ته منصوبي جي همت کي ڏسڻ لاء، جنهن جي نتيجي ۾ ان جي ڪانٽو ۽ نتيجي ۾، هڪ ڇڪڻ جي درخواست. جنهن بابت مان نه لکان ها جيڪڏهن اهو دلچسپ نه هجي ها 😉

nginx لاءِ ترتيبن جي پيدائش، ھڪڙي پل جي درخواست جي تاريخ

يقينن، ذريعن کي ڳولهڻ کان اڳ، مون ڏٺو ته ڪروم ڪٿي ٺاهيل زپ آرڪائيو کي ترتيب سان ٺاهي ٿو، ۽ اتي "بلاب:" سان شروع ٿيندڙ هڪ پتو منهنجي انتظار ۾ هو، اوهه. اهو اڳ ۾ ئي واضح ٿي چڪو آهي ته خدمت رستي ۾ ڪجھ به پيدا نٿو ڪري، حقيقت ۾، اهو سڀ ڪجهه js پاران ڪيو ويو آهي. درحقيقت، زپ آرڪائيو ڪلائنٽ، برائوزر، ۽ جاوا اسڪرپٽ طرفان ٺاهيل آهي. اهي. خوبصورتي اها آهي ته پروجيڪٽ nginxconfig.io صرف html صفحي جي طور تي محفوظ ڪري سگھجي ٿو، ڪجھ تي اپلوڊ narod.ru ۽ اهو ڪم ڪندو) اهو هڪ تمام مضحکہ خیز ۽ دلچسپ حل آهي، جڏهن ته، اهو سرور قائم ڪرڻ لاء انتهائي مشڪل آهي، حقيقت ۾، اهو منصوبو ٺاهيو ويو آهي. ٺاهيل آرڪائيو کي برائوزر سان ڊائون لوڊ ڪريو، ۽ پوء ان کي 2019 ۾ اين سي استعمال ڪندي سرور تي منتقل ڪريو؟ مون پاڻ کي مقرر ڪيو آهي هڪ طريقو ڳولڻ جو هڪ طريقو ڳولڻ جو نتيجو ترتيب واري ترتيب کي سڌو سنئون سرور ڏانهن.
پروجيڪٽ کي فورڪ ڪرڻ کان پوء، مون سوچڻ شروع ڪيو ته منهنجا اختيار ڪهڙا هئا. اهو ڪم ان ڪري پيچيده ٿي ويو هو جو مان ان شرط کان انحراف ڪرڻ نه ٿي چاهيان ته پروجيڪٽ هڪ خالص فرنٽ ائنڊ هجي، بغير ڪنهن پٺاڻ جي. يقينن، سڀ کان آسان حل نوڊجز کي ڇڪڻ ۽ ان کي سڌو لنڪس استعمال ڪندي ترتيبن سان گڏ آرڪائيو پيدا ڪرڻ لاء مجبور ڪيو ويندو.
حقيقت ۾، اتي ڪيترائي اختيار نه هئا. وڌيڪ واضح طور تي، صرف هڪ ذهن ۾ آيو. اسان کي ترتيب ڏيڻ جي ضرورت آھي ۽ ھڪڙي لنڪ حاصل ڪريو جيڪا اسان سرور ڪنسول ڏانھن نقل ڪري سگھون ٿا زپ آرڪائيو حاصل ڪرڻ لاء.
نتيجي ۾ زپ آرڪائيو ۾ ڪيتريون ئي ٽيڪسٽ فائلون ڪافي وزن، لفظي طور تي ڪجھ ڪلوبائٽس. واضع حل اهو هو ته ٺاهيل زپ آرڪائيو مان بنيادي 64 اسٽرنگ حاصل ڪيو ۽ ان کي بفر ۾ اڇلايو، جڏهن ته سرور تي ڪنسول ۾ حڪم سان

echo 'base64string' | base64 --decode > config.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');

جتي مواد زپ آرڪائيو جو نتيجو بلب اعتراض آهي.

ٺيڪ آهي، مون کي اهو ڪرڻو هو ته ان جي اڳيان هڪ ٻيو بٽڻ شامل ڪيو ۽ جڏهن مون ان تي ڪلڪ ڪيو، مان نتيجو واري زپ آرڪائيو کي برائوزر ۾ محفوظ نه ڪندس، پر ان مان بنيادي 64 ڪوڊ حاصل ڪريان. ٿوري دير کان پوءِ ، مون کي 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',
	});
};

جيئن توهان شايد محسوس ڪيو هوندو، مون زپ آرڪائيو جي نسل کي پاڻ ڏانهن منتقل ڪيو پرائيويٽ generateZip طريقو، وغيره. هي AngularJS آهي، ۽ ليکڪ پاڻ کي ڪال بڪ ڏانهن ڇڪي ٿو ۽ واعدو ذريعي ان تي عمل نه ڪيو. ڊائون لوڊ زپ اڃا تائين محفوظ ڪيوآئوٽ جي طور تي، جڏهن ته ڊائون لوڊ بيس 64 ڪجھ مختلف ڪيو. اسان هڪ FileReader اعتراض ٺاهيو جيڪو اسان وٽ html5 ۾ آيو ۽ اڳ ۾ ئي ڪافي آهي دستياب استعمال لاءِ. جيڪو، هڪ وقت ۾، هڪ بلب مان بنيادي 64 اسٽرنگ ٺاهي سگهي ٿو، يا بلڪه، اهو هڪ DataURL اسٽرنگ ٺاهي ٿو، پر اهو اسان لاء ايترو اهم ناهي، ڇاڪاڻ ته DataURL تي مشتمل آھي جيڪو اسان کي ضرورت آھي. Bingo، هڪ ننڍڙي ڇڪ منهنجي انتظار ۾ هئي جڏهن مون اهو سڀ ڪجهه بفر ۾ رکڻ جي ڪوشش ڪئي. ليکڪ منصوبي ۾ لائبريري استعمال ڪيو clipboardjs، جيڪو توهان کي ڪلپ بورڊ سان ڪم ڪرڻ جي اجازت ڏئي ٿو بغير فليش شين جي، چونڊيل متن جي بنياد تي. شروعات ۾، مون فيصلو ڪيو ته منهنجي بنيادي 64 کي هڪ عنصر ۾ ڊسپلي سان رکڻو پوندو: none؛، پر انهي صورت ۾ آئون ان کي ڪلپ بورڊ تي نه وجهي سگهيس ڇاڪاڻ ته ڪابه جدائي نه ٿيندي. تنهن ڪري، ڊسپلي جي بدران: none; مان ڪيو

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

جنهن مون کي اجازت ڏني ته ٻنهي عنصر کي ڏسڻ کان لڪايو ۽ اصل ۾ ان کي صفحي تي ڇڏي ڏيو. Voila، ڪم مڪمل ڪيو ويو، جڏھن مون پنھنجي بٽڻ تي ڪلڪ ڪيو، ھڪڙي لڪير وانگر بفر ۾ رکيل ھئي:

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

جنهن کي مون صرف سرور تي ڪنسول ۾ پيسٽ ڪيو ۽ فوري طور تي سڀني ترتيبن سان گڏ هڪ زپ آرڪائيو حاصل ڪيو.
۽، يقينا، مون ليکڪ ڏانهن هڪ پل جي درخواست موڪلي، ڇاڪاڻ ته ... پروجيڪٽ فعال ۽ جاندار آهي، مان ليکڪ کان تازه ڪاريون ڏسڻ چاهيان ٿو ۽ منهنجو پنهنجو بٽڻ آهي) دلچسپي رکندڙن لاءِ، هتي آهي منهنجو ڪانٽو پروجيڪٽ ۽ مان درخواست ڪڍو، جتي توهان ڏسي سگهو ٿا ته مون ڇا درست ڪيو/شامل ڪيو.
سڀني کي ترقي مبارڪ)

nginx لاءِ ترتيبن جي پيدائش، ھڪڙي پل جي درخواست جي تاريخ

جو ذريعو: www.habr.com

تبصرو شامل ڪريو