2016-04-05 12 views
7

Już używam nginx jako reverse proxy do obsługi np. node.js webapps 3000<->80. Aktualnie obsługuję moje zasoby w aplikacji węzła, używając oprogramowania pośredniego express.static.Co jest najbardziej wydajne: wyświetlanie plików statycznych bezpośrednio przez nginx lub przez węzeł za pomocą odwrotnego proxy nginx?

Przeczytałem i przeczytałem ponownie, że nginx jest niezwykle wydajny w obsłudze plików statycznych.

Pytanie brzmi: co jest najlepsze? Udostępniasz zasoby, tak jak już to robię, lub konfiguruję nginx, aby bezpośrednio obsługiwał pliki statyczne?

Czy to prawie to samo?

+0

Czy próbowałeś wyszukiwanie google dla „nginx vs node.js”? Jest wiele dobrych postów na blogu, które mają dobrą analizę na ten temat. – Qazzian

+1

@Qazzian ... może chcesz podzielić się tym, który był dobry? – AdamJeffers

+1

@AdamJeffers Ten wyglądał dobrze zbadany. http://blog.modulus.io/supercharge-your-nodejs-applications-with-nginx Miał ładny wykres i wyjaśnił swoje metody testowania, aby inni mogli wykonać ten sam test. edytuj: jednym z powodów, dla których nie uwzględniono linków w pierwszym komentarzu, było to, że sytuacja może się zmienić w nowszych wersjach węzła. – Qazzian

Odpowiedz

11

Najlepszym sposobem jest użycie serwera Nginx do obsługi pliku statycznego i umożliwienie serwerowi node.js obsługiwać zawartość dynamiczną.

Jest to zazwyczaj najbardziej zoptymalizowane rozwiązanie, aby zmniejszyć ilość żądań na serwerze node.js, który jest wolniejszy do serwera plików statycznych niż nginx na przykład:

Konfiguracja do osiągnięcia tego jest bardzo proste, jeśli już ustawić odwrotne proxy dla ciebie aplikacja nodejs.

nd nginx konfiguracja może być

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

Każdy wniosek z/public/na pierwszą część adresu URL będą obsługiwane przez nginx i każdy inny wniosek będą przekierowywane do ciebie nodejs aplikację na swoim IPADRESSOFNODEJSSERVER:NODEJSPORT zwykle IPADRESSOFNODEJSSERVER jest localhost

sekcja doc ekspresowych powiedzieć, że http://expressjs.com/en/advanced/best-practice-performance.html#proxy

jeszcze lepiej op jest używanie odwrotnego proxy do serwowania plików statycznych; zobacz Użyj odwrotnego proxy, aby uzyskać więcej informacji.

Ponadto nginx pozwoli Ci łatwo zdefiniować zasady buforowania tak aktywów statycznych, że nie zmienia to może przyspieszyć swoją aplikację również z jednej linii.

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

Można znaleźć wiele artykułów, które porównują obu metod w internecie na przykład: http://blog.modulus.io/supercharge-your-nodejs-applications-with-nginx

Powiązane problemy