Nhờ tư vấn cấu hình nginx cho static files để tốc độ phản hồi nhanh

Discussion in 'Thảo Luận Chung' started by command, Jun 5, 2022.

  1. command

    command Bang Chúng

    Chào ae,

    Nhờ ae tư vấn giúp cấu hình cho nginx cho các static files như css, images, javascript để tốc độ phản hồi nhanh nhất có thể,

    Các thông tin máy chủ như sau:
    - CPU 4 cores, 64GB RAM và 16TB HDD của Hetzner đặt tại Phần Lan (dữ liệu hiện tại sử dụng khoảng 55% HDD)
    - Chủ yếu chứa ảnh và chỉ cài đặt nginx để làm web server, mình chỉ cấu hình tắt gzip tại nginx.conf vì file css, javascript và images đã được nén rồi, ảnh định dạng là webp và png (dưới 100KB).
    - Server này chạy thông qua Cloudflare, và mình tắt luôn Security để tốc độ nhanh nhất có thể.

    Khi server chạy thì tốc độ phản hồi 1 file css, js hay file ảnh (dưới 100KB) thì trong khoảng 700ms-1.5s khi chưa được CF cache, còn sau khi được CF cache thì phản hồi trong 50m-100ms.

    Nếu files đó chưa được cache trên Cloudflare thì tốc độ phản hồi rất chậm, cụ thể như hình sau:

    Screen Shot 2022-06-05 at 15.18.57.png
    Screen Shot 2022-06-05 at 15.16.42.png
    Screen Shot 2022-06-05 at 15.27.10.png


    Sau khi được Cloudflare cache (HIT) thì tốc độ phản hồi tốt, như hình sau:

    Screen Shot 2022-06-05 at 15.21.22.png

    Screen Shot 2022-06-05 at 15.21.35.png

    Thông qua các hình minh họa, mình nghĩ vấn đề nằm ở tốc độ phản hồi của nginx tại Hetzner hoặc cần cấu hình gì thêm để nginx phản hồi nhanh hơn.

    Mong anh em chia sẻ kinh nghiệm để mình khắc phục vấn đề phản hồi của server!

    Xin cám ơn,
     
    Last edited: Jun 5, 2022
  2. noenmo

    noenmo Sơ Nhập Giang Hồ

    Bác check trên tools.keycdn.com xem ttfb là bao nhiêu bác.
    Qua cf thì không nói làm gì, vì nó được cache rồi. nó chỉ mất thời gian nhận ảnh thôi.
    Còn từ server (Phần Lan), ở VN mà bác dùng trình duyệt debug thì em nghĩ tốc độ phản hồi thế kia cũng là bình thường mà.
     
  3. firefox

    firefox Bang Chúng

    Static file muốn nhanh thì đẩy github pages hoặc cloudflare pages luôn đi bác
     
  4. noenmo

    noenmo Sơ Nhập Giang Hồ

    Nghe bác ấy nói là 16TB mà dùng 50%, file thì nhỏ hơn 100kb, số lượng nhiều nên hơi khoai, mà dạng image thì muốn SEO theo images nên mới dùng HDD phải không bác @command
     
  5. command

    command Bang Chúng

    Mình thử test với 1 image (chưa được cache bởi Cloudflare) thì như hình sau (trong hình có vẻ ảnh này đã được cache tại server nào đó của CF gần San Francisco rồi nên speed hơi nhanh), còn nếu được CF cache rồi thì tốc độ ngon lành ở ~50-70ms.

    Mình thấy nhiều sites của người Việt, server đặt ở đâu ko biết, ảnh cũng khoảng 100KB đỗ lại, và tốc độ truy cập khoảng 250-400ms thôi (ảnh chưa được cache ở Cloudflare á). Nên mình nghĩ vấn đề nằm ở tốc độ mạng và server xử lý hoặc web server cho ảnh. Mình thấy Hetzner tốc độ mạng 1GB và mình thử nhiều lần với speedtest rồi, tốc độ ổn định ở mốc 600-800Mbps (rất ổn), chỉ còn lại là server dùng HDD hoặc do cấu hình nginx chưa tối ưu cho việc xử lý ảnh.

    Screen Shot 2022-06-05 at 21.55.44.png

    @firefox số lượng file ảnh của mình tới vài chục triệu (khoảng 9TB), có vẻ căng với Cloudflare pages á vì bị nó delete.

    @noenmo Site mình có search từ ảnh, nhưng không đáng kể so với content nên mình tìm giải pháp làm sao để tốc độ phản hồi ảnh là nhanh nhất khi chưa được Cloudflare cache trên các CDN của CF.
     
    Last edited: Jun 5, 2022
  6. noenmo

    noenmo Sơ Nhập Giang Hồ

    @command: Tốc độ phản hồi từ sing là 400ms thì đến VN tầm 600-700ms là bình thường mà.
    Nhìn tốc độ kia thì chắc khó có thể tối ưu được hơn, ttfb từ amsterdam là ~38ms, quá tốt rồi, căng lắm tối ưu được đến 20ms.
    Nginx cấu hình ngầm định đã xử lý tốt static files rồi.

    cache rồi không tính làm gì, vì lúc đó là kết quả trả về từ HK rồi.
     
    command likes this.
  7. firefox

    firefox Bang Chúng

    à nãy em đọc không kỹ, có thể là nhiều file quá trên 1 folder, nhét đâu đó mỗi folder tầm 1.000-2.000 file thôi sẽ ổn hơn đôi chút
     
    command likes this.
  8. noenmo

    noenmo Sơ Nhập Giang Hồ

    vài chục triệu files 3 cấp md5 là ổn rồi bác nhỉ, nói chung bài toán bác @command đưa ra khó giải quyết, nếu bác muốn phản hồi nhanh ở nhiều location thì chỉ có thể load balancing thôi, mà thế thì kiếm đâu ra thằng nào rẻ hơn hetzner :D, tiếc là hetzner không có nhiều location.
     
    command likes this.
  9. command

    command Bang Chúng

    Hiện tại, mình chia nhỏ ảnh theo folder theo tên của file, có tới 6 cấp folder theo tên của file rồi mới tới file ảnh. Ví dụ file tên firefox.webp thì sẽ được lưu trong folder f/i/r/e/f/o/firefox.webp. Việc chia này ko đảm bảo mỗi folder trong khoảng 1-2k ảnh, nhưng đảm bảo folder chứa ko quá nhiều ảnh :)

    Mình nghĩ 1 phần là do server ở Phần Lan và Cloudflare CDN ở khu vực đó ko quá nhiều, ví dụ server đặt tại Mỹ thì mình nghĩ tốc độ sẽ ngon hơn chút.

    Mình test nhiều site khác cũng có file ảnh < 100KB, tốc độ phản hồi tới máy mình chỉ khoảng 250m-400ms thôi khi Cloudflare chưa cache file ảnh của đó.

    Minh họa cho 1 ảnh dung lượng ~90KB của 1 site tiếng Anh của người Việt đặt ở nước ngoài (ko biết đặt ở đâu, dựa vào ảnh thì đoán server đặt tại Mỹ và file này chưa được Cloudflare cache), tốc độ nằm trong khoảng 250ms-400ms ---> như vầy mới ổn và người dùng thích quay lại những sites tốc độ xử lý tốt tương tự thế này.
    Screen Shot 2022-06-05 at 22.47.57.png Screen Shot 2022-06-05 at 22.48.13.png
    --- Double Post Merged, Jun 5, 2022, Original Post Date: Jun 5, 2022 ---
    Mình muốn tối ưu trung bình các quốc gia lớn ở 5 châu dưới 500ms.
     
    firefox likes this.
  10. noenmo

    noenmo Sơ Nhập Giang Hồ

    Server lưu trữ của site kia thì là từ US rồi.
    CF mà sử dụng us là tốt nhất.

    Nói chung là có cách giải quyết bài toán của bác nhưng ko phải xử lý kỹ thuật và là giải pháp kỹ thuật nào thôi.
    --- Double Post Merged, Jun 5, 2022, Original Post Date: Jun 5, 2022 ---
    Cũng không khó đâu bác, vài chục triệu images thì upload lên drive, dùng nginx proxy pass đến link drive.
    Server nginx proxy đến thì bác đặt ở nhiều location khác nhau (5 châu).

    Nếu ko cầu kỳ thì dùng load balancing của cf còn cầu kỳ và muốn tốc độ tốt hơn nữa thì sử dụng dịch vụ dns để load balancing.

    Nói chung là nhiều yếu tố và cần chi tiết hơn về project của bác thì em mới có thể đưa ra giải pháp được.
     
    command likes this.
  11. command

    command Bang Chúng

    Thanks bác @noenmo , hiện tại mình chỉ muốn tìm hiểu có thể cải thiện thông qua cấu hình nginx hoặc cấu hình gì thêm cho server hiện tại như network, tcp,... của server chẳng hạn để tối ưu phục vụ các static files. Mình chưa có nhu cầu mở rộng lên load balancing (chẳng hạn thêm 1 server ảnh ở USA nữa và mua thêm gói load balancing của CF) vì revenue web này chưa có dư nhiều :) Đợi chừng nào web đạt 1m monthly users thì mới tính mở rộng thêm load balancing cho cả server chạy web động và server chạy static files.
     
  12. noenmo

    noenmo Sơ Nhập Giang Hồ

    Mục đích của sử dụng drive và proxy là để tiết kiệm chi phí mà bác, con HDD bác đang dùng là khoảng 90$/ tháng, (mua 5 con ở các location khác nhau của DO và VULTR chỉ mất 60$ - BW cũng được 12TB/ tháng chắc chắn là dư đối với web chưa 1m users/ tháng), mất khoảng 20$ load balacing cho CF, drive thì chắc là dạng 100TB bác có nhiều rồi (1 con mua mất 10tr dùng cả đời cho nhiều dự án - em đã dùng hơn 10 năm nay), upload lên xong chỉ cần cấu hình proxy từ các con vps DO và VULTR là xong.
    Hiện tại thì để làm web và tốc độ băng thông tốt nhất vẫn là DO và VULTR (DO hơn VULTR) vì nó 10GB nên đảm bảo được tốc độ trả về luôn ổn định.
     
  13. money

    money Hương Chủ

    @command HDD thì khó mà nhanh hơn được nữa. Em dùng ssd sẽ thấy khác. Nhưng ssd lại tốn tiền.

    Về cơ bản thì hdd với tốc độ như em là ổn rồi, vì image thì dùng lazy load, không ảnh hưởng gì cả. Còn js, css thì upload lên cdn như mọi người đã share.
     
    command likes this.
  14. Phan Thị

    Phan Thị Bang Chúng

    money, noenmo and command like this.
  15. uvmk0

    uvmk0 Khách Qua Đường

    Hetzner vẫn rẻ nhất, giá gần x8 x9 lần rồi
     
    noenmo and command like this.
  16. command

    command Bang Chúng

    E nhìn giá wasabi có vẻ ổn, nếu bỏ server static files chuyển qua Wasabi thì giá cũng ở mức tương đồng.

    Thanks bác @Phan Thị , giá Wasabi nhìn tốt quá, ko biết speed thì thế nào? Để mua thử gói thấp nhất test thử có giải quyết được vấn đề speed phản hồi đối với 5 châu ko?
    --- Double Post Merged, Jun 6, 2022, Original Post Date: Jun 6, 2022 ---
    Speed quá êm bác @Phan Thị ơi, thanks bác lần nữa, lúc trước mình cũng có dùng Wasabi với mục đích khác rồi, tuy vậy mình chưa thử dùng chứa images cho web bao giờ. Mình quyết định chuyển, kết hợp giữa Wasabi và CloudFlare cache thì quá ngon rồi.

    Hình test ảnh chưa cache bởi CF:
    Screen Shot 2022-06-06 at 19.24.04.png
    Screen Shot 2022-06-06 at 19.21.25.png
     
    Last edited: Jun 6, 2022
    Nai likes this.
  17. money

    money Hương Chủ

    @Phan Thị wasabi có tính giá bandwidth không vậy bạn?
     
  18. noenmo

    noenmo Sơ Nhập Giang Hồ

    Theo calculator của nó thì không tính bandwidth.
    @command: Tốc độ quá ngon :D
    Mà tốc độ trên là url từ wasabi hay từ domain của mình rồi vậy bác @command?
     
  19. money

    money Hương Chủ

    Thấy nó bảo ko charge egress và API request. Ingress thường thì luôn luôn free rồi. Nhưng vẫn chờ anh em đã xài confirm cho chắc.
     
  20. thanh858036

    thanh858036 Sơ Nhập Giang Hồ

    wasabi tính bw nha. bw chỉ cho phép bằng với dung lượng storage thôi nếu vượt hơn quá nhiều thì sẽ khóa
     
    money and noenmo like this.