nginx에 대해서는 https://drspace.tistory.com/249 이 글에서 간략히 개념을 배워본 적이 있다. 수업을 듣다가 웹 서버라는 단어가 나와서 정리한 거다.
싸피에서 프로젝트를 할 때는 nginx 설정은 백엔드 팀원들이 거의 해서 다뤄 볼 기회가 없었는데, 직접 nginx 설정을 해 볼 기회가 생겨서 그 과정을 정리해본다.
1. 사용 목적
마이그레이션이 필요한 워드프레스 웹사이트가 404 에러를 뱉어낼 경우 원래는 워드프레스 상에 위치한 404.html 파일을 유저에게 보여줬었다. 이 설정은 nginx.conf 파일에 되어 있었다. 404 에러를 만날 경우 폴백 함수로 보낸 후, 일관된 URL 처리를 위해 불필요한 slash를 제거하고 대문자는 소문자로 모두 바꾼 후 /404.html을 보여주는 식이었다.
그런데 이 웹사이트를 Next.js - StoryBlok 기반 웹사이트로 마이그레이션 하면서 404.html 파일은 제거되고 Next.js 프로젝트에 새로운 404 페이지가 만들어지게 되었다. 그리고 유저가 404 에러를 만나면 새 404 페이지로 사용자로 인도해야 했다.
이런 proxying 작업이 필요했던 이유는 아직 워드프레스가 서빙하는 페이지들도 있기 때문에 유저들의 요청을 두 곳 모두에서 탐색해야 했기 때문이다.
2. 'location': URL을 조작할 때 사용하는 블록
nginx는 어떤 언어도 아닌 고유한 명령어들을 가지고 설정을 구성한다.
location @fallback {
...
}
location은 어떤 URL을 이 안에서 조작하고 싶을 때 사용한다.
location 뒤에는 URL, 정규식 형태의 URL, @ 등이 올 수 있다.
골뱅이 뒤의 단어는 URL과 관련이 없는 로직에서 마치 연결고리처럼 활용된다. 예를 들어 '404 에러를 만났을 때 @fallback으로 이동하라'고 지시할 수 있다.
3. 'proxy_set_header [헤더이름] [헤더내용]:
location @fallback {
proxy_set_header Host [타겟 호스트];
...
}
proxy_set_header는 말 그대로 proxying 과정에서 필요할 헤더를 설정하는 명령어다. 내 목적은 원 URL(워드프레스)를 타겟 URL(Next.js 사이트)로 proxying하는 것이기 때문에, Next.js 사이트의 호스트 주소를 적어주면 된다.
당연히 Host 헤더 외에도 내 시스템에서 필요한 여러 헤더들을 설정해주면 된다.
4. 'rewrite ^ [타겟 경로]': 모든 요청을 타겟 경로로 재작성한다.
location @fallback {
proxy_set_header Host [타겟 호스트];
rewrite ^ /404 break;
...
}
이제 사용자가 입력한 경로를 /404 페이지로 바꿔치기 할 차례다.
rewrite 명령어를 사용해 모든 경로(^)를 /404로 재작성한 후, break 명령어를 사용해 추가적인 재작성은 없도록 한다.
모든 경로를 재작성하는 이유는 이 location 블록에 들어오는 모든 요청들은 이미 404 판정을 받은 것들이기 때문이다.
5. 'proxy_pass [타겟 Host]' 사용자를 '[타겟 host]/404'로 보낸다.
location @fallback {
proxy_set_header Host [타겟 호스트];
rewrite ^ /404 break;
proxy_pass [타겟 호스트];
}
마지막으로 proxy_pass를 통해 유저를 [타겟 호스트]/404 페이지로 보내주면 proxying 작업이 끝난다.
'Programming > ETC' 카테고리의 다른 글
[SSAFYcial] 싸피에서도, 현업에서도 자주 쓰는 Git 명령어 알아보기 (0) | 2025.01.16 |
---|---|
개발자는 개발만 잘해도 될까 (0) | 2025.01.12 |
JWT(JSON Web Tokens), OAuth(Open Authorization) (0) | 2023.09.24 |
[Low-code] 로우 코드 서비스 개발 툴, Retool (0) | 2023.08.28 |
SPA(Single Page Application) (0) | 2023.07.15 |
댓글