도메인은 IP 주소보다 기억하기 쉽고, 변경이 필요할 때 서버 IP를 바꾸더라도 DNS만 수정하면 되므로 유지보수가 간편하다. 이 때문에 대부분의 웹사이트는 www.naver.com과 같은 도메인 기반 접근 방식을 사용한다. 이번 글에서는 Nginx를 활용한 도메인 설정 방법을 알아보겠다. 예제에서는 Spring을 사용하지만, Vue나 React와 같은 프론트엔드 프레임워크에서도 동일한 방식으로 Nginx 설정을 적용하면 도메인 기반 접근을 구현할 수 있다.
Spring API 서버 실행하기
소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
| @RestController
public class SimpleController {
@GetMapping("/")
public String hello() {
return "안녕하세요 테스트용 ('/')입니다.";
}
@GetMapping("/test")
public String test() {
return "안녕하세요 테스트용 ('/test')입니다.";
}
}
|
우선 최대한 간단하게 도메인 설정 방법에 대해서만 알아볼 예정이므로 간단하게 코드를 작성하여 도커 허브에 pjh5365/simple-spring-api-server
로 올려놓았다.
Docker를 사용한 API 서버 실행
1
| docker run -d -p 8080:8080 --name spring pjh5365/simple-spring-api-server
|
이제 서버 주소로 접속하면 API 서버가 정상적으로 동작하는 모습을 확인할 수 있다.
Nginx 설정하기
Nginx 실행
우리가 작성할 설정 파일을 컨테이너가 읽을 수 있도록 볼륨마운트하여 Nginx를 실행시켜주자.
1
| docker run -d -p 80:80 --name nginx -v /docker/nginx/conf:/etc/nginx/conf.d nginx:alpine
|
Nginx 설정 파일 작성
포트 번호를 입력하지 않고 API 서버 주소만 브라우저에 입력해도 API 서버를 호출할 수 있도록 80포트로 접속하면 API 서버로 연결되도록 리버스 프록시를 설정해주자.
1
| sudo vi /docker/nginx/conf.d/nginx.conf # 볼륨마운트한 경로에 설정파일 작성
|
1
2
3
4
5
6
7
8
9
10
11
12
| # nginx.conf 파일
server {
listen 80;
server_name 52.79.61.157; # 서버 주소
# 80포트로 들어오면 8080으로 전달
location / {
proxy_pass http://52.79.61.157:8080/; # API 서버 주소
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
|
설정 파일을 작성하고 재실행 시키면 포트 번호를 입력하지 않아도 API 서버에 접근할 수 있다.
DNS 설정 및 도메인 연결
DNS를 설정하려면 도메인을 구매하거나 무료 서비스를 이용해야 한다. 여기서는 가비아를 이용해 A 레코드로 등록하는 방법을 알아보겠다(다른 도메인 등록 기관에서도 설정 방식은 유사하니 참고하면 된다).
- 관리 클릭
- DNS 정보 클릭
- DNS 관리 클릭
- 도메인 클릭 체크박스 클릭 후 DNS 설정 클릭
- A 타입 선택, 호스트 입력, 서버 주소 입력 후 확인 / 저장
Nginx 설정 파일 수정
1
| sudo vi /docker/nginx/conf.d/nginx.conf # 작성한 설정 파일 수정
|
1
2
3
4
5
6
7
8
9
10
11
12
| # nginx.conf 파일
server {
listen 80;
server_name www.pjh5365.com; # 도메인으로 변경
# 80포트로 들어오면 8080으로 전달
location / {
proxy_pass http://52.79.61.157:8080/; # API 서버 주소
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
|
Nginx에 도메인을 설정해주고 재시작하면 아래와 같이 도메인으로 접근이 가능하다.