에 첫 번째 Node.js
서버를 설정 cloud Linux node
중이며에 대한 세부 사항이 상당히 익숙 Linux admin
합니다. (BTW 나는 동시에 아파치를 사용하려고하지 않습니다.)
모든 것이 올바르게 설치되었지만을 사용하지 않으면 노드 root login
로들을 수 없습니다 port 80
. 그러나 보안상의 이유로 루트로 실행하지는 않습니다.
가장 좋은 방법은 무엇입니까?
- 보안 / 샌드 박스 화되도록 노드에 대한 좋은 권한 / 사용자를 설정 하시겠습니까?
- 이 제한 조건 내에서 포트 80을 사용하도록 허용하십시오.
- 노드를 시작하고 자동으로 실행하십시오.
- 콘솔로 전송 된 로그 정보를 처리합니다.
- 기타 일반적인 유지 관리 및 보안 문제.
포트 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 와 같은 URL을 사용해야합니다 .
많은 사람들이 여기에 붙어 있지만 해결책은 쉽습니다. 몇 가지 옵션이 있지만 이것이 내가 좋아하는 옵션입니다. 다음 명령을 입력하십시오.
sudo apt-get install libcap2-bin
sudo setcap cap_net_bind_service=+ep `readlink -f \`which 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이 옳습니다. 나는 최근 에 SSL 인증서를 관리하는 가벼운 nginx 프록시 로 이동하여 https
전환해야했습니다 iptables
. 나는 유용하다고 답을 과 함께 요지 로 gabrielhpugliese 그 처리 방법에. 기본적으로 나는
-
OpenSSL을 통해 SSL 인증서 서명 요청 (CSR) 생성
openssl genrsa 2048 > private-key.pem openssl req -new -key private-key.pem -out csr.pem
- 이 장소 중 하나 에서 실제 인증서를 얻었 습니다 ( Comodo 를 사용했습니다 )
- 설치된 nginx
-
을 변경
location
에/etc/nginx/conf.d/example_ssl.conf
에location / { proxy_pass http://localhost:3000; proxy_set_header X-Real-IP $remote_addr; }
-
cat
개별 인증서를 함께 모아서 nginxexample_ssl.conf
파일 에 링크하여 nginx에 대한 인증서를 형식화했습니다 (그리고 주석 처리되지 않은 것들은 이름에서 ‘example’을 제거했습니다 …)ssl_certificate /etc/nginx/ssl/cert_bundle.cert; ssl_certificate_key /etc/nginx/ssl/private-key.pem;
바라건대 다른 사람이 두통을 덜 수 있기를 바랍니다. 나는 이것을하는 순수한 노드 방법이 있다고 확신하지만 nginx는 빠르며 효과가있었습니다.