nginx ಗಾಗಿ ಸಂರಚನೆಗಳ ಉತ್ಪಾದನೆ, ಒಂದು ಪುಲ್ ವಿನಂತಿಯ ಇತಿಹಾಸ

ಶುಭಾಶಯಗಳು, ಒಡನಾಡಿಗಳು. ನನ್ನ ಯುದ್ಧ ಸರ್ವರ್‌ಗಳಲ್ಲಿ ಸುಂದರವಾಗಿದೆ nginx 2006 ರಿಂದ ಚಾಲನೆಯಲ್ಲಿದೆ ಮತ್ತು ಅದರ ಆಡಳಿತದ ವರ್ಷಗಳಲ್ಲಿ ನಾನು ಬಹಳಷ್ಟು ಸಂರಚನೆಗಳು ಮತ್ತು ಟೆಂಪ್ಲೇಟ್‌ಗಳನ್ನು ಸಂಗ್ರಹಿಸಿದ್ದೇನೆ. ನಾನು nginx ಅನ್ನು ಸಾಕಷ್ಟು ಹೊಗಳಿದ್ದೇನೆ ಮತ್ತು ಹೇಗಾದರೂ ನಾನು ಹಬ್‌ನಲ್ಲಿ nginx ಹಬ್ ಅನ್ನು ಸಹ ಪ್ರಾರಂಭಿಸಿದೆ, m/ ಅನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತೇನೆ
ಅವರಿಗಾಗಿ ಅಭಿವೃದ್ಧಿ ಫಾರ್ಮ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲು ಸ್ನೇಹಿತರು ನನ್ನನ್ನು ಕೇಳಿದರು ಮತ್ತು ನನ್ನ ನಿರ್ದಿಷ್ಟ ಟೆಂಪ್ಲೇಟ್‌ಗಳನ್ನು ಎಳೆಯುವ ಬದಲು, ನಾನು ಆಸಕ್ತಿದಾಯಕ ಯೋಜನೆಯನ್ನು ನೆನಪಿಸಿಕೊಂಡೆ nginxconfig.io, ಇದು ಕಪಾಟಿನಲ್ಲಿ ಸಂರಚನೆಗಳನ್ನು ಹರಡುತ್ತದೆ ಮತ್ತು ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲು ಎಲ್ಲವನ್ನೂ ಸಿದ್ಧಪಡಿಸುತ್ತದೆ, ಇತ್ಯಾದಿ. ನಾನು ಯೋಚಿಸಿದೆ, ಏಕೆ ಇಲ್ಲ? ಆದಾಗ್ಯೂ, wget/fetch/curl ಅನ್ನು ಬಳಸಿಕೊಂಡು ನೇರವಾಗಿ ಸರ್ವರ್‌ಗೆ ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಅನುಮತಿಸದೆ, ಬ್ರೌಸರ್‌ಗೆ ಜಿಪ್ ಆರ್ಕೈವ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು nginxconfig ನನಗೆ ನೀಡುತ್ತದೆ ಎಂಬ ಅಂಶದಿಂದ ನಾನು ಕೋಪಗೊಂಡಿದ್ದೇನೆ. ಏನು ಅಸಂಬದ್ಧ, ಬ್ರೌಸರ್ನಲ್ಲಿ ನನಗೆ ಏಕೆ ಬೇಕು, ಕನ್ಸೋಲ್ನಿಂದ ಸರ್ವರ್ನಲ್ಲಿ ನನಗೆ ಬೇಕು. ಕೋಪಗೊಂಡ, ನಾನು ಯೋಜನೆಯ ಧೈರ್ಯವನ್ನು ನೋಡಲು ಗಿಥಬ್‌ಗೆ ಹೋದೆ, ಅದು ಅದರ ಫೋರ್ಕ್‌ಗೆ ಕಾರಣವಾಯಿತು ಮತ್ತು ಪರಿಣಾಮವಾಗಿ, ಪುಲ್ ವಿನಂತಿ. ಇದು ಆಸಕ್ತಿದಾಯಕವಾಗಿಲ್ಲದಿದ್ದರೆ ನಾನು ಅದರ ಬಗ್ಗೆ ಬರೆಯುವುದಿಲ್ಲ

nginx ಗಾಗಿ ಸಂರಚನೆಗಳ ಉತ್ಪಾದನೆ, ಒಂದು ಪುಲ್ ವಿನಂತಿಯ ಇತಿಹಾಸ

ಸಹಜವಾಗಿ, ಮೂಲಗಳನ್ನು ಅಗೆಯುವ ಮೊದಲು, ಸಂರಚನೆಗಳೊಂದಿಗೆ ರಚಿಸಲಾದ ಜಿಪ್ ಆರ್ಕೈವ್ ಅನ್ನು ಕ್ರೋಮ್ ಎಲ್ಲಿ ಎಳೆಯುತ್ತದೆ ಎಂದು ನಾನು ನೋಡಿದೆ ಮತ್ತು ಅಲ್ಲಿ "ಬ್ಲಾಬ್:" ಎಂದು ಪ್ರಾರಂಭವಾಗುವ ವಿಳಾಸವು ನನಗಾಗಿ ಕಾಯುತ್ತಿದೆ, ಓಹ್. ಸೇವೆಯು ದಾರಿಯುದ್ದಕ್ಕೂ ಏನನ್ನೂ ಉತ್ಪಾದಿಸುವುದಿಲ್ಲ ಎಂಬುದು ಈಗಾಗಲೇ ಸ್ಪಷ್ಟವಾಗಿದೆ, ವಾಸ್ತವವಾಗಿ, ಇದು js ನಿಂದ ಮಾಡಲ್ಪಟ್ಟಿದೆ. ವಾಸ್ತವವಾಗಿ, ಜಿಪ್ ಆರ್ಕೈವ್ ಅನ್ನು ಕ್ಲೈಂಟ್, ಬ್ರೌಸರ್ ಮತ್ತು ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಮೂಲಕ ರಚಿಸಲಾಗಿದೆ. ಆ. ಸೌಂದರ್ಯವು ಯೋಜನೆಯಾಗಿದೆ nginxconfig.io ಸರಳವಾಗಿ html ಪುಟವಾಗಿ ಉಳಿಸಬಹುದು, ಕೆಲವರಿಗೆ ಅಪ್‌ಲೋಡ್ ಮಾಡಬಹುದು narod.ru ಮತ್ತು ಇದು ಕೆಲಸ ಮಾಡುತ್ತದೆ) ಇದು ತುಂಬಾ ತಮಾಷೆ ಮತ್ತು ಆಸಕ್ತಿದಾಯಕ ಪರಿಹಾರವಾಗಿದೆ, ಆದಾಗ್ಯೂ, ಸರ್ವರ್‌ಗಳನ್ನು ಹೊಂದಿಸಲು ಇದು ಭಯಾನಕ ಅನಾನುಕೂಲವಾಗಿದೆ, ವಾಸ್ತವವಾಗಿ, ನಿಖರವಾಗಿ ಈ ಯೋಜನೆಯನ್ನು ರಚಿಸಲಾಗಿದೆ. ರಚಿಸಲಾದ ಆರ್ಕೈವ್ ಅನ್ನು ಬ್ರೌಸರ್‌ನೊಂದಿಗೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಿ, ತದನಂತರ ಅದನ್ನು 2019 ರಲ್ಲಿ nc... ಬಳಸಿಕೊಂಡು ಸರ್ವರ್‌ಗೆ ವರ್ಗಾಯಿಸುವುದೇ? ಫಲಿತಾಂಶದ ಸಂರಚನೆಯನ್ನು ನೇರವಾಗಿ ಸರ್ವರ್‌ಗೆ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲು ಮಾರ್ಗವನ್ನು ಹುಡುಕುವ ಕಾರ್ಯವನ್ನು ನಾನು ಹೊಂದಿಸಿದ್ದೇನೆ.
ಯೋಜನೆಯನ್ನು ಫೋರ್ಕ್ ಮಾಡಿದ ನಂತರ, ನನ್ನ ಆಯ್ಕೆಗಳು ಏನೆಂದು ನಾನು ಯೋಚಿಸಲು ಪ್ರಾರಂಭಿಸಿದೆ. ಯೋಜನೆಯು ಯಾವುದೇ ಬ್ಯಾಕ್-ಎಂಡ್ ಇಲ್ಲದೆ ಶುದ್ಧ ಮುಂಭಾಗವಾಗಿ ಉಳಿಯಬೇಕು ಎಂಬ ಷರತ್ತಿನಿಂದ ವಿಚಲನಗೊಳ್ಳಲು ನಾನು ಬಯಸುವುದಿಲ್ಲ ಎಂಬ ಅಂಶದಿಂದ ಕಾರ್ಯವು ಜಟಿಲವಾಗಿದೆ. ಸಹಜವಾಗಿ, ಸರಳವಾದ ಪರಿಹಾರವೆಂದರೆ ನೋಡೆಜ್‌ಗಳನ್ನು ಎಳೆಯುವುದು ಮತ್ತು ನೇರ ಲಿಂಕ್‌ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸಂರಚನೆಗಳೊಂದಿಗೆ ಆರ್ಕೈವ್ ಅನ್ನು ರಚಿಸಲು ಒತ್ತಾಯಿಸುವುದು.
ವಾಸ್ತವವಾಗಿ, ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳು ಇರಲಿಲ್ಲ. ಹೆಚ್ಚು ನಿಖರವಾಗಿ, ಒಂದೇ ಒಂದು ಮನಸ್ಸಿಗೆ ಬಂದಿತು. ನಾವು ಸಂರಚನೆಗಳನ್ನು ಹೊಂದಿಸಬೇಕು ಮತ್ತು ಜಿಪ್ ಆರ್ಕೈವ್ ಪಡೆಯಲು ಸರ್ವರ್ ಕನ್ಸೋಲ್‌ಗೆ ನಕಲಿಸಬಹುದಾದ ಲಿಂಕ್ ಅನ್ನು ಪಡೆಯಬೇಕು.
ಪರಿಣಾಮವಾಗಿ ಜಿಪ್ ಆರ್ಕೈವ್‌ನಲ್ಲಿನ ಹಲವಾರು ಪಠ್ಯ ಫೈಲ್‌ಗಳು ಸ್ವಲ್ಪಮಟ್ಟಿಗೆ ತೂಗುತ್ತವೆ, ಅಕ್ಷರಶಃ ಕೆಲವು ಕಿಲೋಬೈಟ್‌ಗಳು. ಕನ್ಸೋಲ್‌ನಲ್ಲಿ ಆಜ್ಞೆಯನ್ನು ಹೊಂದಿರುವ ಸರ್ವರ್‌ನಲ್ಲಿರುವಾಗ, ರಚಿಸಲಾದ ಜಿಪ್ ಆರ್ಕೈವ್‌ನಿಂದ ಬೇಸ್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');

ಅಲ್ಲಿ ವಿಷಯವು ಜಿಪ್ ಆರ್ಕೈವ್‌ನ ಬೊಟ್ಟು ವಸ್ತುವಾಗಿದೆ.

ಸರಿ, ನಾನು ಮಾಡಬೇಕಾಗಿರುವುದು ಅದರ ಪಕ್ಕದಲ್ಲಿ ಮತ್ತೊಂದು ಬಟನ್ ಅನ್ನು ಸೇರಿಸುವುದು ಮತ್ತು ನಾನು ಅದರ ಮೇಲೆ ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ, ನಾನು ಪರಿಣಾಮವಾಗಿ ಜಿಪ್ ಆರ್ಕೈವ್ ಅನ್ನು ಬ್ರೌಸರ್‌ಗೆ ಉಳಿಸುವುದಿಲ್ಲ, ಆದರೆ ಅದರಿಂದ ಬೇಸ್ 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',
	});
};

ನೀವು ಗಮನಿಸಿರುವಂತೆ, ನಾನು ಜಿಪ್ ಆರ್ಕೈವ್‌ನ ಪೀಳಿಗೆಯನ್ನು ಖಾಸಗಿ ಜನರೇಟ್‌ಜಿಪ್ ವಿಧಾನಕ್ಕೆ ಸರಿಸಿದೆ, ಇತ್ಯಾದಿ. ಇದು AngularJS, ಮತ್ತು ಲೇಖಕರು ಸ್ವತಃ ಕಾಲ್‌ಬ್ಯಾಕ್‌ಗಳಿಗೆ ಅಂಟಿಕೊಳ್ಳುತ್ತಾರೆ ಮತ್ತು ಭರವಸೆಗಳ ಮೂಲಕ ಅದನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲಿಲ್ಲ. ಡೌನ್‌ಲೋಡ್‌ಜಿಪ್ ಇನ್ನೂ ಸೇವ್ಆಸ್ ಅನ್ನು ಔಟ್‌ಪುಟ್‌ನಂತೆ ಮಾಡಿದೆ, ಆದರೆ ಡೌನ್‌ಲೋಡ್‌ಬೇಸ್ 64 ಸ್ವಲ್ಪ ವಿಭಿನ್ನವಾಗಿದೆ. ನಾವು ಫೈಲ್ ರೀಡರ್ ವಸ್ತುವನ್ನು ರಚಿಸುತ್ತೇವೆ ಅದು ನಮಗೆ html5 ನಲ್ಲಿ ಬಂದಿದೆ ಮತ್ತು ಈಗಾಗಲೇ ಸಾಕಷ್ಟು ಆಗಿದೆ ಲಭ್ಯವಿದೆ ಬಳಕೆಗೆ. ಇದು, ಒಂದು ಸಮಯದಲ್ಲಿ, ಒಂದು ಬ್ಲಾಬ್‌ನಿಂದ ಬೇಸ್64 ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಮಾಡಬಹುದು, ಅಥವಾ ಬದಲಿಗೆ, ಇದು DataURL ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಮಾಡುತ್ತದೆ, ಆದರೆ ಇದು ನಮಗೆ ಅಷ್ಟು ಮುಖ್ಯವಲ್ಲ, ಏಕೆಂದರೆ DataURL ನಮಗೆ ಬೇಕಾದುದನ್ನು ನಿಖರವಾಗಿ ಒಳಗೊಂಡಿದೆ. ಬಿಂಗೊ, ನಾನು ಇದನ್ನೆಲ್ಲ ಬಫರ್‌ನಲ್ಲಿ ಹಾಕಲು ಪ್ರಯತ್ನಿಸಿದಾಗ ನನಗೆ ಸ್ವಲ್ಪ ತೊಂದರೆ ಕಾದಿತ್ತು. ಲೇಖಕರು ಯೋಜನೆಯಲ್ಲಿ ಗ್ರಂಥಾಲಯವನ್ನು ಬಳಸಿದರು ಕ್ಲಿಪ್ಬೋರ್ಡ್ಜೆಗಳು, ಆಯ್ದ ಪಠ್ಯದ ಆಧಾರದ ಮೇಲೆ ಫ್ಲ್ಯಾಷ್ ಆಬ್ಜೆಕ್ಟ್ಗಳಿಲ್ಲದೆ ಕ್ಲಿಪ್ಬೋರ್ಡ್ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಆರಂಭದಲ್ಲಿ, ನನ್ನ ಬೇಸ್ 64 ಅನ್ನು ಡಿಸ್ಪ್ಲೇ ಇರುವ ಅಂಶದಲ್ಲಿ ಹಾಕಲು ನಿರ್ಧರಿಸಿದೆ: ಯಾವುದೂ ಇಲ್ಲ;, ಆದರೆ ಈ ಸಂದರ್ಭದಲ್ಲಿ ನಾನು ಅದನ್ನು ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ನಲ್ಲಿ ಹಾಕಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ ಏಕೆಂದರೆ ಯಾವುದೇ ಪ್ರತ್ಯೇಕತೆ ಸಂಭವಿಸುವುದಿಲ್ಲ. ಆದ್ದರಿಂದ, ಪ್ರದರ್ಶನದ ಬದಲಿಗೆ: ಯಾವುದೂ ಇಲ್ಲ; ನಾನು ಮಾಡಿದ್ದೆನೆ

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

ಇದು ಅಂಶವನ್ನು ವೀಕ್ಷಣೆಯಿಂದ ಮರೆಮಾಡಲು ಮತ್ತು ಅದನ್ನು ಪುಟದಲ್ಲಿ ಬಿಡಲು ನನಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಟ್ಟಿತು. Voila, ಕಾರ್ಯವು ಪೂರ್ಣಗೊಂಡಿದೆ, ನಾನು ನನ್ನ ಬಟನ್ ಅನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ, ಈ ರೀತಿಯ ಸಾಲನ್ನು ಬಫರ್‌ನಲ್ಲಿ ಇರಿಸಲಾಗಿದೆ:

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

ನಾನು ಸರ್ವರ್‌ನಲ್ಲಿ ಕನ್ಸೋಲ್‌ಗೆ ಸರಳವಾಗಿ ಅಂಟಿಸಿದ್ದೇನೆ ಮತ್ತು ತಕ್ಷಣವೇ ಎಲ್ಲಾ ಸಂರಚನೆಗಳೊಂದಿಗೆ ಜಿಪ್ ಆರ್ಕೈವ್ ಅನ್ನು ಸ್ವೀಕರಿಸಿದೆ.
ಮತ್ತು, ಸಹಜವಾಗಿ, ನಾನು ಲೇಖಕರಿಗೆ ಪುಲ್ ವಿನಂತಿಯನ್ನು ಕಳುಹಿಸಿದ್ದೇನೆ, ಏಕೆಂದರೆ... ಯೋಜನೆಯು ಸಕ್ರಿಯವಾಗಿದೆ ಮತ್ತು ಉತ್ಸಾಹಭರಿತವಾಗಿದೆ, ನಾನು ಲೇಖಕರಿಂದ ನವೀಕರಣಗಳನ್ನು ನೋಡಲು ಬಯಸುತ್ತೇನೆ ಮತ್ತು ನನ್ನ ಸ್ವಂತ ಬಟನ್ ಅನ್ನು ಹೊಂದಲು ಬಯಸುತ್ತೇನೆ) ಆಸಕ್ತರಿಗೆ, ಇಲ್ಲಿದೆ. ನನ್ನ ಫೋರ್ಕ್ ಯೋಜನೆ ಮತ್ತು ಸ್ವತಃ ಪುಲ್ ವಿನಂತಿ, ನಾನು ಸರಿಪಡಿಸಿದ/ಸೇರಿಸಿದ್ದನ್ನು ನೀವು ಎಲ್ಲಿ ನೋಡಬಹುದು.
ಎಲ್ಲರಿಗೂ ಅಭಿವೃದ್ಧಿಯ ಶುಭಾಶಯಗಳು)

nginx ಗಾಗಿ ಸಂರಚನೆಗಳ ಉತ್ಪಾದನೆ, ಒಂದು ಪುಲ್ ವಿನಂತಿಯ ಇತಿಹಾಸ

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ