2016-04-05 34 views
7

Io uso già nginx come reverse proxy per servire le mie applicazioni web node.js3000<->80 per esempio. In realtà, servo le mie risorse nell'app nodo, utilizzando il middleware express.static.Quale è il più efficiente: servire file statici direttamente da nginx o dal nodo tramite reverse proxy nginx?

Ho letto e riletto che nginx è estremamente efficiente per servire file statici.

La domanda è, qual è il migliore? Servendo gli asset come faccio già o configurando nginx per servire direttamente i file statici?

Oppure è quasi lo stesso?

+0

Hai provato a cercare su Google per "nginx vs node.js"? Ci sono molti buoni post sul blog che hanno qualche buona analisi su questo argomento – Qazzian

+1

@Qazzian ... forse ti piacerebbe condividere quello che pensavi fosse buono? – AdamJeffers

+1

@AdamJeffers Questo sembrava ben studiato. http://blog.modulus.io/supercharge-your-nodejs-applications-with-nginx Aveva un bel grafico e spiegava i loro metodi di test in modo che altri potessero fare lo stesso test. modifica: un motivo per non includere i collegamenti nel primo commento era perché la situazione poteva cambiare con le versioni più recenti del nodo. – Qazzian

risposta

11

Il modo migliore è utilizzare il server nginx per fornire file statici e consentire al server node.js di gestire il contenuto dinamico.

Di solito è la soluzione più ottimizzata per ridurre la quantità di richieste sul server node.js che è più lento al server file statici che nginx ad esempio:

La configurazione per ottenere che è molto facile se si dispone già imposta un proxy inverso per la tua app nodejs.

ND configurazione nginx potrebbe essere

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; 
    } 

ogni richiesta con/public/alla prima parte dell'URL sarà gestito da nginx e ogni altra richiesta verrà inoltrata a voi nodejs applicazione al vostro IPADRESSOFNODEJSSERVER:NODEJSPORT solito il IPADRESSOFNODEJSSERVER è il localhost

la sezione doc di esplicita dicono che http://expressjs.com/en/advanced/best-practice-performance.html#proxy

Un ancora migliore op è usare un proxy inverso per servire file statici; vedere Utilizzare un proxy inverso per ulteriori informazioni.

nginx Inoltre ti consente di definire facilmente regole di caching così per le attività statiche che non cambia può accelerare la vostra applicazione anche con una linea.

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

Potete trovare un sacco di articoli che mettono a confronto i metodi di entrambi su internet per esempio: http://blog.modulus.io/supercharge-your-nodejs-applications-with-nginx