Kiểm tra port 80 giúp bạn xác định xem web server có thể truy cập được qua HTTP hay không - đây là giao thức mà trình duyệt sử dụng mặc định khi bạn nhập một URL thông thường không có "https://". Nếu port 80 bị chặn hoặc không có dịch vụ nào đang lắng nghe, người dùng sẽ gặp lỗi kết nối và website của bạn sẽ không thể truy cập được. Dưới đây là cách chẩn đoán và khắc phục chi tiết.
Mục lục
Port 80 thực sự hoạt động như thế nào
Port 80 là TCP port mặc định dành cho
HTTP (Hypertext Transfer Protocol)
. Khi trình duyệt kết nối đến
http://example.com
, nó tự động nhắm vào port 80 trên địa chỉ IP của server đó. Phần mềm server - Apache, Nginx, IIS, Caddy, hoặc bất kỳ phần mềm nào khác - phải đang lắng nghe tích cực trên port 80 thì kết nối mới thành công.
Port 80 được định nghĩa trong danh mục port chính thức của IANA và được chuẩn hóa trong RFC 9110. Đây là một "well-known" port, nghĩa là các port từ 0 đến 1023 được dành riêng cho các dịch vụ cấp hệ thống và yêu cầu quyền nâng cao (elevated privileges) để bind trên Linux/macOS.
Cách kiểm tra port 80 có đang mở không
Có nhiều cách để kiểm tra xem port 80 có đang mở hay không, tùy thuộc vào việc bạn kiểm tra cục bộ (ngay trên server) hay từ xa (từ một máy khác hoặc từ internet).
Dùng telnet
Telnet là cách kiểm tra thủ công nhanh nhất. Chạy lệnh này từ bất kỳ máy nào có thể truy cập mạng đến host đích:
telnet example.com 80
Nếu port 80 đang mở và có web server đang lắng nghe, bạn sẽ thấy con trỏ trống hoặc một HTTP banner. Nếu port bị đóng hoặc bị lọc, bạn sẽ nhận được thông báo "Connection refused" hoặc lệnh sẽ treo cho đến khi hết thời gian chờ.
Dùng curl
curl cung cấp thêm nhiều thông tin chi tiết - nó hiển thị phản hồi HTTP thực tế:
curl -v http://example.com
Flag
-v
in ra output chi tiết, bao gồm quá trình TCP handshake và các response header. Kết nối thành công sẽ hiển thị
* Connected to example.com (93.184.216.34) port 80
. Khi thất bại sẽ hiển thị
curl: (7) Failed to connect
.
Dùng nmap
nmap là công cụ chuẩn mực để quét port. Để kiểm tra riêng port 80:
nmap -p 80 example.com
Kết quả sẽ hiển thị một trong ba trạng thái: open (có dịch vụ đang lắng nghe), closed (port có thể truy cập nhưng không có dịch vụ nào lắng nghe), hoặc filtered (firewall đang loại bỏ các gói tin và nmap không thể xác định được trạng thái).
Dùng PowerShell trên Windows
Test-NetConnection -ComputerName example.com -Port 80
Lệnh
Test-NetConnection
của PowerShell trả về kết quả rõ ràng là
TcpTestSucceeded : True
hoặc
False
, rất thuận tiện để tích hợp vào script. Để xem hướng dẫn đầy đủ về kiểm tra port trên Windows, hãy xem
kiểm tra các port đang mở trên Windows
.
Dùng netstat để kiểm tra port 80
Khi bạn đang ở trên chính server đó,
netstat
cho bạn thấy chính xác tiến trình nào đang được bind vào port 80. Đây là công cụ phù hợp khi bạn cần trả lời câu hỏi "liệu có dịch vụ nào thực sự đang lắng nghe trên port 80 của máy này không?"
Linux / macOS
sudo netstat -tlnp | grep :80
Giải thích các flag:
-
-t- chỉ hiển thị kết nối TCP -
-l- chỉ hiển thị các socket đang lắng nghe -
-n- hiển thị địa chỉ dạng số (nhanh hơn, bỏ qua tra cứu DNS) -
-p- hiển thị tên tiến trình và PID
Kết quả thường trông như sau:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx
. Điều này cho biết nginx (PID 1234) đang lắng nghe trên tất cả các interface ở port 80.
Trên các hệ thống Linux hiện đại,
ss
nhanh hơn và được ưu tiên hơn so với
netstat
:
sudo ss -tlnp | grep :80
Windows
netstat -ano | findstr :80
Lệnh này liệt kê tất cả các kết nối có port 80 cùng với PID tương ứng. Để tìm tên tiến trình từ PID (ví dụ PID 4892):
tasklist /fi "pid eq 4892"
Chẩn đoán port 80 bị firewall chặn
Firewall chặn là nguyên nhân phổ biến nhất khiến port 80 có vẻ bị đóng từ bên ngoài dù web server của bạn đang chạy bình thường ở cục bộ. Có ba tầng mà việc chặn có thể xảy ra:
| Tầng | Nơi kiểm tra | Công cụ |
|---|---|---|
| Firewall hệ điều hành (server) | iptables / ufw (Linux), Windows Defender Firewall |
iptables -L -n
hoặc quy tắc Windows Firewall
|
| Security group trên cloud | AWS EC2 Security Groups, Azure NSG, GCP Firewall Rules | Quy tắc inbound trong bảng điều khiển cloud |
| Firewall mạng / ISP | Router ACL, ISP chặn port trên kết nối dân dụng | Liên hệ ISP hoặc dùng công cụ quét port từ bên ngoài |
Kiểm tra iptables trên Linux
sudo iptables -L INPUT -n -v | grep 80
Nếu bạn thấy quy tắc DROP hoặc REJECT cho port 80, đó chính là nguyên nhân. Để cho phép port 80 bằng ufw:
sudo ufw allow 80/tcp
sudo ufw reload
Kiểm tra AWS Security Groups
Nếu server của bạn đang chạy trên EC2, hãy vào bảng điều khiển EC2 - Security Groups - Inbound rules. Bạn cần có một quy tắc cho phép TCP port 80 từ
0.0.0.0/0
(hoặc dải IP cụ thể của bạn). Nếu không có quy tắc này, toàn bộ lưu lượng port 80 sẽ bị loại bỏ trước khi chạm đến firewall hệ điều hành.
Để tìm hiểu sâu hơn về chẩn đoán port phía Linux, hãy xem hướng dẫn đầy đủ về kiểm tra các port đang mở trên Linux , bao gồm iptables, ufw, firewalld và nftables.
Port HTTP không phản hồi: nguyên nhân thường gặp và cách xử lý
Khi port HTTP không phản hồi, vấn đề thường rơi vào một trong các trường hợp sau:
-
Web server không chạy
- Kiểm tra bằng
systemctl status nginxhoặcsystemctl status apache2. Nếu dịch vụ đã dừng, hãy khởi động lại:sudo systemctl start nginx. -
Web server bị crash khi khởi động
- Kiểm tra log:
sudo journalctl -u nginx --since "10 minutes ago". Lỗi cú pháp trong file cấu hình hoặc xung đột port sẽ được ghi lại ở đây. -
Server chỉ bind vào localhost
- Nếu cấu hình server của bạn chỉ định
listen 127.0.0.1:80thay vìlisten 0.0.0.0:80, nó sẽ không chấp nhận kết nối từ bên ngoài. Hãy sửa lại địa chỉ bind trong file cấu hình server. - Port 80 đã bị tiến trình khác chiếm - Một tiến trình khác đã chiếm port 80 trước khi web server của bạn khởi động. Dùng netstat để xác định tiến trình đó, sau đó dừng nó hoặc cấu hình lại một trong hai dịch vụ.
-
SELinux hoặc AppArmor chặn việc bind
- Trên các hệ thống RHEL/CentOS, SELinux có thể ngăn một tiến trình không chuẩn bind vào port 80. Kiểm tra
ausearch -m AVC -ts recentđể xem có từ chối nào không.
curl http://127.0.0.1
trực tiếp trên server. Nếu lệnh này thành công nhưng kết nối từ bên ngoài vẫn thất bại, vấn đề nằm ở firewall hoặc quy tắc mạng - không phải bản thân web server.
Kiểm tra kết nối port 80 từ bên ngoài mạng
Kiểm tra từ máy của chính bạn có thể cho kết quả không chính xác - bạn có thể đang ở cùng mạng LAN với server, bỏ qua các quy tắc firewall chỉ áp dụng cho lưu lượng từ bên ngoài. Để kiểm tra kết nối port 80 đúng như trải nghiệm của người dùng thực, bạn cần thực hiện kiểm tra từ bên ngoài.
Bạn có thể kiểm tra các response header HTTP của server từ bên ngoài bằng công cụ HTTP Headers Checker của chúng tôi. Công cụ này lấy các header từ URL của bạn và hiển thị chính xác những gì trình duyệt nhận được - mã trạng thái, loại server, chuỗi redirect và nhiều thông tin khác - tất cả từ một điểm quan sát bên ngoài.
Các lựa chọn bên ngoài khác:
- Công cụ quét port trực tuyến - Các trang như portchecker.co hoặc canyouseeme.org cho phép bạn nhập địa chỉ IP và số port để kiểm tra từ server của họ.
-
Từ VPS hoặc cloud shell
- Khởi động một instance cloud miễn phí ở một khu vực khác và chạy
nc -zv your-server-ip 80từ đó. -
Dùng nc (netcat) cục bộ
-
nc -zv example.com 80cho kết quả mở/đóng nhanh chóng mà không cần cài thêm gì trên hầu hết các hệ thống Linux/macOS.
Port 80 và port 443: khi nào dùng cái nào
Port 443 xử lý HTTPS (HTTP được mã hóa qua TLS). Hầu hết các trang web hiện đại đều chuyển hướng toàn bộ lưu lượng port 80 sang port 443 ngay lập tức. Nhưng port 80 vẫn quan trọng vì một số lý do:
- ACME/Let's Encrypt HTTP-01 challenge - certbot của Let's Encrypt dùng port 80 để xác minh quyền sở hữu tên miền. Nếu port 80 bị chặn, việc cấp chứng chỉ sẽ thất bại.
- Dịch vụ nội bộ không dùng TLS - Nhiều công cụ nội bộ, monitoring agent và microservice giao tiếp qua HTTP thuần trên port 80 trong mạng riêng.
- Thiết bị cũ và IoT - Một số thiết bị nhúng và client cũ không hỗ trợ TLS và phụ thuộc vào port 80.
- Hạ tầng redirect - Dù bạn phục vụ mọi thứ qua HTTPS, bạn vẫn cần port 80 mở để bắt và chuyển hướng các yêu cầu HTTP thay vì để người dùng gặp lỗi kết nối.
Xem ngay port 80 đang thực sự trả về gì
Công cụ HTTP Headers Checker của chúng tôi lấy phản hồi trực tiếp từ bất kỳ URL nào để bạn xác nhận port 80 có đang mở không, kiểm tra chuỗi redirect và xem chính xác các mã trạng thái mà server gửi đi - không cần dùng dòng lệnh.
Kiểm tra HTTP Headers ngay →
Trên Linux, chạy
sudo ss -tlnp | grep :80
hoặc
sudo netstat -tlnp | grep :80
. Cả hai lệnh đều hiển thị tên tiến trình và PID đang được bind vào port 80. Trên Windows, dùng
netstat -ano | findstr :80
để lấy PID, sau đó dùng
tasklist /fi "pid eq [PID]"
để tìm tên tiến trình. Các dịch vụ thường chiếm port 80 bao gồm nginx, apache2, IIS và các server Node.js.
Dùng các lệnh netstat hoặc ss tương tự nhưng lọc theo 8080 thay vì 80:
sudo ss -tlnp | grep :8080
trên Linux, hoặc
netstat -ano | findstr :8080
trên Windows. Port 8080 là port HTTP thay thế phổ biến được dùng bởi các development server, Tomcat, Jenkins và proxy. Nếu đã có dịch vụ nào đó bind vào đó, bạn cần dừng nó hoặc cấu hình dịch vụ mới của bạn sang một port khác.
Trên các web server chuyên dụng và VPS, có - port 80 thường được mở và là điều bình thường. Trên các kết nối internet dân dụng, nhiều ISP chặn port 80 chiều vào để ngăn khách hàng tự host server công khai từ kết nối gia đình. Trên các instance cloud, port 80 thường bị đóng mặc định trong security group cho đến khi bạn thêm quy tắc inbound cho phép nó một cách tường minh.
Từ bên ngoài server, dùng
nmap -p 80 your-server-ip
hoặc
telnet your-server-ip 80
. Từ chính server đó, dùng
ss -tlnp | grep :80
để xác nhận có dịch vụ đang lắng nghe. Ngoài ra hãy kiểm tra quy tắc firewall - trên Linux với ufw, chạy
sudo ufw status
để xem port 80 có được liệt kê là được phép không.
Trên Linux với ufw:
sudo ufw allow 80/tcp
. Với iptables trực tiếp:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
. Trên Windows, thêm quy tắc inbound trong Windows Defender Firewall cho TCP port 80. Trên cloud server, thêm quy tắc inbound trong security group hoặc network security group của bạn để cho phép TCP port 80 từ dải nguồn mong muốn.
Port 80 mở khi một web server được cấu hình để phục vụ lưu lượng HTTP, đây là tiêu chuẩn cho bất kỳ website công khai nào. Port này cũng được giữ mở trên các server chuyển hướng HTTP sang HTTPS (port 443), vì bản thân việc chuyển hướng cần chấp nhận kết nối port 80 ban đầu. Các công cụ gia hạn chứng chỉ như certbot của Let's Encrypt cũng yêu cầu port 80 cho HTTP-01 domain validation challenge.
Mở Windows Defender Firewall with Advanced Security, nhấp vào "Inbound Rules", sau đó "New Rule". Chọn "Port", chọn TCP, nhập 80 làm specific local port, chọn "Allow the connection", áp dụng cho tất cả các profile (Domain, Private, Public) và đặt tên cho quy tắc. Ngoài ra, bạn có thể chạy lệnh này trong PowerShell với quyền quản trị viên:
New-NetFirewallRule -DisplayName "HTTP Port 80" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
.
Có, trên Linux và macOS, port 80 là privileged port (các port từ 0 đến 1023 yêu cầu quyền root hoặc capability CAP_NET_BIND_SERVICE để bind). Điều này có nghĩa là một tiến trình người dùng thông thường không thể lắng nghe trên port 80 mà không có quyền nâng cao. Các web server như nginx và Apache thường được khởi động với quyền root để bind port 80, sau đó chuyển sang user có quyền thấp hơn để xử lý các yêu cầu. Trên Windows, không có hạn chế tương đương đối với port 80.
Port 80 (HTTP) được dùng thay vì port 443 (HTTPS) trong các trường hợp TLS không cần thiết hoặc không thực tế - chẳng hạn như các microservice nội bộ trên mạng riêng đáng tin cậy, môi trường phát triển cục bộ, hoặc thiết bị IoT không hỗ trợ TLS. Port 80 cũng bắt buộc phải có cho HTTP-01 certificate challenge của Let's Encrypt. Đối với bất kỳ trang web công khai nào, port 443 với TLS được khuyến nghị mạnh mẽ, với port 80 chỉ được giữ mở cho việc redirect.
Không, đây là hai port khác nhau. Port 80 là chuẩn do IANA chỉ định cho HTTP và được trình duyệt tự động sử dụng khi không có port nào được chỉ định. Port 8000 là port thay thế không chính thức thường được dùng bởi các development server - Python's
python -m http.server
mặc định dùng port 8000, cũng như development server của Django. Để truy cập dịch vụ trên port 8000, bạn phải chỉ định nó tường minh trong URL:
http://example.com:8000
.