2016-10-05 2 views
0

때때로 노드 응용 프로그램의 메일에 정규화 된 URL을 보내려고합니다. 또는 팬텀 페이지 객체의 내용을 설정하고 싶습니다.nodejs express : req 객체의 포트가있는 호스트 이름

배포 설정에서 이와 같은 전체 URL을 얻을 수 있습니다. 나는 포트를 얻는 방법을 알고

http://localhost/myapp 대신

http://localhost:3000/myapp 떨어져 있지만 같은 것을 사용하지 않으 :

'http://' + req.hostname + '/myapp' 

그러나 개발 시스템에 일반적으로 생산

'http://' + req.hostname + ':' + port + '/myapp' 

프록시 뒤에서 배치 할 때 이런 말도 안되는 소리가납니다.

http://domain.com:3000/myapp

응용 프로그램 프록시 외부에서 실행하면 요청 객체에서 포트 호스트 이름을 얻을 수있는 현명한 방법이 있나요?

답변

0

당신이 찾고있는 것은 X-Forwarded-For header입니다. 프록시,로드 밸런서 등을 사용하는 경우 원래 URL을 얻는 가장 안전한 방법입니다. 요청에이 URL이 있는지 확인하고 URL이 이미 존재하는지 확인하십시오. 그렇지 않으면 이미 구현 한 것을 사용하십시오.

express source 도움이 될 것이다

  • req.hostname의 값은 클라이언트에 의해 또는로 설정 될 수 X 전달 된 호스트 헤더에 설정된 값으로부터 도출 프록시

  • X-Forwarded-Proto는 앱에 인지 여부를 알려주기 위해 역방향 프록시에서 설정하거나 https 또는 http 또는 유효하지 않은 이름인지 여부를 지정할 수 있습니다. 이 값은 req.protocol에 반영된 입니다.

  • req.ip 및 req.ips 값은 X-Forwarded-For의 주소 목록으로 채워집니다.

+0

예. 나는 이것을하고있다. 말한 바와 같이. 배포 할 때 모든 것이 제대로 작동해야합니다. 문제는 내 개발 플랫폼에만 존재합니다. 그래서 나는 localhost : 3000을 하드 코딩하고 버전 제어를하기 전에 주석을 전환합니다. 작동하지만 우아한 것은 아니므로 배치에서 작동하는 것처럼 로컬 호스트 개발에서이 작업을 수행 할 수있는 더 스마트 한 것이 있는지 여부에 대한 의문이 있습니다. –