2016-04-05 15 views
7

Ich verwende bereits nginx als reverse proxy, um meine node.js webapps 3000<->80 zum Beispiel zu dienen. Tatsächlich serviere ich meine Assets in der Knoten-App mit express.static Middleware.Was ist am effizientesten: statische Dateien direkt per Nginx oder per Nodex per Nginx Reverse Proxy bereitstellen?

Ich lese und lese wieder, dass nginx extrem effizient ist, statische Dateien zu bedienen.

Die Frage ist, was ist das Beste? Wie benütze ich bereits Assets oder konfiguriere nginx, um die statischen Dateien selbst direkt zu liefern?

Oder ist es fast das Gleiche?

+0

Haben Sie versucht, Google nach „vs node.js nginx“ gesucht? Es gibt eine Menge guter Blogposts, die eine gute Analyse zu diesem Thema haben. – Qazzian

+1

@Qazzian ... vielleicht möchten Sie eine teilen, die Sie für gut hielten? – AdamJeffers

+1

@AdamJeffers Dieser sah gut recherchiert aus. http://blog.modulus.io/supercharge-your-nodejs-applications-with-nginx Es hatte eine schöne Grafik und erklärte ihre Testmethoden, damit andere den gleichen Test machen konnten. edit: Ein Grund dafür, keine Links in den ersten Kommentar aufzunehmen, lag darin, dass sich die Situation mit neueren Knotenversionen ändern könnte. – Qazzian

Antwort

11

Der beste Weg besteht darin, den nginx-Server für die Bereitstellung der statischen Datei zu verwenden und den node.js-Server für die Verarbeitung des dynamischen Inhalts zu verwenden.

Es ist in der Regel die optimale Lösung die Menge an Anfragen auf Ihrem node.js Server zu reduzieren, die langsamen Server statische Dateien als nginx zum Beispiel:

Die Konfiguration zu erreichen, dass es sehr einfach ist, wenn Sie bereits Setzen Sie einen Reverse Proxy für Ihre Nodejs App.

nd nginx Konfiguration

root /home/myapp; 

    # Add index.php to the list if you are using PHP 
    index index.html index.htm index.nginx-debian.html; 

    server_name _; 

    location /public/ { 
      alias /home/myapp/public/; 
    } 

    location/{ 
      proxy_pass http://IPADRESSOFNODEJSSERVER:8080; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection 'upgrade'; 
      proxy_set_header Host $host; 
      proxy_cache_bypass $http_upgrade; 
      # First attempt to serve request as file, then 
      # as directory, then fall back to displaying a 404. 
      #try_files $uri $uri/ =404; 
    } 

Jede Anfrage mit/public/an dem ersten Teil der URL wird von nginx und jeder anderen Anfrage werden Sie proxied wird gehandhabt werden könnte NodeJS App auf Ihrem IPADRESSOFNODEJSSERVER:NODEJSPORT in der Regel der IPADRESSOFNODEJSSERVER ist die localhost

der doc Abschnitt ausdrücklich sagen, dass http://expressjs.com/en/advanced/best-practice-performance.html#proxy

Eine noch bessere op Es wird empfohlen, einen Reverse-Proxy zu verwenden, um statische Dateien bereitzustellen. Weitere Informationen finden Sie unter Verwenden eines Reverse-Proxy.

Außerdem nginx lässt Sie leicht Caching Regeln so für statische Assets definieren, die es Ihre Anwendung beschleunigen nicht ändern kann auch mit einer Linie.

location /public/ { 
      expires 10d; 
      alias /home/myapp/public/; 
     } 

können Sie eine Menge von Artikeln, die beiden Methoden im Internet zum Beispiel vergleichen: http://blog.modulus.io/supercharge-your-nodejs-applications-with-nginx