1. 배경
포트포워딩은 nginx의 가장 기본적인 기능이다.
한 웹서버 안에서는 한 가지의 서버만 존재하지는 않는다.
api서버와 웹 페이지 서버도 있을 수 있고, 랜딩페이지 서버도 같이 있을 수 있고.. 관리자 페이지 서버 등등
여러개의 서버가 같은 웹서버에 같이 있을 수 있다.
그리고 이 서버들은 각각 다른 포트를 갖고있다.(localhost:3000, localhost:3001, ...)
웹 서버는 어떻게 같은 도메인을 요청했을 때 이를 알아채고
적절한 서버를 선택하여 보내줄 수 있는 것일까
바로 nginx의 포트포워딩(port forwarding)기능 덕분이다.
2. 개념
Port Forwarding : 포트 인도
즉, 서버에 들어온 요청을 다시 내부의 특정 포트로 보내주는 것이다. (특정 포트 = 특정 서버)
그래도 웹서버가 클라이언트의 마음을 텔레파시(?)로 읽고
로컬 포트를 정해주지는 못하지 않는가(그런 ai가 있나..)
그러니까 적어도 웹서버가 요청에 대한 적절한 로컬 포트를 정하기 위한
약속이 필요한 것이다.
그 약속은 크게 두 가지로 정할 수 있다.
1) URI 머리(도메인 호스트)로 구별하기로 약속한다
2) URI 꼬리(location)로 구별하기로 약속한다.
3. 사용 방법
1) 도메인 호스팅으로 구별한다. - 'server_name'
입력 URI의 '머리'로 구별한다.
- 웹서버에 도메인(test.com)을 구입해서 적용하면
그 도메인을 여러가지로 호스팅(api.test.com)할 수 있다.
같은 Public IP로 웹서버에 들어간다 해도
'어떻게 들어가냐'에 따라 포트를 나누는 것이다.
예를 들어
123.45.67.89의 IP를 가진 웹서버가 있다고 하자
해당 IP에 대해
test.com 라는 도메인을 등록한다고 할 때
api.test.com 라는 레코드(호스트)를 추가했다고 하자.
이제 test.com, api.test.com 을 다이렉팅하면 둘 다
웹서버의 default로 설정되어있는 서버로 포팅된다.
이제 api.test.com을 default 서버가 아닌 웹서버 내에서 새로운 서버(localhost:3003)로 포팅해보자
/etc/nginx/sites-enabled
//혹은
/etc/nginx/sites-available(symlink 필요)
에 새로운 프록시를 설정하는데
다음을 추가한다.
server {
listen 80;
server_name api.test.com // 이 웹서버에 어떤 방식으로 들어왔는지 확인
location / {
proxy_pass http://127.0.0.1:3003;
}
}
위의 server_name으로 어떻게 (호스팅해서)들어왔는지를 확인하여
nginx의 default서버로 로컬 포팅하는 'test.com'과 달리
default서버가 아닌 localhost:3003 에 존재하는 서버로 보내주게 된다
2) URI로 구별한다. - 'location'
이번엔 입 URI의 '꼬리'를 본다.
즉, test.com과 test.com/admin이 같은 웹서버 내 전혀다른 서버로 다이렉팅되는 것이다.
위의 가정과 똑같이
이번엔 웹서버 안에
1. default 서버
2. admin 서버(localhost:3009)
가 있다고 해보자.
포트포워딩이 안되어있는 상태에서는
test.com/admin을 다이렉팅하면, default 서버에 /admin이 라우팅되지 않은 이상
not found 에러가 날 것이다.
그렇다면 test.com/admin 을 웹서버 내에서 새로운 서버(localhost:3003)로 포팅해보자
방법은 쉽다.
location의 옆에 꼬리를 이름을 정해주는 것이다.
server {
listen 80;
location /other/ {
proxy_pass http://127.0.0.1:3003/;
}
}
이렇게 URI의 꼬리만 바꾸어 서로 다른 서버를 요청할 수 있는것이다.
'인포테인먼트 - development > 웹 서버' 카테고리의 다른 글
[nginx] upstream에 keep-alive 적용 (0) | 2020.04.18 |
---|---|
[nginx] DNS는 뭐고 도메인은 뭐고, 또 호스트는 뭐야 (0) | 2020.03.30 |
[nginx] https 설정시 프록시 - https 상호관계 및 정리 (0) | 2020.03.29 |
[nginx] nginx 설정 - server_name (0) | 2020.03.28 |
댓글