Làm cách nào để chạy ứng dụng node.js trên cổng 80? Là các quá trình chặn cổng của tôi?


8

Tôi tin rằng cổng 80 trong trường hợp từ xa của tôi bị chặn và tôi đang cố chạy ứng dụng node.js bằng cổng 80. Tôi đã thử nghiệm với cổng 3000 và 3002 và cả hai cổng đều hoạt động tốt, nhưng tôi gặp lỗi khi chạy trên cổng 80. Tôi nghi ngờ cổng 80 bị chặn khỏi đầu ra netstat -anbên dưới, nhưng làm cách nào tôi có thể tìm thấy id của các địa chỉ đang chặn cổng 80 bên dưới?

[lucas@ecoinstance]~/node/nodetest1$ netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:3002            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:27017         127.0.0.1:51108         ESTABLISHED
tcp        0      0 127.0.0.1:51106         127.0.0.1:27017         ESTABLISHED
tcp        0      0 127.0.0.1:27017         127.0.0.1:51106         ESTABLISHED
tcp        0      0 127.0.0.1:51107         127.0.0.1:27017         ESTABLISHED
tcp        0      0 10.240.241.116:3002     174.61.171.61:36583     TIME_WAIT  
tcp        0      0 127.0.0.1:27017         127.0.0.1:51109         ESTABLISHED
tcp        0      0 10.240.241.116:42423    169.254.169.254:80      ESTABLISHED
tcp        0      0 127.0.0.1:51108         127.0.0.1:27017         ESTABLISHED
tcp        0    532 10.240.241.116:22       174.61.171.61:56824     ESTABLISHED
tcp        0      0 127.0.0.1:27017         127.0.0.1:51107         ESTABLISHED
tcp        0      0 10.240.241.116:42412    169.254.169.254:80      ESTABLISHED
tcp        0      0 127.0.0.1:51109         127.0.0.1:27017         ESTABLISHED
tcp        0      0 127.0.0.1:51105         127.0.0.1:27017         ESTABLISHED
tcp        0      0 10.240.241.116:42422    169.254.169.254:80      TIME_WAIT  
tcp        0      0 127.0.0.1:27017         127.0.0.1:51105         ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN     
udp        0      0 0.0.0.0:49948           0.0.0.0:*                          
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
udp        0      0 10.240.241.116:123      0.0.0.0:*                          
udp        0      0 127.0.0.1:123           0.0.0.0:*                          
udp        0      0 0.0.0.0:123             0.0.0.0:*                          
udp6       0      0 :::12151                :::*                               
udp6       0      0 :::123                  :::*                               
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     405680   /tmp/ssh-KdkxJfFLpKTC/agent.22
813
unix  2      [ ACC ]     STREAM     LISTENING     408230   /tmp/ssh-ofUeNNEwAqtP/agent.22
243
unix  2      [ ACC ]     STREAM     LISTENING     416227   /tmp/mongodb-27017.sock
unix  2      [ ACC ]     SEQPACKET  LISTENING     3692     /run/udev/control
unix  7      [ ]         DGRAM                    5286     /dev/log
unix  2      [ ACC ]     STREAM     LISTENING     5318     /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     16170    /tmp//tmux-1000/default
unix  2      [ ACC ]     STREAM     LISTENING     414450   /var/run/dbus/system_bus_socke

Và đây là nhật ký khi cố gắng chạy trên cổng 80 với node.js:

[lucas@ecoinstance]~/node/nodetest1$ npm start

> nodetest1@0.0.1 start /home/lucas/node/nodetest1
> node ./bin/www


events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EACCES
    at errnoException (net.js:904:11)
    at Server._listen2 (net.js:1023:19)
    at listen (net.js:1064:10)
    at Server.listen (net.js:1138:5)
    at Function.app.listen (/home/lucas/node/nodetest1/node_modules/express/lib/applicati
on.js:532:24)                                                                           
    at Object.<anonymous> (/home/lucas/node/nodetest1/bin/www:7:18)
    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)

npm ERR! nodetest1@0.0.1 start: `node ./bin/www`
npm ERR! Exit status 8
npm ERR! 
npm ERR! Failed at the nodetest1@0.0.1 start script.
npm ERR! This is most likely a problem with the nodetest1 package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node ./bin/www
npm ERR! You can get their info via:
npm ERR!     npm owner ls nodetest1
npm ERR! There is likely additional logging output above.
npm ERR! System Linux 3.13-0.bpo.1-amd64
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "start"
npm ERR! cwd /home/lucas/node/nodetest1
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.9
npm ERR! code ELIFECYCLE
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/lucas/node/nodetest1/npm-debug.log
npm ERR! not ok code 0

sudo netstat -lnpkhông trả lại bất kỳ cổng 80 nào phù hợp:

[lucas@ecoinstance]~/node/nodetest1$ sudo netstat -lnp                           [48/648]
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Progr
am name
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      29160/mon
god    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1976/sshd

tcp6       0      0 :::22                   :::*                    LISTEN      1976/sshd

udp        0      0 0.0.0.0:49948           0.0.0.0:*                           1604/dhcl
ient   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1604/dhcl
ient   
udp        0      0 10.240.241.116:123      0.0.0.0:*                           2076/ntpd

udp        0      0 127.0.0.1:123           0.0.0.0:*                           2076/ntpd

udp        0      0 0.0.0.0:123             0.0.0.0:*                           2076/ntpd

udp6       0      0 :::12151                :::*                                1604/dhcl
ient   
udp6       0      0 :::123                  :::*                                2076/ntpd

Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path
unix  2      [ ACC ]     STREAM     LISTENING     405680   22814/ssh-agent     /tmp/ssh-K
dkxJfFLpKTC/agent.22813
unix  2      [ ACC ]     STREAM     LISTENING     408230   24049/ssh-agent     /tmp/ssh-o
fUeNNEwAqtP/agent.22243
unix  2      [ ACC ]     STREAM     LISTENING     416227   29160/mongod        /tmp/mongo
db-27017.sock
unix  2      [ ACC ]     SEQPACKET  LISTENING     3692     284/udevd           /run/udev/
control
unix  2      [ ACC ]     STREAM     LISTENING     5318     1798/acpid          /var/run/a
cpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     16170    5177/tmux           /tmp//tmux
-1000/default
unix  2      [ ACC ]     STREAM     LISTENING     414450   28213/dbus-daemon   /var/run/d
bus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     404225   22324/1             /tmp/ssh-9
TlDmu4bjl/agent.22324

Câu trả lời:


15

Bạn đang cố gắng bắt đầu nút với tư cách là người dùng không root. Linux theo mặc định chỉ cho phép root liên kết với các cổng 1024 trở xuống.

Nếu bạn muốn chạy nó với tư cách là người dùng này, bạn có thể muốn xem /programming/413807/is-there-a-way-for-non-root- Processes-to-bind-to- đặc quyền-cổng-1024-on-l


1
Theo bindtrang web: EACCES The address is protected, and the user is not the superuser.Và bạn thấy EACCEStrong báo cáo lỗi của bạn.
Matthew Ife


1

Câu trả lời đơn giản nhất, hay nhất:

  • sudo apt-get install libcap2-bin
  • sudo setcap cap_net_bind_service=+ep /usr/local/bin/node
  • Ta da! Điều này cho phép ứng dụng nút của bạn chạy trên cổng 80 mà không phàn nàn.

Tại sao tôi thích nó? Bởi vì:

  • Bạn không phải sử dụng apache hoặc nginx
  • Bạn không phải chạy ứng dụng của bạn như root
  • Bạn sẽ không phải chuyển tiếp cổng (và xử lý mỗi lần máy của bạn khởi động)

Liên kết tham khảo: https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-en môi-on-an-ub Ubuntu-vps (Một bài viết tuyệt vời về cách thiết lập ứng dụng nút của bạn trên dịch vụ lưu trữ đám mây).


Còn các nền tảng khác ngoài Ubuntu thì sao?
Michael

Tôi nên làm bất cứ điều gì * nix, tôi tin
Kyle Chadha

1
Làm thế nào chúng ta có thể hoàn nguyên những thay đổi này nếu nó không hoạt động .. ??
Ritesh

1

Tôi đã cố gắng để chạy máy chủ bằng cách sử dụng node server.js. Nó đã không hiển thị bất kỳ lỗi. Cũng thế,

lsof -t -i:80

không liệt kê bất kỳ quy trình.

Vấn đề là tôi đã cố gắng ràng buộc như một người dùng không có đặc quyền. Nó đã hoạt động khi tôi cố gắng:

sudo node server.js

Rất đơn giản, nhưng, đôi khi bạn có thể quên nó và bạn sẽ bắt đầu chạy phía sau các quy trình máy chủ khác khi bạn có nhiều máy chủ như apache, nginx, v.v. đang chạy trên máy của bạn. (Giống như tôi đã làm). Hy vọng điều này sẽ giúp được ai đó !!!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.