리버스 프록시란?
일단 이 글을 읽을 사람이라면 리버스 프록시가 무엇인지 알고 있을것이라고 생각한다.
리버스 프록시가 뭔지 모르는데 리버스 프록시를 쓴다는게 말이 안되니까..
쉽게 말해서 Nginx가 HTTP 요청을 받고, 그걸 다른 곳에 연결(프록시) 해주는 기능을 말한다.
이게 왜 리버스프록시 인지 설명하려면 글이 길어질테니, 읽는이의 수준을 감안하여 스킵하겠다.
HTTPS 적용은 Let's encrypt를 사용하자!
Nginx와 Let's Encrypt를 사용하면 손쉽게 HTTPS를 적용 할 수 있다.
Nginx에서 사이트들의 설정파일을 담당하는 /etc/nginx/sites-available 에 내 서비스의 도메인(ex: mengmota.com)으로 파일명을 지정해놓고, 또 설정 파일안에서 server_name 값을 서비스의 도메인(ex: mengmota.com) 으로 설정 해 둔 뒤,
sudo certbot --nginx -d <도메인> -m <이메일>
명령어를 입력해주면 된다. 추가적으로, 자주 사용하는 옵션으로는
- --non-interactive: 명령 실행시 바로 작업 실행(cerbot 프로그램 안에서 뭔가 입력을 받는 등의 상호작용(interact)를 비뢀성화)
- --redirect: HTTP 연결시에 301 STATUS CODE 와 함께 https로 리다이렉트
- --agree-tos: 약관 동의
정도가 있다.
man certbot
입력시에 더 많은 정보가 나오니 참고할 것.
HEADER 설정
요청자 덮어씌우기
리버스 프록시는 상술한 대로, nginx가 다른 곳으로 다시 요청을 보내는 형태이기에 HTTP Header의 특정 부분이 Nginx의 내용으로 덮어씌워지게 된다.
요청자 IP같은것도 Nginx가 돌아가고있는 서버 컴퓨터의 것으로 덮어씌워진다.
따라서 WAS(Web Application Service, ex: Node.js, Python)에서 IP 주소를 포함하여 로깅을 하거나, IP주소를 식별해야 하는 일이 있다면 이런 내용들을 요청자의 정보로 바꿔야한다.
server {
proxy_set_header X-Forwarded-For $remote_addr; # 요청자(클라이언트) IP 정보 기록
proxy_set_header X-Forwarded-Proto $scheme; # HTTP / HTTPS 정보 기록
proxy_set_header X-Forwarded-Host $host; # 요청자(클라이언트)의 HOST를 소문자로, 포트번호 없이 기록, ex: mengmota.com
proxy_set_header Host $http_host; # 요청자(클라이언트)의 원본 HTTP_HOST를 기록
}
CORS 설정
CORS 설정을 WAS에서 하는게 아니라, NGINX의 기능으로 덮어씌워 만들 수도 있다.
server {
add_header 'Access-Control-Allow-Origin' '*';
}
Trailing Slash 와 관한 Redirection 처리
Trailing Slash (뒤에 붙는 슬래시)란?
두 URL이 있다고 가정해보겠다.
둘의 차이는 무엇일까?
첫번째는 파일이고, 두번째는 폴더이다.
사실 WWW는 원래 웹상의 자료를 열람하는, 마치 도서관 같은 느낌으로 설계되었기 때문에 저런게 있다고 할 수 있다.
그래서 Trailing Slash가 왜?
아무튼, 백엔드 개발자의 입장에서는 REST API 를 배포하는 경우가 대부분일것이다.
이렇게 되면, 원칙적으로는 로그인의 라우트는 trailing slash가 붙지 않은 첫번쨰 형태(https://mengmota.com/login)가 알맞을것이다.
그래서 strict한 백엔드 라이브러리(grpc-gateway, django) 들은 trailing slash를 넣어서 요청을 보내면 별개의 요청으로 엄격하게 구분한다.
즉 1번과 2번을 다른것으로 보고 404 NotFound를 반환 할 수도 있다는것이다.
그런데 FrontEnd 개발자가 이렇게 strict 개발하지 않는 경우처럼, 다양한 상황이 있을 수 있으니 trailing slash를 넣어서 요청하더라도 redirect 하는것이 필요하다.
Trailing Slash Redirection 설정
자, 이제 redirect를 시켜보자.
server{
rewrite ^/(.*)/$ /$1 break;
}
마치며
Nginx 같은 WS(Web Server)를 잘 활용하면 백엔드의 퍼포먼스에 매우 긍정적인 효과를 일으킬 수 있다.
Apache 는 저무는 추세이고, 사실상 Nginx가 de facto가 되어가는것 같다. 잘 활용해보도록 하자!
'Computer Science' 카테고리의 다른 글
사과를 쓰다 펭귄한테 싸다구 맞은 사연 (맥에서 리눅스로 파일 업로드 시 주의할 점) (0) | 2021.03.04 |
---|---|
Redis는 뭐고.. In Memory 솔루션은 뭐야? (0) | 2021.02.25 |
다크모드 적용시: StatusBar (상단바) 아이콘 색상 바꿀때 유의 할 점 (0) | 2021.01.29 |
gRPC(general-purpose Remote Procedure Calls)란? (1) | 2020.12.22 |
프로토콜 버퍼(protocol buffer)란? (0) | 2020.12.14 |