Server

ERR_CONNECTION_REFUSED — Nguyên nhân và cách khắc phục

Cập nhật 2026-08-31Đọc ~10 phút

ERR_CONNECTION_REFUSED nghĩa là trình duyệt đã tới được một máy ở địa chỉ đó, và máy đó gửi trả lại một lời từ chối rõ ràng. Không phải im lặng — mà là một câu trả lời thật sự, và câu trả lời là không.

Phân biệt được điều này trước khi bắt tay sửa sẽ tiết kiệm rất nhiều thời gian, vì nó loại bỏ ngay hàng loạt khả năng. DNS đã phân giải xong. Đường mạng thông. Có thứ gì đó đang sống ở địa chỉ IP đó. Vấn đề rất hẹp: không có dịch vụ nào lắng nghe trên cổng bạn yêu cầu, hoặc có thứ gì đó đang cố ý từ chối bạn.

So với lỗi timeout — nơi các gói tin biến mất không dấu vết và nguyên nhân có thể nằm ở bất kỳ đâu giữa router nhà bạn và máy chủ — thì "bị từ chối" dễ chẩn đoán hơn nhiều. Bài này đi qua đúng danh sách ngắn đó.

Refused, timed out, reset — ba lỗi khác nhau

Ba mã này thường bị coi như nhau kiểu "web hỏng rồi", nhưng mỗi cái nói cho bạn biết một điều rất cụ thể về chỗ nào đã hỏng.

LỗiChuyện gì xảy ra ở tầng mạngLoại trừ được điều gì
ERR_CONNECTION_REFUSEDMáy chủ gửi gói TCP RST — một lời "không" chủ độngDNS, định tuyến và khả năng kết nối đều ổn
ERR_CONNECTION_TIMED_OUTKhông có hồi đáp nào; gói tin bị bỏ âm thầmKhông loại được gì — lỗi có thể ở bất kỳ đâu
ERR_CONNECTION_RESETKết nối mở được rồi bị cắt giữa chừngKết nối ban đầu thành công; thứ gì đó cắt sau đó
DNS_PROBE_FINISHED_NXDOMAINTên miền không phân giải ra địa chỉ nàoMọi thứ sau DNS — bạn chưa đi được tới đó
💡 Khác biệt thực tế: tường lửa đặt ở chế độ DROP sinh ra lỗi timeout, còn đặt ở REJECT — hoặc đơn giản là không có dịch vụ nào lắng nghe — sinh ra lỗi refused. Nên "bị từ chối" thường có nghĩa là bạn đã đi tới tận máy chủ, và biết điều này trước khi đổ lỗi cho nhà mạng là rất đáng.

Nguyên nhân thường gặp, phổ biến nhất trước

  • Không có gì lắng nghe trên cổng đó. Web server đã sập, bị dừng, hoặc không tự khởi động lại sau khi reboot. Đây là nguyên nhân số một khi bạn là chủ website.
  • Bạn đang dùng sai cổng. Gọi https:// tới máy chủ chỉ phục vụ HTTP thuần, hoặc kết nối tới dev server ở cổng 3000 đã không còn chạy.
  • Tường lửa đặt ở REJECT thay vì DROP. Cả hai đều chặn bạn, nhưng REJECT gửi trả lời từ chối tạo ra đúng lỗi này.
  • Dịch vụ chỉ bind vào localhost. Rất hay gặp với môi trường phát triển và cơ sở dữ liệu mới cấu hình — tiến trình đang chạy, nhưng chỉ nhận kết nối từ chính máy đó.
  • Cấu hình proxy hoặc tiện ích mở rộng của trình duyệt sai. VPN hoặc extension proxy trỏ tới một proxy không chạy sẽ khiến mọi kết nối bị từ chối.
  • Phần mềm cục bộ chặn — diệt virus, phần mềm quản lý máy của công ty, hoặc công cụ kiểm soát truy cập từ chối kết nối ra ngoài tới host đó.
  • Website đã thật sự chuyển đi hoặc đóng cửa, và bây giờ có thứ khác trả lời ở địa chỉ IP đó.

Trước tiên: chỉ mình bạn hay tất cả mọi người?

Hai phút ở bước này tiết kiệm cả tiếng đồng hồ sửa một máy chủ chưa từng hỏng.

  • Mở website bằng dữ liệu di động với Wi-Fi đã tắt. Nếu vào được, máy chủ vẫn ổn và vấn đề nằm ở mạng, máy tính hoặc trình duyệt của bạn.
  • Thử cửa sổ ẩn danh, rồi thử một trình duyệt khác. Cách này loại tiện ích mở rộng và cấu hình proxy đã lưu ra khỏi danh sách nghi ngờ.
  • Dùng một công cụ kiểm tra "down for everyone" bất kỳ. Nó truy cập từ máy chủ bên ngoài và cho câu trả lời khách quan.
  • Thử cùng website từ một thiết bị khác trong cùng mạng. Nếu mọi thiết bị đều lỗi nhưng dữ liệu di động vẫn vào được, vấn đề nằm ở router hoặc bộ lọc của nhà mạng.
💡 Nếu chỉ mình bạn gặp lỗi, hãy kiểm tra cấu hình proxy trước tiên. Một thiết lập proxy còn sót lại từ VPN bạn đã gỡ là nguyên nhân phổ biến nhất của tình trạng "mọi website đều bị từ chối", và sửa mất mười giây.

Nếu bạn là người truy cập — kiểm tra theo thứ tự này

  • Xác nhận địa chỉ đúng, kể cả giao thức. Một số máy chủ chỉ lắng nghe HTTP và sẽ từ chối thẳng HTTPS, và ngược lại.
  • Tắt VPN hoặc extension proxy rồi thử lại. Nếu proxy được cấu hình nhưng phần mềm proxy không chạy, mọi kết nối đều bị từ chối.
  • Kiểm tra cấu hình proxy của hệ thống. Trên Windows xem trong Internet Options; trên macOS xem trong Network settings. Xóa những gì bạn không cố ý đặt.
  • Xóa cache trình duyệt và DNS cache. Trên macOS chạy "sudo dscacheutil -flushcache"; trên Windows chạy "ipconfig /flushdns".
  • Tạm tắt tính năng bảo vệ web của phần mềm diệt virus. Một số bộ bảo mật từ chối kết nối tới host nằm trong danh sách chặn mà không nói rõ.
  • Khởi động lại router. Việc này xóa trạng thái NAT cũ đôi khi khiến kết nối tới một đích cụ thể bị từ chối.
  • Nếu vẫn không được mà người khác vào bình thường, nhà mạng của bạn có thể đang lọc. Thử bằng dữ liệu di động để xác nhận trước khi tốn thêm thời gian.

Nếu bạn là chủ website — phần chẩn đoán quan trọng nhất

Khi bạn kiểm soát máy chủ, "bị từ chối" là một trong những lỗi dễ truy nhất, vì nó chỉ thẳng vào một câu hỏi rất cụ thể: có gì đang lắng nghe trên cổng đó không, và nó có nhận kết nối từ bên ngoài không?

  • Kiểm tra dịch vụ có chạy không: "systemctl status nginx" hoặc "systemctl status apache2". Nếu đã dừng, khởi động lại — rồi đọc log để biết vì sao nó dừng, vì chuyện đó sẽ lặp lại.
  • Xem cái gì đang thực sự lắng nghe: "ss -tlnp" (hoặc "netstat -tlnp"). Đây là lệnh cho nhiều thông tin nhất với lỗi này. Bạn cần thấy web server đang bind ở cổng 80 và 443.
  • Nhìn địa chỉ bind trong kết quả đó. "127.0.0.1:80" nghĩa là dịch vụ chỉ nhận kết nối nội bộ và sẽ từ chối mọi người khác. Nó cần là "0.0.0.0:80" hoặc IP công khai của bạn.
  • Kiểm tra tường lửa. Với ufw chạy "ufw status"; với firewalld chạy "firewall-cmd --list-all"; trên VPS còn phải kiểm tra tường lửa tầng mạng của nhà cung cấp, vốn tách rời với tường lửa trên máy.
  • Xác nhận từ bên ngoài máy chủ. Chạy "curl -I https://trangcuaban.com/" từ một máy khác, hoặc "telnet trangcuaban.com 443". Kiểm tra ngay trên máy chủ sẽ thành công kể cả khi bên ngoài bị chặn hoàn toàn.
  • Kiểm tra cổng mà dịch vụ thực sự dùng sau khi sửa cấu hình. Gõ nhầm trong dòng listen là nguyên nhân rất thường gặp ngay sau một lần chỉnh sửa.
  • Nếu dịch vụ không khởi động được, đọc error log trước khi thử lại. Xung đột cổng ("address already in use") và lỗi cú pháp trong file cấu hình là hai lý do phổ biến nhất.
💡 Kết quả của "ss -tlnp" trả lời gần hết những câu hỏi trên chỉ trong một dòng. Nếu web server không xuất hiện, nghĩa là nó không chạy. Nếu nó xuất hiện nhưng bind ở 127.0.0.1, nghĩa là nó chạy nhưng không thể truy cập từ bên ngoài. Hai trường hợp này có cách sửa hoàn toàn khác nhau.

Cái bẫy bind-address

Phần này xứng đáng có mục riêng vì nó tạo ra phiên bản khó hiểu nhất của lỗi: dịch vụ rõ ràng đang chạy, tường lửa rõ ràng đã mở, mà kết nối vẫn bị từ chối.

Nhiều dịch vụ mặc định bind vào 127.0.0.1 — địa chỉ loopback — nghĩa là chúng chỉ nhận kết nối xuất phát từ chính máy đó. Đây là mặc định bảo mật hợp lý cho cơ sở dữ liệu và dev server, và đúng là điều bạn muốn với MySQL trong đa số trường hợp.

Nhưng đó không phải điều bạn muốn với một web server công khai. Nếu ss hiển thị "127.0.0.1:80" thay vì "0.0.0.0:80", chỗ cần sửa nằm trong cấu hình dịch vụ chứ không phải tường lửa. Với Nginx là chỉ thị listen; với Apache là dòng Listen; với ứng dụng Node hay Python là tham số host khi khởi động — bind vào "localhost" thay vì "0.0.0.0" là một lỗi sai đúng một chữ nhưng tạo ra chính xác lỗi này.

Lý do khiến nhiều người mắc kẹt là kiểm tra ngay trên máy chủ thì hoàn toàn bình thường. Luôn kiểm tra từ một máy khác.

Ngăn nó xảy ra lần nữa

  • Bật dịch vụ để nó sống sót qua reboot: "systemctl enable nginx". Dịch vụ khởi động thủ công mà không được enable sẽ biến mất sau lần khởi động lại kế tiếp.
  • Đặt giám sát uptime kèm cảnh báo. Biết tin từ khách hàng khiến bạn mất nửa giờ đầu tiên và đắt giá nhất.
  • Kiểm tra cấu hình trước khi áp dụng. "nginx -t" xác thực cấu hình và bắt được những lỗi gõ nhầm khiến dịch vụ không khởi động lại được.
  • Ghi lại các quy tắc tường lửa. Quy tắc thêm vào lúc đang gỡ lỗi rồi quên xóa sẽ gây ra những lần từ chối bí ẩn nhiều tháng sau.
  • Theo dõi bộ nhớ. Dịch vụ bị OOM killer giết sẽ dừng gọn gàng và tạo ra đúng lỗi này — chạy "dmesg | grep -i oom" khi một dịch vụ chết mà không rõ lý do.
  • Luôn có đường vào thứ hai. VNC hoặc chế độ cứu hộ cho phép bạn sửa quy tắc tường lửa đã tự khóa mình ra ngoài; không có nó thì chỉ còn cách chờ hỗ trợ.

Muốn toàn quyền với dịch vụ và tường lửa của mình?

Cloud VPS NVMe với quyền root đầy đủ — đọc log thật, tự cấu hình tường lửa và địa chỉ bind. Từ ฿150/tháng.

Câu hỏi thường gặp

Connection refused và connection timed out khác nhau thế nào?

Refused nghĩa là máy chủ chủ động từ chối bằng cách gửi lại gói TCP RST — tức là nó tới được và có thứ gì đó đã trả lời. Timed out nghĩa là không có gì phản hồi cả, gói tin bị bỏ ở đâu đó dọc đường. Refused dễ chẩn đoán hơn nhiều vì nó loại trừ hoàn toàn DNS, định tuyến và khả năng kết nối.

Vì sao mọi website đều báo connection refused?

Gần như luôn là do cấu hình proxy. VPN hoặc extension proxy được cấu hình trỏ tới một proxy hiện không chạy sẽ khiến mọi kết nối bị từ chối. Kiểm tra cấu hình proxy của hệ thống và các tiện ích trình duyệt, xóa những gì bạn không cố ý đặt.

Dịch vụ của tôi đang chạy mà kết nối vẫn bị từ chối. Vì sao?

Nhiều khả năng nó đang bind vào 127.0.0.1 thay vì 0.0.0.0, nghĩa là chỉ nhận kết nối từ chính máy chủ. Chạy "ss -tlnp" rồi xem địa chỉ trong kết quả. Điều này cũng giải thích vì sao kiểm tra trên máy chủ thì được còn bên ngoài thì bị từ chối — luôn kiểm tra từ một máy khác.

ERR_CONNECTION_REFUSED có ảnh hưởng SEO không?

Có, nếu Googlebot nhận nó. Kết nối bị từ chối nghĩa là trang không thể được thu thập, và nếu kéo dài thì các trang sẽ rơi khỏi chỉ mục. Xem báo cáo Crawl stats trong Search Console để biết Googlebot thực sự gặp gì, vì nó có thể tới máy chủ của bạn theo đường khác với bạn.