서버에서는 클라이언트를 구별하기 위한 방법으로 ip주소를 확인할 수 있다.
express에서는 이를 어떻게 확인할 수 있을지 알아보았다.
const express = require("express");
const app = express();
const port = 8080;
app.get("/", (req, res) => {
res.send("Hello World!");
});
app.get("/ip", (req, res) => {
const ip = req.headers["x-forwarded-for"] || req.ip;
console.log("req.ip", ip);
res.status(200).send({ ip, message: "Check Your Ip" });
});
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
위와 같이 헤더의 X-Forwarded-For를 확인할 수 있다.
X-Forwarded-For는 클라이언트의 IP주소를 확인하는 표준 헤더로 express에서도 역시 이를 통해서 ip를 확인할 수 있다.
또는 req.ip를 통해서 간단하게 요청한 클라이언트의 ip가 무엇인지 알 수 있다.
🍙 req.ip와 req.headers["x-forwarded-for"]는 같은 값을 가진다.
https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-Forwarded-For
X-Forwarded-For - HTTP | MDN
X-Forwarded-For (XFF) 헤더는 HTTP 프록시나 로드 밸런서를 통해 웹 서버에 접속하는 클라이언트의 원 IP 주소를 식별하는 사실상의 표준 헤더다. 클라이언트와 서버 중간에서 트래픽이 프록시나 로드
developer.mozilla.org
로컬 환경에서 이 서버를 테스트해보면, ::1 라는 예상하지 못한 값을 얻을 수 있다.
이는 IPv6로 표현된 IP 값이며, 0:0:0:0:0:0:0:1를 짧게 요약하여 보여준 것이다.
::1는 IPv4로는 127.0.0.1 를 의미하는데, express에서도 IPv4로 ip를 표시하게 할 수 있다.
// use IPv4
app.listen(port, "0.0.0.0", () => {
console.log(`Example app listening on port ${port}`);
});
하단의 app.listen의 두 번째 인자로 hostname을 넣어줄 수 있는데, 이를 통해서 ip주소가 어떻게 표현될지 설정할 수 있다.
위와 같이 코드를 수정하면, ip의 주소가 기존에 우리에게 더 친숙한 127.0.0.1과 같이 표현되는 걸 확인할 수 있다.
HTTP | Node.js v4.9.1 Manual & Documentation
HTTP# Stability: 2 - Stable To use the HTTP server and client one must require('http'). The HTTP interfaces in Node.js are designed to support many features of the protocol which have been traditionally difficult to use. In particular, large, possibly chun
nodejs.org
프록시 서버를 사용하고 있을 때, ip주소를 확인하면 클라이언트의 ip주소가 아니라 프록시 서버의 ip주소를 얻게 되버린다.
이때 클라이언트 서버의 ip주소를 확인하기 위해서는 "trust proxy"를 설정해야 한다.
app.set('trust proxy', true);
일반적으로 trust proxy는 false로 설정되어 있고, 가장 마지막(X-Forwarded-For 헤더의 맨 뒤) ip주소를 반환한다. 이를 true로 바꾸어주면 최초 요청(X-Forwarded-For 헤더의 가장 앞)에 대한 ip주소를 반환하기에 클라이언트의 ip를 확인할 수 있게 된다.
https://expressjs.com/ko/guide/behind-proxies.html
프록시 환경에서 Express 사용
프록시 환경에서 Express 사용 프록시 뒤에서 Express 앱을 실행할 때는, (app.set()을 이용하여) 애플리케이션 변수 trust proxy를 다음 표에 나열된 값 중 하나로 설정하십시오. 애플리케이션 변수 trust pr
expressjs.com
'Node' 카테고리의 다른 글
express의 template engine 사용하기 (ejs) (0) | 2023.07.13 |
---|---|
typeORM 사용하기 (0) | 2023.07.07 |
OAuth2.0에 대해서 알아보기 (with node.js) (0) | 2023.04.07 |
http 통신 request의 query, params, body (with express) (0) | 2023.03.25 |
Node.js에서 ORM 사용하기 (sequelize 기본 설정 하기) (0) | 2023.03.23 |