2016-04-05 23 views
7

Tôi đã sử dụng nginx làm reverse proxy để phục vụ ví dụ node.js webapps 3000<->80 của mình. Trên thực tế, tôi phân phối nội dung của mình trong ứng dụng nút, sử dụng phần mềm trung gian express.static.Cách nào hiệu quả nhất: phục vụ tệp tĩnh trực tiếp bằng nginx hoặc bằng nút qua proxy ngược nginx?

Tôi đọc và đọc lại rằng nginx cực kỳ hiệu quả để phân phát tệp tĩnh.

Câu hỏi là, tốt nhất là gì? Cung cấp nội dung như tôi đã làm hoặc định cấu hình nginx để tự phục vụ các tệp tĩnh một cách trực tiếp?

Hoặc gần như giống nhau?

+0

Các bạn đã thử tìm kiếm google cho "nginx vs Node.js"? Có rất nhiều bài đăng trên blog tốt mà có một số phân tích tốt về chủ đề này – Qazzian

+1

@Qazzian ... có lẽ bạn muốn chia sẻ bài viết mà bạn nghĩ là tốt? – AdamJeffers

+1

@AdamJeffers Cái này được nghiên cứu kỹ lưỡng. http://blog.modulus.io/supercharge-your-nodejs-applications-with-nginx Nó có một đồ thị tốt đẹp và giải thích phương pháp thử nghiệm của họ để những người khác có thể làm thử nghiệm tương tự. chỉnh sửa: một lý do không bao gồm các liên kết trong nhận xét đầu tiên là do tình hình có thể thay đổi với các phiên bản mới hơn của nút. – Qazzian

Trả lời

11

Cách tốt nhất là sử dụng máy chủ nginx để phục vụ bạn tệp tĩnh và cho phép máy chủ node.js xử lý nội dung động.

Nó thường là giải pháp tối ưu nhất để giảm số lượng các yêu cầu trên máy chủ Node.js của bạn mà là chậm đến máy chủ tập tin tĩnh hơn nginx ví dụ:

Cấu hình để đạt được điều đó là rất dễ dàng nếu bạn đã đặt proxy ngược cho ứng dụng nodejs của bạn.

nd cấu hình nginx có thể

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

Mỗi yêu cầu với/public/ở phần đầu của url sẽ được xử lý bởi nginx và mọi yêu cầu khác sẽ được proxy cho bạn nodejs ứng dụng tại IPADRESSOFNODEJSSERVER:NODEJSPORT của bạn thường là IPADRESSOFNODEJSSERVER là localhost

phần doc của tốc hành nói rằng http://expressjs.com/en/advanced/best-practice-performance.html#proxy

Một op thậm chí tốt hơn tion là sử dụng proxy ngược để phục vụ các tệp tĩnh; xem Sử dụng proxy ngược để biết thêm thông tin.

nginx Hơn nữa sẽ cho phép bạn dễ dàng xác định quy tắc bộ nhớ đệm nên đối với tài sản tĩnh mà không làm thay đổi nó có thể tăng tốc độ ứng dụng của bạn cũng có một dòng.

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

Bạn có thể tìm thấy rất nhiều điều mà so sánh các phương pháp cả trên internet ví dụ: http://blog.modulus.io/supercharge-your-nodejs-applications-with-nginx

Các vấn đề liên quan