1. prefix 설정이란 무엇인가?
- prefix 설정은 Jenkins와 같은 웹 애플리케이션이 특정 경로에서 작동하도록 지정하는 설정입니다. 예를 들어, --prefix=/jenkins를 설정하면 Jenkins는 http://<IP>:8080/jenkins 경로에서 동작하게 됩니다.
- 이는 컨텍스트 경로(context path)라고도 불리며, 웹 서버가 요청을 처리할 때 경로를 기반으로 특정 애플리케이션이나 서비스를 식별할 수 있도록 합니다.
2. prefix 설정의 동작 원리
- --prefix 옵션을 사용하면 Jenkins는 모든 요청을 해당 경로로 시작하는 URL로 리다이렉트합니다.
- 예를 들어, /jenkins를 prefix로 설정하면 사용자가 http://<IP>:8080/로 접근할 때, Jenkins는 이를 http://<IP>:8080/jenkins로 리다이렉트합니다.
- Jenkins 내부적으로는 이 경로를 기준으로 리소스 경로와 API 엔드포인트를 처리합니다.
- Jenkins에서 설정된 prefix는 NGINX가 요청을 전달할 때도 이 경로를 통해 요청을 처리하도록 해야 합니다. 그렇지 않으면 404 Not Found나 403 Forbidden과 같은 오류가 발생할 수 있습니다.
3. 왜 prefix 설정으로 오류가 해결되었는가?
- 이전에 발생한 오류들은 다음과 같은 이유로 발생했을 가능성이 큽니다:
- Jenkins와 NGINX 경로 불일치: NGINX는 /jenkins 경로로 요청을 전달하고 있었지만, Jenkins는 이 경로를 인식하지 못했거나 올바르게 처리하지 못했을 수 있습니다.
- 경로 리다이렉션 문제: --prefix를 사용하지 않고 /jenkins로 접근하려고 할 때, Jenkins는 자신이 루트 경로(http://<IP>:8080)에서만 동작한다고 가정합니다. 그래서 /jenkins로 들어오는 요청을 잘못 처리하거나, 404 또는 403 오류를 반환했을 수 있습니다.
- CSRF 보호 및 경로 매핑 문제: Jenkins는 CSRF 보호 기능이 있어, 경로가 정확히 일치하지 않으면 접근을 차단하거나 리다이렉트하는 경향이 있습니다. --prefix를 통해 경로를 명확히 지정함으로써 이러한 문제가 해결되었습니다.
- prefix 설정을 통해 Jenkins와 NGINX 간의 경로가 일치하게 되면서 NGINX는 /jenkins 경로의 요청을 올바르게 프록시 처리할 수 있었고, Jenkins는 해당 경로에서 동작하도록 설정되었기 때문에 오류가 해결된 것입니다.
4. 리버스 프록시 설정 시 prefix를 많이 사용하는 이유
- 리버스 프록시는 여러 서비스를 하나의 서버로부터 제공할 때 자주 사용됩니다. 이때, 각 서비스를 특정 경로로 나누어 접근할 수 있도록 설정하는 것이 일반적입니다.
- 예를 들어, example.com/jenkins, example.com/gitlab, example.com/nexus 등으로 설정하면, NGINX나 다른 리버스 프록시 서버는 각 경로에 따라 요청을 다른 백엔드 서버로 전달할 수 있습니다.
- 이를 통해 단일 도메인에서 여러 애플리케이션을 쉽게 관리할 수 있고, 각 애플리케이션은 자신만의 경로에서 동작하도록 분리할 수 있습니다.
- Jenkins의 --prefix 설정은 이러한 리버스 프록시 환경에서 Jenkins가 특정 경로를 기준으로 동작하게 해주기 때문에, 리버스 프록시 설정에서 자주 사용됩니다.
5. 정리
- prefix 설정은 Jenkins와 같은 서비스가 특정 경로에서 동작하도록 설정하는 기능입니다.
- --prefix=/jenkins 옵션을 사용하면 Jenkins는 /jenkins 경로를 루트로 인식하고, 모든 요청을 해당 경로를 기준으로 처리합니다.
- 이는 리버스 프록시 서버와의 경로 매핑 문제를 해결하는 데 유용하며, 이를 통해 NGINX와 Jenkins 간의 경로 불일치로 인한 오류를 해결할 수 있습니다.
- 리버스 프록시 환경에서 자주 사용되는 이유는, 여러 애플리케이션을 단일 서버에서 경로로 구분해 관리하기 쉽기 때문입니다.
근데요..........but..........이건 맨 마지막에나 해줄 단계래요ㅜㅜ 오늘 아주.. 못해서 기죽었습니다. 이해가 안가드라구영.............. 팀원한테 너무 미안하네요 그러니까 더 열심히 공부해야죠!!! 빠이팅 해봅시다.... 일단 오늘은 여기까지... 젠킨스 t2.micro로 하니까 너무 느려서 t3.medium으로 바꿨고 팀 계정에다가 젠킨스만들고 도커파일 만들어서 실행ㅎ시켰습니다..
내일은 젠킨스 파이프라인 코드를 짜는걸로!
- 참고
https://velog.io/@suyeon12/IP-CIDR-Subnet-Prefix