Nginx & Spring boot 연동

정명진·2023년 3월 15일
0

아직 web server를 설치하지는 않을 것 이지만 개발이 끝나고 추후 테스트할때 nginx를 설치하여 서버 부하에 대비해 로드밸런싱을 설정하고 리버스 프록시를 설정할 예정이다. 현재 프론트에서 8080으로 api를 요청해오고 있지만 사실 kakao나 apple 같은 경우를 보면 https 통신을 한다.

우선 이글에서는 Reverse Proxy를 먼저 진행해보겠다.

Reverse Proxy

우선 Nginx를 설치하자.

# sudo apt-get update
# sudo apt-get install nginx
# sudo service nginx restart
# sudo service nginx status

이렇게 하면 설치가 완료된다.

설정 파일을 한번 봐보자

sudo cat /etc/nginx/nginx.conf

그 중 주의깊게 볼 부분은 다음과 같다

include /etc/nginx/conf.d/*.conf
include /etc/nginx/sites-enabled/*

include ~ 부분은 해당 경로의 설정 파일을 불러온다라는 뜻이다.
설정파일은 sites-enabled 의 심볼릭링크를 통해 읽어온다. 즉 실제 원본 설정파일들은 .conf 확장자로 sites-available에 저장하고, 해당 파일들에 대한 심볼릭 링크들은 sites-enabled에 존재해야 한다.

그럼 테스트 설정 파일을 만들어보자.

sudo vi /etc/nginx/sites-available/temp.conf


  server {
      listen 80;
      listen [::]:80;

      server_name localhost;

      location / {
           proxy_pass http://localhost:8080;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $http_host;
      }
  }

이제 원본 파일을 만들었으니 심볼릭링크를 설정해주자.

sudo ln -s /etc/nginx/sites-available/temp.conf /etc/nginx/sites-enabled

이제 nginx가 temp.conf의 내용을 읽어올 수 있다.

그전에 기본 default 파일을 삭제해야 한다. 어차피 sites-enabled에 존재하는 파일은 심볼릭링크라 삭제해도 복구가 가능하다.

sudo rm -rf default

# 다시 복구하려면 temp 심볼릭링크 만들때처럼 처럼 해주면 된다.
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled

새 설정파일로 시작하게 재시작 해주자.

sudo service nginx reload

회사 환경에서는 다음과 같이 직접 conf 파일을 지정해서 실행할 수 있다.

/${nignx_directory}/sbin/nginx -c ${your_conf_directory} &

이제 Spring Boot에 properties를 수정해야 한다.

구버전은 다음과 같이 가능하다.

server:
  ssl:
    key-alias: “server”
    key-password: “keysecret”
    key-store: "classpath:server.p12"
    key-store-password: "storesecret"
    client-auth: NEED    

신버전은 다음과 같이 가능하다.

spring:
  ssl:
    bundle:
      jks:
        web-server:
          key:
            alias: "server"
            password: “keysecret”
          keystore:
            location: "classpath:server.p12"
            password: "storesecret"
server:
  ssl:
    bundle: “web-server”
    client-auth: NEED
profile
개발자로 입사했지만 정체성을 잃어가는중... 다시 준비 시작이다..

0개의 댓글