Nginx plus NodeJS zum Erstellen eines Image-Servers

WBOY
Freigeben: 2023-05-17 10:22:07
Original
639 Leute haben es durchsucht

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:

  • 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

  1. Installieren Sie Nginx.

Installieren Sie Nginx über apt-get:

sudo apt-get update
sudo apt-get install nginx
Nach dem Login kopieren
.
  1. Installieren Sie Node.js und npm ee
Installieren Sie Redis

    Installieren Sie Redis über apt-get:
  1. 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 ein Node.js-Projekt

    Erstellen Sie eine package.json-Datei im Projektstammverzeichnis und fügen Sie den folgenden Inhalt hinzu:
  1. sudo apt-get update
    sudo apt-get install redis-server
    Nach dem Login kopieren
  2. Unter 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.

Node.js-Code schreiben

    Erstellen Sie die app.js-Datei im Projektstammverzeichnis und schreiben Sie den folgenden Code:
  1. {
      "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 kopieren
  2. In 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.

Nginx konfigurieren

    Fügen Sie den folgenden Inhalt in die Nginx-Konfigurationsdatei /etc/nginx/nginx.conf ein:
  1. 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 kopieren
    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.

    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.
    1. Verwenden Sie die Node.js-Anwendung als Verarbeitungszentrum des Bilddienstes, um die Bildverarbeitung und -verwaltung zu erleichtern.
    2. 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.
    3. 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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!