13 điểm bởi GN⁺ 2025-03-28 | 4 bình luận | Chia sẻ qua WhatsApp
  • Bài viết bàn về các vấn đề liên quan đến tính mở và cách quản trị của Next.js: thiếu adapter, thiếu hỗ trợ serverless chính thức, các đường dẫn mã chỉ dành cho Vercel, cũng như cách Vercel ứng phó với sự cố bảo mật
  • Việc lựa chọn stack công nghệ là một quyết định quan trọng, có ảnh hưởng dài hạn đến tốc độ phát triển, chất lượng dự án và cơ cấu đội ngũ
  • Phần mềm mã nguồn mở mang lại cho người dùng quyền tự do mở rộng và chỉnh sửa mã, đồng thời có lợi thế là tránh bị phụ thuộc vào nhà cung cấp
  • Next.js được cung cấp dưới dạng mã nguồn mở, nhưng lại gắn chặt với hạ tầng của Vercel, công ty tạo ra nó
  • Việc một công ty kiếm doanh thu từ mã nguồn mở do mình tạo ra không phải là vấn đề, nhưng để trở thành một mô hình bền vững thì ranh giới giữa mã nguồn mở và doanh nghiệp phải rõ ràng

Bối cảnh và lợi ích liên quan của tác giả

  • Tác giả đã làm việc tại Netlify hơn 4 năm, và Netlify là đối thủ cạnh tranh của Vercel
  • Trong quá trình trực tiếp xây dựng hạ tầng và bộ công cụ tại Netlify để hỗ trợ đầy đủ các tính năng của Next.js, tác giả đã có được hiểu biết sâu sắc về cấu trúc nội bộ của Next.js
  • Tác giả đã ngần ngại nêu vấn đề này công khai trong thời gian dài, nhưng gần đây cho rằng cách Vercel xử lý vấn đề bảo mật đã gây hại cho cộng đồng nên quyết định viết bài

# Vấn đề về tính mở và quản trị của Next.js

Fact #1: Thiếu adapter

  • Hầu hết các framework hiện đại đều có thể được cấu hình linh hoạt thông qua adapter tùy theo môi trường triển khai
  • Next.js không hỗ trợ adapter một cách chính thức, và định dạng đầu ra của nó là một cấu trúc độc quyền, không công khai, chỉ được dùng trên Vercel
  • Vercel đã tạo ra Build Output API, nhưng Next.js vẫn chưa hỗ trợ nó
  • Kết quả là các nhà cung cấp ngoài Vercel phải xây dựng dựa trên các API không được tài liệu hóa, khiến họ dễ tổn thương trước những thay đổi bất ngờ
  • Cloudflare và Netlify đang hợp tác phát triển adapter cho Next.js thông qua OpenNext, và Vercel cũng đã bắt đầu tham gia, nhưng vẫn chưa có lịch trình cụ thể

Fact #2: Thiếu hỗ trợ serverless chính thức

  • Cách self-hosting chính thức của Next.js dựa trên máy chủ chạy lâu dài, nên khó hiện thực hóa khả năng mở rộng linh hoạt và tối ưu chi phí trong môi trường vận hành thực tế
  • Trước đây từng có chế độ serverless, nhưng đã bị gỡ bỏ vào tháng 10 năm 2022 mà không có giải thích rõ ràng
  • Tài liệu chính thức của React có đề cập rằng có thể triển khai theo kiểu serverless, nhưng lại không có tài liệu chính thức để hiện thực điều đó trong thực tế
  • Các nhà cung cấp hosting muốn có môi trường serverless phải reverse engineering Next.js để tự triển khai

Fact #3: Tồn tại các đường dẫn mã chỉ dành cho Vercel

  • Next.js chứa các đường dẫn mã không công khai chỉ hoạt động khi triển khai trên Vercel (ví dụ: minimal mode)
  • Thông qua chế độ này, Vercel có thể tối ưu hiệu năng như chạy middleware ở edge
  • Middleware là tính năng cho phép thực thi logic nhanh trên đường đi trước cache, nhưng tính năng này chỉ Vercel mới dùng được
  • Netlify đã phải lập hẳn một đội ngũ kỹ sư chuyên trách và tự hiện thực để hỗ trợ tính năng này, nhưng mức tài nguyên như vậy là điều bất khả thi với các nhà cung cấp nhỏ hơn
  • Thực tế rằng chỉ Vercel là nền tảng duy nhất chính thức cung cấp đầy đủ tính năng của Next.js đi ngược lại triết lý mã nguồn mở của framework này

Sự cố bảo mật và cách Vercel ứng phó

  • Ngày 21 tháng 3 năm 2025, một lỗ hổng bảo mật nghiêm trọng trong Next.js cho phép bỏ qua cơ chế xác thực đã được công bố (CVE 9.1 điểm)
  • Lỗ hổng này là vấn đề mà chỉ cần đưa một header cụ thể vào request là có thể vô hiệu hóa middleware và truy cập vào các tài nguyên được bảo vệ
  • Lỗ hổng được báo cáo vào ngày 27 tháng 2, nhưng mãi đến ngày 14 tháng 3 Vercel mới bắt đầu điều tra
  • Sau khi nhận ra vấn đề, bản vá được phát hành nhanh chóng, nhưng phải mất tới 8 ngày mới thông báo cho các nhà cung cấp khác như Netlify
  • Bài blog ban đầu mô tả theo hướng firewall của Vercel đã bảo vệ khách hàng, nhưng thực tế không phải vậy
  • Điều này khiến nhiều nhà cung cấp và lập trình viên phản ứng hoặc xử lý dựa trên thông tin sai lệch, đồng thời có khả năng vẫn còn nhiều trang web ở trạng thái dễ bị tấn công

Quyền sở hữu Next.js của Vercel và trách nhiệm với mã nguồn mở

  • Không thể phủ nhận việc Vercel sở hữu Next.js, và việc thương mại hóa nó cũng là chính đáng
  • Tuy nhiên, vì nó được cung cấp dưới dạng mã nguồn mở, các nhà cung cấp khác cũng phải có thể sử dụng một cách bình đẳng, và ở điểm này Vercel chưa đáp ứng được kỳ vọng
  • Redis, Grafana, WordPress cũng đồng thời vận hành dịch vụ thương mại và dự án mã nguồn mở mà vẫn duy trì được tính mở và khả năng tương tác

Kết luận

  • Dù chọn framework nào thì đó vẫn là quyết định của người dùng, và nếu Next.js là lựa chọn tối ưu để giải quyết vấn đề thì tiếp tục dùng nó cũng hoàn toàn ổn
  • Tuy nhiên, điều quan trọng là phải lựa chọn trong trạng thái đã hiểu rõ các vấn đề cấu trúc và những hạn chế hiện tại của Next.js

4 bình luận

 
GN⁺ 2025-03-28
Ý kiến Hacker News
  • Tôi đã dùng next.js và bỏ dự án khi chuyển từ page router sang app router. Trải nghiệm app router quá tệ, và từ đó tôi không còn muốn dùng lại next.js nữa
    • Vercel giả vờ là mã nguồn mở nhưng đang dựng rào cản để nhốt người dùng vào nền tảng hosting của họ
  • Tôi luôn hơi bất an về Vercel. Khi cố tự host Next.js trên VPS, tôi đã vướng vào những cái bẫy nhỏ mà họ cài sẵn
    • Cách họ xử lý lỗ hổng này khiến tôi càng lo hơn
    • Cách giải thích ban đầu của họ rằng tường lửa của Vercel đã "chủ động bảo vệ" khách hàng để lại ấn tượng xấu
    • Việc chậm thông báo cho các nền tảng khác cho thấy Vercel có ít động lực hơn trong việc ngăn lỗ hổng bị đưa vào Next.js
  • Tôi cảnh báo mọi người nên tránh next.js. V0 có khả năng sẽ làm mức độ chấp nhận tăng mạnh
    • Nhiều lập trình viên mới không muốn phải nghĩ về triển khai và quản trị hệ thống
    • Nếu chỉ biết React thì đây là lợi thế vì có thể có được SSR mà không cần tự học SSR
  • Lý do tôi từ bỏ next.js là vì trong một dự án nhỏ, phải mất 6-7 giây để thay đổi xuất hiện trên trình duyệt
    • Giờ tôi dùng React SPA và Vite
  • Năm ngoái chúng tôi đã chuyển từ Next.js sang Vike. Trải nghiệm lập trình viên được cải thiện đáng kể
    • Phần lớn nhu cầu của chúng tôi được đáp ứng bằng prerender trang
  • Tôi có cảm xúc lẫn lộn về Next.js. Một mặt, đây là một công ty xây framework cùng với các nhà đầu tư
    • Vì là giấy phép MIT nên Netlify hoặc công ty khác có thể fork và cung cấp lựa chọn tốt hơn
    • Nếu tôi là nhà đầu tư của Vercel, sẽ không có lý do gì để giúp đối thủ và làm tăng rủi ro đầu tư
    • Vercel vừa ủng hộ mã nguồn mở vừa cố giữ lại ma sát để nền tảng hosting của họ luôn là lựa chọn tốt nhất
  • Tôi đang trong quá trình chọn stack React cho công ty nơi tôi làm việc. Tôi không thể tưởng tượng ra lý do gì để chọn Next.js thay vì các lựa chọn khác
    • Remix, React Router v7, hoặc TanStack là các lựa chọn hợp lý hơn nếu muốn SSR
  • Tôi không chắc cách tiếp cận serverless là mặc định tốt. Nó thêm vào sự phức tạp không cần thiết
    • Tôi không thích dùng JavaScript ở backend
    • Việc tập trung vào server component và Next.js khiến tôi cảm thấy như một kiểu tầm nhìn đường hầm
    • Rất có thể cách tiếp cận serverless là lý do dẫn đến giao tiếp đặc quyền bằng HTTP header
  • Thời gian build khi phát triển thì tệ nhất, đã có rất nhiều phàn nàn suốt nhiều năm nhưng vẫn không được giải quyết
  • Vercel và NextJS đáng ra không nên tồn tại
    • Khi tôi thử Next một lần, tôi gặp rất nhiều lỗi hydration trong môi trường production
    • Framework này làm mọi thứ trở nên phức tạp chỉ để đổi lấy lợi ích tiềm năng của render phía máy chủ
    • Toàn bộ framework này giống như một vỏ bọc đẹp đẽ để bán dịch vụ đám mây đắt đỏ của họ
 
ahwjdekf 2025-03-28

Tác giả thuộc Netlify và tự nhận công ty mình là đối thủ cạnh tranh trực tiếp với Vercel. Điều này có vẻ hơi thiếu tính khách quan.

 
preserde 2025-03-28

Nếu gần đây bạn từng so sánh giữa các framework cạnh tranh như tanstack hay remix, thì nội dung trong bài này về cơ bản đều là những điều ai cũng đã biết, ít nhiều gì cũng vậy. Chỉ là hiện tại thị phần của nextjs vẫn quá lớn và Vercel cũng chưa có những động thái quá lộ liễu, nên vấn đề này chưa bị phơi bày ra bề mặt.

 
alpharoom 2025-03-28

Việc cho rằng thông tin mà bài viết muốn truyền tải thiếu tính khách quan chỉ vì tác giả làm việc tại công ty đối thủ là công kích cá nhân. Nếu bỏ qua bối cảnh và lợi ích liên quan của tác giả khi đọc, đây có phải là một bài viết kỳ lạ không? Tôi nghĩ đó là thông tin hữu ích.