sudo vi hanium(filename)
진행 동기
최근 프로젝트 진행 도중 nginx를 Spring boot appliction의 프록시 웹서버로 둬야하는 상황이 생겼습니다. 그래서 이번에는 Nginx 와 Spring boot application을 연동하는 방법에 대해 알아보겠습니다.
환경
실행 환경은 aws ec2 Linux 22.04이고, 저는 Nginx 와 Spring boot Application이 같은 서버에 존재합니다.
aws ec2에서 DB는 mysql, Java는 jdk 11을 사용했습니다. 추후에 ec2에 jar 파일 배포도 포스팅 하겠습니다.
Nginx 설치
Nginx는 오픈 소스 웹 서버이므로 자유롭게 설치할 수 있습니다.
sudo apt-get update
sudo apt-get install nginx
sudo systemctl enable nginx.service
//정상작동 확인 명령어
systemctl status nginx.service
기본적인 Nginx 설치는 위와 같습니다.
우선 nginx 설정 파일이 모여있는 폴더로 이동해 봅시다.
cd /etc/nginx
이 폴더 안에 설정 파일을 만들어 둘 수 있습니다.
폴더 안에 들어가서 설정 파일까지 만들어보겠습니다.
cd sites-available
sudo vi filename
그리고 설정은 다음과 같이 작성해주시면 됩니다. Nginx의 module을 사용하면 설정을 자유롭게 추가/삭제 할 수 있으므로 저와 다른 설정을 원하시면 Nginx 공식 문서를 확인하셔서 module에 대해서도 공부해 보시면 좋을 듯 합니다.
전 Nginx를 단순히 프록시 서버로 두기 위해 설정한 것이므로 그 부분을 참고해주셨으면 합니다.
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
server :
listen : 클라이언트의 요청을 수신하기 위한 포트 http는 80포트를 사용하는 프로토콜이므로 80으로 설정
server_name : server {...} 이 블록이 응답해야 하는 도메인 이름 또는 IP
location / : 들어오는 요청을 " / " 이 경로로 매핑
proxy_pass : 매핑된 경로로 들어오는 요청을 해당 URL로 리다이렉(프로토콜은 http, https 지정 가능, 주소는 도메인 이름 또는 IP 주소,그리고 포트)
proxy_set_header
- X-Real-IP : 실제 요청을 한 클라이언트의 IP를 요청 주소로 설정
- X-Forward-For : 실제 요청을 한 클라이언트의 IP를 요청 주소로 설정 X-Real-IP 와의 차이는 X-Forward-For는 일반적으로 사용되는 IP를 넣어주고, X-Real-IP는 사용자 설정 가능
- Host : 실제 요청을 한 클라이언트의 Host 헤더로 설정
설정 파일 적용
그리고 이제 이 설정 파일을 적용해 보도록 하겠습니다.
처음에는 default 라는 설정 파일이 적용되어 있는데 이를 삭제하고 직접 만든 파일로 적용해보는 것입니다.
cd /etc/nginx/sites-enabled
ls
해보시면 아마 default 라는 파일이 존재할 것입니다.
sudo rm default
sudo ln -s /etc/nginx/sites-available/filename
ls
그러면 이제 직접 만든 설정 파일이 존재하게 됩니다.
sudo systemctl restart nginx
systemctl status nginx.service
이렇게 active 되어 잘 나오면 성공입니다!
이제 브라우저에 ec2 ip만 넣고 요청을 불러와도여러분들의 애플리케이션 메인 화면이 나올 겁니다.
실제로는 Spring boot의 내장 톰캣에 직접 요청을 한 것이 아니라 Nginx의 80 포트로 요청을 포내고 Nginx가 Spring boot의 내장 톰캣으로 요청을 보내주는 것입니다.
그래서 이제 굳이 Spring boot의 내장 톰캣 포트로 요청을 직접 보내주지 않으셔도 됩니다.
다음 해볼 것
다음 해볼 것은 Spring boot 애플리케이션을 systemd에 등록하여 보려고 합니다.
sudo systemctl start shop.service
sudo systemctl restart shop.service
sudo systemctl enable shop.service
이런식으로 서비스로 등록해서 지속적으로 사용되게끔 해보려고 합니다!
'Server' 카테고리의 다른 글
Spring boot 애플리케이션 ec2에 jar로 배포 (0) | 2023.07.23 |
---|---|
filebeat, metricbeat의 module 사용해서 Kibana로 시각화해보기 (1) | 2023.07.16 |
Elasticsearch 기본 - 엘라스틱 스택 개발부터 운영까지 (0) | 2023.07.14 |
Nginx 서버에 filebeat와 metricbeat 설치 후 설정파일 작성 (0) | 2023.07.13 |
Elasticsearch + kibana를 통한 ec2 서버 모니터링 (0) | 2023.07.11 |