2016-07-27 3 views

답변

3

는 요청의 출처 (클라이언트)를 나타내는 프록시 서버가 설정 한 헤더도 고려하여 실제 클라이언트 IP 주소를 확인하려고 시도합니다 (이것은 trust proxy 설정이 명시 적으로 활성화 된 경우에만 수행되지만).

req.connection.remoteAddress에는 요청을 수행하는 클라이언트의 IP 주소가 포함됩니다. 프록시 서버의 경우 프록시의 IP 주소가되며 클라이언트가 대신 프록시가 요청을 전달하는 IP 주소가 아닙니다.

Express 서버로 요청을 전달하는 역방향 프록시를 사용하는 경우 req.ip을 사용하고 trust proxy을 사용하는 것이 가장 좋은 해결책입니다. 그렇지 않으면 평범한 req.ip 만 계속 수행됩니다. 사용자 IP를 얻을 수

2

가장 좋은 방법은 보안상의 이유로 (Cloudflare 같은) 서버 미들웨어 (또는 가장 일반적으로 사용되는 프록시)를 사용할 수 있기 때문에이 var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;

같은 req.headers['x-forwarded-for'] || req.connection.remoteAddress;

그리고 당신은 req.connection.remoteAddress를 사용하는 경우 매번 미들웨어 서버 IP 주소를 전송하지만 x-forwarded-for 헤더와 req.connection.remoteAddress 또는 req.ip을 함께 사용할 수 있습니다. 아래 의견 req.ip || req.connection.remoteAddress를 사용하는 최선의 방법에 언급 된 자세한 내용은

x-forwarded-for http header

편집

을 읽을; 프록시없이 응용 프로그램을 사용하더라도 미래에는 프록시와 함께 사용할 수 있으며 위의 메서드를 사용하면 응용 프로그램을 변경하지 않고 사용할 수 있기 때문입니다.

+0

나는 프록시를 사용하지 않으므로 사용해야하는 프록시를 사용하지 않으면 나중에 사용할 프록시를 사용하고 있습니까? (만약 내가 방금 물었던 것에 맞도록 답을 편집 할 수 있다면, 같은 문제를 겪는 미래의 사람들을 도울 것입니다.) – guyforlowbro

+0

@guyforlowbro, 명확성을 위해 업데이트. –

+0

x-forwaded-for 헤더에 ip가 두 개 이상 포함될 수 있음을 이해합니다. (예를 들어, 익스프레스 앱이 프록시 뒤에있는 경우). 그래서 'req.ip'을 고수하는 것은 – lascort

관련 문제