Tôi đang chạy một phiên bản Debian trên Amazon EC2 có cài đặt Node.js. Nếu tôi chạy mã bên dưới:
http = require('http');
http.createServer(function (request, response){
response.writeHead(200, {'Content-Type':'text/plain'});
response.end('Hello World\n');
}).listen(80);
console.log("Running server at port 80");
Tôi nhận được đầu ra bên dưới cho tôi biết có một quá trình khác đang nghe ở cổng 80:
Running server at port 80
events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EACCES
at errnoException (net.js:901:11)
at Server._listen2 (net.js:1020:19)
at listen (net.js:1061:10)
at Server.listen (net.js:1127:5)
at Object.<anonymous> (/home/admin/nodetests/nodetest.js:6:4)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
Bây giờ khi tôi kiểm tra xem liệu có một tiến trình nào (như root trong trường hợp bất kỳ thứ gì bị ẩn) đang nghe trên cổng 80 hay không bằng cách sử dụng:
netstat -tupln
Tôi nhận được đầu ra bên dưới, cho tôi biết không có gì nghe thấy ở cổng 80:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1667/sshd
tcp6 0 0 :::22 :::* LISTEN 1667/sshd
Tôi nên lưu ý rằng debian có cổng 80 mở như một quy tắc gửi đến nếu điều đó tạo ra sự khác biệt.
Câu hỏi của tôi là: Tôi đang làm gì sai? Tại sao tôi không thể xác định quá trình lắng nghe cổng 80? Tại sao nó bị chặn trong Debian? Tôi nên thực hiện các bước nào để mã chạy chính xác?