2017-12-21 23 views
1

웹 응용 프로그램이 포트 3000에서 실행됩니다. 액세스하려는 사람이 있다면 http://abcdomain.com:3000/을 통해 액세스해야합니다. 응용 프로그램을 http://abcdomain.com/에 액세스 가능하게 만들고 싶습니다.노드 응용 프로그램의 리디렉션 포트

나는

을 달성하는 방법을 내 어플은 리눅스에서 DNS를 변경하지만, URL에 포트 번호를 숨길 수없는 스피 한

를 실행하는 특정 포트 (3000)에 기본 포트를 변경하려면

+0

가능한 중복 ... https : //로 유래한다. com/questions/16573668/best-practices-running-node-js-with-port-80-ubuntu-linode – AdamJeffers

답변

2

나는 내 응용 프로그램

당신이 할 수있는 실행중인 특정 포트 (3000)에 기본 포트를 변경하려면 기본 포트를 변경하지 마십시오. 그것은 브라우저에 의해 결정됩니다. 브라우저에 포트가없는 URL이 표시되면 기본 포트 80 (http) 또는 443 (https)이 선택되고 해당 포트가 사용됩니다. 이것은 서버에서 제어 할 수있는 것이 아닙니다.

그러나 서버의 포트 80에서 요청을 처리 한 다음 해당 포트에서 처리 할 수 ​​있습니다. 여기에 귀하의 선택의 일부입니다 :

  1. 포트 80에서 서버 (기본 http 포트) 그래서 포트 번호가 URL에 필요한되지 않고, 리디렉션 또는 전달이 서버에 필요하지 않습니다를 실행합니다.

  2. iptables를 사용하여 Linux 서버에서 자동 포트 전달을 설정하면 들어오는 포트 80 요청이 자동으로 포트 3000으로 라우팅됩니다. 여기에 one answer에 방법이 나와 있습니다. 따라서 사용자는 포트 번호가 80 인 서버에 도착하는 URL을 사용하고 서버의 iptable 설정은 포트 3000으로 전달합니다.

  3. 다음과 같은 유형의 인프라를 사용하십시오. 서버가 수신중인 포트 3000으로 포트 80 요청을 전달할 수있는 NGINX 프록시 또는로드 밸런서와 같은 웹 서버. 높은 포트 번호에서 실행하기 때문에

참고로, 내 라즈베리 파이 리눅스 Node.js를 서버에 옵션 2를 사용, 내가 (보안을 위해 좋다) 상승 된 권한없이 내 서버를 실행할 수 있습니다, 아직 먼저, iptable 포트 포워딩을 사용하면 사용자가 포트 번호없이 서버에 액세스 할 수 있습니다.


리디렉션 서버 (당신이 의견을 요청하는 등) 최악의 옵션처럼 보인다, 그러나 당신은 이런 식으로 구현할 수 :

// set up plain express server 
const app = require('express')(); 

// set up route to redirect all routes to port 3000 
// note this only works for GET requests, things like POST from your code or forms 
// must specify the proper port 3000 
app.get('*', function(req, res) { 
    res.redirect('http:3000//' + req.headers.host + req.url); 
}); 

// have it listen on 80 
app.listen(80); 
+0

우리 회사는 option2를 사용하고 싶지 않습니다. 그들은 http 리디렉션을 사용하도록 제안받습니다. iam은 http 리디렉션을 사용하는 방법을 모르십니까? – Jan

+0

@Jan - http 리디렉션을 사용하면 들어오는 요청을 포트 3000으로 리디렉션 한 다음 ': 3000'이 사용자의 브라우저에 표시되는 포트 80에서 다른 웹 서버를 실행해야합니다. 그것이 지금까지 가장 바람직한 해결책입니다. – jfriend00

+0

내가 어떻게 할 수 있는지 알려 주실 수 있습니까? 이 작업 코드가 있습니까? – Jan