nginx로 https 설정을 하다가 nginx와 같은 프록시 서버가 있을 때 따로 추가해줘야할 쿠키 설정이 있다는 게 떠올라서 글을 쓰게되었습니다.
우선 다른 도메인간 혹은 포트 간 쿠키 공유는 물론이고 요청과 응답을 보내려면 cors 설정을 해줘야 합니다. http 요청을 할 때 access control allow origin에 해당 도메인이 있어야 요청이 가게 되는데요. 귀찮게 하는 부분도 있기는 하지만 보안상으로는 좋기 때문에 뭐라 할 수는 없죠.
게다가 cors라는 패키지를 사용하면 정말 간단히 해결할 수 있습니다. 일단 이 글은 cors에 관한 글이 아니기 때문에 이 정도로 마치고요.
express-session와 cookie-parser라는 패키지를 쓸 때 nginx와 같은 프록시 서버가 있을 때 제가 어떻게 설정을 했는지 보여드리겠습니다. 그 전에 개발 상태였을 때 상태를 보여드리겠습니다. (참고로 저는 express.js를 사용중입니다.)
session({
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
secure: false
},
secret: process.env.COOKIE_SECRET!,
});
개발 상태기 때문에 secure도 false로 되어있습니다. 이제 배포 상태일 때를 보여드리겠습니다.
session({
resave: false,
saveUninitialized: false,
proxy: true,
cookie: {
httpOnly: true,
secure: true,
domain: process.env.NODE_ENV === 'production' && '.kihat.ga',
},
secret: process.env.COOKIE_SECRET!,
});
보면 proxy: true와 cookie에서는 domain 부분이 추가되었습니다.(https 배포상태기 때문에 secure도 true가 되어있습니다.) 거기에 추가로
app.set('trust proxy', 1);
설정까지 추가해줘야 합니다.
이렇게 proxy: true, domain 그리고 app.set('trust proxy', 1); 이 세 부분을 설정해주시면 프록시 서버가 중간에 있더라도 쿠키가 잘 가게 됩니다.