Mit 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:
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 über apt-get:
sudo apt-get update sudo apt-get install nginx
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash source ~/.bashrc nvm install <node-version>
sudo apt-get update sudo apt-get install redis-server
{ "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" } }
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}`); });
3. 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.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!