


Nginx plus NodeJS zum Erstellen eines Image-Servers
May 17, 2023 am 10:22 AMMit der Entwicklung des Internets werden Medienressourcen wie Bilder und Videos immer häufiger genutzt. Als Website-Betreiber ist die Frage, wie man umfangreiche Bildressourcen schnell und stabil bereitstellen kann, zu einem Problem geworden, das berücksichtigt werden muss. Hier stellen wir eine Lösung zum Aufbau eines Bildservers mit Nginx und Node.js vor, um effiziente, schnelle und zuverlässige Bilddienste bereitzustellen.
1. Übersicht über den Plan
Die Hauptkomponenten des Plans sind wie folgt:
- Verwenden Sie Nginx, um statische Dateidienste wie Bilder, Videos usw. bereitzustellen;
- Verwenden Sie Node.js für die Bildverarbeitung und Caching;
- Verwenden Sie die In-Memory-Datenbank von Redis, um Bilder zwischenzuspeichern.
In dieser Lösung stellt nginx statische Dateidienste bereit und Node.js dient als Verarbeitungszentrum, das für die Verarbeitung von Bildskalierung, Zuschneiden, Wasserzeichen und anderen Vorgängen verantwortlich ist. Gleichzeitig wird der Caching-Mechanismus von Redis verwendet, um die Häufigkeit des häufigen Lesens von Bildern durch Node.js zu reduzieren und die Bildverarbeitungsgeschwindigkeit und Reaktionszeit zu verbessern.
Zweitens Lösungsimplementierung
- Installieren Sie Nginx.
Installieren Sie Nginx über apt-get:
sudo apt-get update sudo apt-get install nginx
- Installieren Sie Node.js und npm ee
- Installieren Sie Redis über apt-get:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash source ~/.bashrc nvm install <node-version>
Nach dem Login kopieren
- Erstellen Sie eine package.json-Datei im Projektstammverzeichnis und fügen Sie den folgenden Inhalt hinzu:
sudo apt-get update sudo apt-get install redis-server
Nach dem Login kopierenUnter anderem verwenden wir das Express-Framework Um HTTP-Anfragen zu verarbeiten, wird die Sharp-Bibliothek für die Bildverarbeitung und die Redis-Bibliothek für das Bild-Caching verwendet.
- Erstellen Sie die app.js-Datei im Projektstammverzeichnis und schreiben Sie den folgenden Code:
{ "name": "image-server", "version": "1.0.0", "description": "An image server based on Node.js", "main": "app.js", "dependencies": { "express": "^4.17.1", "sharp": "^0.28.3", "redis": "^3.0.2" } }
Nach dem Login kopierenIn diesem Code verwenden wir zunächst RedisClient, um eine Verbindung zum Redis-Server herzustellen. Bei jeder Anfrage prüfen wir zunächst, ob das Bild im Redis-Cache vorhanden ist. Wenn sich ein Bild im Cache befindet, antworten wir direkt auf die Anfrage mit dem Bild im Cache. Andernfalls verwenden wir die Größenänderungs- und JPEG-Methoden in der Sharp-Bibliothek, um das Bild zu verarbeiten, in ein Pufferformat zu konvertieren und zu speichern im Redis-Cache.
- Fügen Sie den folgenden Inhalt in die Nginx-Konfigurationsdatei /etc/nginx/nginx.conf ein:
- In dieser Konfigurationsdatei verwenden wir die Reverse-Proxy-Funktion von Nginx, um Bildanfragen an Node.js weiterzuleiten wendet Nachbearbeitung an und verwendet Redis für die Bildzwischenspeicherung. Gleichzeitig haben wir den Proxy-Cache von Nginx konfiguriert und die Cache-Gültigkeitsdauer und die Cache-Sperre festgelegt. Dies verhindert Cache-Lawinen und Cache-Penetrationsprobleme.
const express = require('express'); const sharp = require('sharp'); const redis = require('redis'); const app = express(); const port = process.env.PORT || 3000; // Connect to Redis const redisClient = redis.createClient(); // Handle image requests app.get('/:path', async (req, res) => { const { path } = req.params; const { w, h, q } = req.query; // Check if the image exists in Redis cache redisClient.get(path, async (err, cachedImage) => { if (cachedImage) { // Serve the cached image res.header('Content-Type', 'image/jpeg'); res.send(cachedImage); } else { // Read the original image const image = sharp(`images/${path}`); // Apply image transforms if (w || h) image.resize(Number(w), Number(h)); if (q) image.jpeg({ quality: Number(q) }); // Convert the image to Buffer const buffer = await image.toBuffer(); // Cache the image in Redis redisClient.set(path, buffer); // Serve the transformed image res.header('Content-Type', 'image/jpeg'); res.send(buffer); } }); }); // Start the server app.listen(port, () => { console.log(`Server is listening on port ${port}`); });
Nach dem Login kopieren3. Lösungseffekt
Durch die oben genannte Lösung haben wir einen zuverlässigen und effizienten Bildservice erreicht. Seine Haupteffekte sind wie folgt:
Reduziert die Belastung des Bildservers und verbessert die Stabilität und Zuverlässigkeit der Website. Die Verwendung der Nginx-Proxy-Cache- und Redis-Cache-Technologie reduziert die Bildverarbeitungs- und Übertragungszeit und verbessert die Reaktionsgeschwindigkeit von Bilddiensten.- Verwenden Sie die Node.js-Anwendung als Verarbeitungszentrum des Bilddienstes, um die Bildverarbeitung und -verwaltung zu erleichtern.
- Durch die Konfiguration von Nginx-Reverse-Proxy und Redis-Cache werden Probleme wie Cache-Lawine und Cache-Penetration vermieden und so die Qualität und Verfügbarkeit von Bilddiensten sichergestellt.
- Zusammenfassend lässt sich sagen, dass wir eine Lösung verwendet haben, die Nginx und Node.js kombiniert, um einen effizienten und zuverlässigen Bildserver aufzubauen, der nicht nur hochwertige Bilddienste bereitstellt, sondern auch mehr Auswahlmöglichkeiten für Website-Betreiber bietet.
Das obige ist der detaillierte Inhalt vonNginx plus NodeJS zum Erstellen eines Image-Servers. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Erklären Sie das Konzept des faulen Ladens.

Was ist Useffizität? Wie verwenden Sie es, um Nebenwirkungen auszuführen?

Wie funktioniert der React -Versöhnungsalgorithmus?

Was sind Funktionen höherer Ordnung in JavaScript und wie können sie verwendet werden, um prägnanter und wiederverwendbarer Code zu schreiben?

Was ist usecontext? Wie verwenden Sie es, um den Zustand zwischen Komponenten zu teilen?

Wie funktioniert das Currying in JavaScript und wie hoch sind ihre Vorteile?

Erläutern Sie den Zweck jeder Lebenszyklusmethode und ihres Anwendungsfalls.

Was sind die Vor- und Nachteile kontrollierter und unkontrollierter Komponenten?
