programing

포트 80(Ubuntu/Linode)에서 Node.js를 실행하는 경우의 모범 사례

linuxpc 2023. 5. 26. 20:46
반응형

포트 80(Ubuntu/Linode)에서 Node.js를 실행하는 경우의 모범 사례

첫 번째 설정 중입니다.Node.js의 서버cloud Linux node그리고 저는 이 사건의 세부 사항들에 대해 꽤 생소합니다.Linux admin(참고로 저는 Apache를 동시에 사용하려고 하는 것이 아닙니다.)

모든 것이 올바르게 설치되었지만 사용하지 않는 한root login들을 수 없습니다.port 80노드를 포함합니다.하지만 보안상의 이유로 루트로 실행하지는 않을 것입니다.

다음 중 가장 좋은 방법은 무엇입니까?

  1. 안전하게 / 샌드박스로 보호되도록 노드에 대한 적절한 사용 권한 / 사용자를 설정하시겠습니까?
  2. 이러한 제약 조건 내에서 포트 80을 사용할 수 있습니다.
  3. 노드를 시작하고 자동으로 실행합니다.
  4. 콘솔로 전송된 로그 정보를 처리합니다.
  5. 기타 일반적인 유지보수 및 보안 문제.

포트 80 트래픽을 다른 수신 포트로 전달해야 합니까?

감사해요.

포트 80

클라우드 인스턴스에서 수행하는 작업은 다음 명령을 사용하여 포트 80을 포트 3000으로 리디렉션하는 것입니다.

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

그런 다음 포트 3000에서 Node.js를 시작합니다.포트 80에 대한 요청은 포트 3000에 매핑됩니다.

또한 다음을 편집해야 합니다./etc/rc.local파일을 작성하고 다음 행을 추가합니다.sudo그러면 기계가 부팅될 때 리디렉션이 추가됩니다.필요없습니다sudo/etc/rc.local명령어가 다음과 같이 실행되기 때문입니다.root시스템이 부팅될 수 있습니다.

로그

영원한 모듈을 사용하여 Node.js를 시작합니다.충돌이 발생하면 다시 시작하고 콘솔 로그를 파일로 리디렉션합니다.

부팅 시 실행

포트 리디렉션을 위해 편집한 파일에 Node.js 시작 스크립트를 추가합니다./etc/rc.local그러면 시스템이 시작될 때 Node.js 시작 스크립트가 실행됩니다.

디지털 오션 및 기타 VPS

이는 Linode뿐 아니라 Digital Ocean, AWS EC2 및 기타 VPS 공급업체에도 적용됩니다.그러나 RedHat 기반 시스템에서는/etc/rc.local이라/ect/rc.d/local.

포트 80을 사용할 수 있는 안전한 사용자 권한 부여

응용 프로그램을 루트 사용자로 실행하지는 않지만 안전한 사용자에게 기본 HTTP 포트(80)를 사용할 수 있는 권한이 없다는 문제가 있습니다.당신의 목표는 다음과 같이 사용하기 쉬운 URL로 이동하여 방문자가 사용할 수 있는 웹 사이트를 게시하는 것입니다.http://ip:port/

이 루트로 하지 않는 한, 당신은 " 을스럽게루도트로지않그하인합는다니다유한"와 같은 해야 할 입니다.http://ip:port여기서 포트 번호 > 1024.

많은 사람들이 여기에 갇히지만, 해결책은 쉽습니다.몇 가지 선택지가 있지만 이것이 제가 좋아하는 것입니다.다음 명령을 입력합니다.

sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\``

이제 Node 응용 프로그램에 포트 80에서 실행하기를 원한다고 말하면 불만이 없습니다.

참조 링크를 확인하십시오.

포트 80(또는 443)에 바인딩한 후 루트 권한을 삭제합니다.

이렇게 하면 포트 80/443이 보호된 상태로 유지되는 동시에 요청을 루트로 처리할 수 없습니다.

function drop_root() {
    process.setgid('nobody');
    process.setuid('nobody');
}

위의 기능을 사용한 전체 작동 예:

var process = require('process');
var http = require('http');
var server = http.createServer(function(req, res) {
    res.write("Success!");
    res.end();
});

server.listen(80, null, null, function() {
    console.log('User ID:',process.getuid()+', Group ID:',process.getgid());
    drop_root();
    console.log('User ID:',process.getuid()+', Group ID:',process.getgid());
});

자세한 내용은 이 전체 참조를 참조하십시오.

포트 80(원래 질문)에 대해서는 Daniel이 정확하게 맞습니다.나는 최근에 이사했습니다.https그리고 전환해야 했습니다.iptablesSSL 인증서를 관리하는 가벼운 nginx 프록시에 연결합니다.저는 그것을 다루는 방법에 대한 가브리엘요지와 함께 유용한 답을 찾았습니다.기본적으로 나는

그것이 다른 누군가의 두통을 덜어줄 수 있기를 바랍니다.순수 노드 방식으로 이 작업을 수행할 수 있지만 nginx는 신속하고 효과적이었습니다.

언급URL : https://stackoverflow.com/questions/16573668/best-practices-when-running-node-js-with-port-80-ubuntu-linode

반응형