NGINX에서 header의 내용을 해석할 수 있다. proxy 에게 header 정보를 변경하거나 그대로 보낼 수도, client에게 response로 header를 추가할 수 있다.
바디 - 어플리케이션 해석
헤더 내용을 해석해 여러가지 동작 할 수 있음. 특히 캐시같은 경우 웹브라우저 이용하는 어플리케이션인 경우 캐시같은 것도 컨트롤 할 때 nginx가 캐시하고 있는 것을 캐시에 대한 헤더 정보를 보고서 먼저 응답하거나 그렇게 해서 빨리 서빙하는 그런 기능도 가능하기 때문에 헤더를 해석하는 내용이 필요하다.
console.log(JSON.stringify(req.headers))
이걸 복사해서 아까 만든 server.js 를 수정할 것임.
우선은 지금 돌고 있는 서버를 kill 하고

server.js 를 수정하자.

원래 있던 API콜 했던 로그 밑에다가 강의 자료에 있는 request.headers 를 붙여넣으면 헤더 내용을 다 불러온다. 그리고 json으로 남기겠다. 이렇게 로깅을 추가하자.
그리고 밑에있는 customer API도 마찬가지로 추가해주자.

2번 서버.
두 서버 모두 추가를 해주고
sudo nginx -s reload 후
두 서버 다시 서버를 띄워보자.
nohup node server.js > server.log 2>&1 & echo $! > run.pid
tail -f server.log
로 둘 다 server.log에 잘 들어오는지 확인하자.
nginx가 있는 1번 서버에서

/etc/nginx/conf.d 에서
sudo vi header.conf 만들자
server {
listen 8086;
server_name headerserver;
location /user {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://13.125.255.35:9000;
}
location /customer {
proxy_set_header X-CUSTOM custom;
proxy_pass http://13.209.4.45:9000;
}
}

location /user 라는 API 받으면 proxy_set_header 한 다음에
Host - 이게 key고, 그 뒤에가 value 다. $host (예약변수)
그 다음은 클라이언트한테 받은 그 host 정보.
$remote_addr; 이거는 클라이언트 요청한 그 IP주소, 클라이언트의 IP주소가 된다.
proxy_pass 1번 서버 IP:9000;
location customer API에 대해선 마음대로 key-value를 정해주자. proxy_pass 를 2번 서버로 설정해주자.
그 다음
sudo nginx -s reload 로 적용해주자.
다시 클라이언트로 돌아가서
curl -XGET http://$server1:8086/user
8086의 user를 요청해보자.

1번 서버에서는 API call 됐다는 요청이 1번 서버에 왔고
헤더정보 전부를 json으로 남기라고 했는데, x-realip 에 보면 59.15.182.213 이런 IP가 적혀있고
user-agent 정보, host 정보가 잘 나와있다. 이 호스트는 자기 자신에 대한 정보.
API call /user at 2:37:14
{"host":"13.125.12.34","x-realip":"59.15.182.213","connection":"close","user-agent":"curl/8.4.0","accept":"*/*"}
웹사이트 에 들어가면 내 public IP 확인할 수 있다.
curl -XGET http://$server1:8086/customer
를 요청하면

이렇게 2번 서버로 잘 들어가는 것도 확인할 수 있고
아까 임의로 넣어 놓은 "x-custom":"custom" 의 key- value 값이 잘 전달된 것을 확인 할 수 있다.
이렇게 proxy 로 header 전달하는 것 해 봤고
요청한 클라이언트한테 응답하는 헤더를 추가해보자.
sudo vi header.conf

띄어쓰기를 기준으로X-MYHEADER LEON 은 Key, value다.
sudo nginx -s reload
리로드 하고 다시 클라이언트로 넘어가서
API 요청을 해보자
이번 요청은
curl -v
를 사용해서 상세 로그를 남길 것이다.

이렇게 하면 실제로 리스폰스 바디 뿐 아니라 헤더 정보가 남는데 리스폰스 헤더 보면
X-MYHEADER: LEON 이게 추가되어서 들어온 것을 확인할 수 있다.

동시에 남은 로그를 보면 proxy에는 전달이 되지 않았다.
받은 응답에만 X-MYHEADER 키가 추가 되었다.