Back-end/배포

NginX 설치하기 NginX 와 Spring Boot Jar 파일 연결 배포하기

luana_eun 2025. 10. 28. 16:12
728x90

 

1. JDK 설치

보통 자바 설치하면 설치되어있을 것이다.

설치 사이트 : https://www.oracle.com/kr/java/technologies/downloads/archive/

설치 잘 되었는지 확인

>java -version
java version "17.0.12" 2024-07-16 LTS

 

 

 

 

2. NginX 다운로드

설치 사이트 :  https://nginx.org/en/download.html

 

다운받고 압축을 풀면 nginx.exe 파일이 보이는데 더블클릭해서 실행하면된다. 

 

 

분명 된다고 했는데 역시나 쉽게 되는 법은 없는..ㅋㅋㅋ

더블클릭하면 창이 열렸다 닫히는데 전혀 실행되지 않았고, 작업관리자에서도 nginx는 찾아볼 수 없었다. 

 

원인이 뭐일꼬.. 했는데 nginx는 기본으로 80포트를 사용하는데, 

내 컴퓨터에서 80번포트에 다른게 동작하고 있을 경우 안열린다고 한다. 

 

실행이 잘 되면 인터넷 주소창에 localhost를 열면 welcom nginx 가 뜬다.

 

실행이 잘 되는 분들은 바로 4번으로 넘어가면 될거같다. 

 

 

 

 

3. 80번 포트를 찾아서...

> netstat -ano | findstr :80
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
> tasklist | findstr 4
System    4 Services   0     12,368 K

 

80번 포트에 System이라는 이름으로 돌아가고 있었고, 확인해보니 WAS, W3SVC가 나왔다. 

> netsh http show servicestate
     요청 큐 이름: DefaultAppPool
        ...생략...
        서비스: WAS, W3SVC
        태그가 지정된 서비스: WAS
     등록된 URL:
        HTTP://*:80/

 

IIS (Windows Web Server) 가 80번 포트를 이미 사용하고 있어서 IIS서비스를 끄거나 nginx포트를 변경해야한다. 

 

방법1 👉  IIS 끄기

> net stop W3SVC
> net stop WAS

 

재부팅 하면 다시 켜질 수 있으니 기능을 아예 꺼놓는다

> sc config W3SVC start= disabled
> sc config WAS start= disabled

 

 

 

방법2 👉 nginx 포트 바꾸기

nginx 설정파일에서 80포트로 되어있는 것을 원하는 포트로 변경한다.

나는 IIS를 끄지않고 포트를 바꾸는 간단한 방법을 선택했다.

어차피 기본포트에서 바꿔야되기도 하고ㅋㅋ

 

 

변경 후에 다시 시작해본다

> start nginx

 

 

이제는 전에 안떴던 허용 창도 뜨고 

 

 

설정했던 포트로 들어가면 잘 실행되는것을 확인할 수 있다.

 

 

 

 

4. 배포 파일과 연결하기

1) 스프링부트와 포트 연결하기

나는 스프링부트 실행은 8080으로 했고, nginx 설정은 8090으로 했다. 

이 두 포트를 연결해줘야한다. 

위의 3번의 포트 변경할때 열어줬던 nginx.conf 파일을 열어 설정을 해준다. 

 

 

 

2) 배포파일 실행

나는 Jar 파일로 실행했기때문에 Jar를 실행시켜준다. 

배포파일이 있는 경로로 가서 java -jar 배포파일명.jar

 

** Jar파일 만드는 방법은? 👇

https://luanaeun.tistory.com/287

 

 

 

3) 접속 확인

이제는 8080으로도 접속이되고

8090으로 접속하면 제일 처음 열렸을때의 welcome이 나오는게 아니라,

스프링부트에서 실행했던 페이지가 열릴것이다. 

두 페이지가 같은 페이지로 열리면 연결 성공!

 

 

 

 

5. NginX 프록시 설정

포트 연결로만 끝날것이 아니라, 추가로 설정해줘야 하는 부분들이 있다. 

nginx.conf 파일

location / {
		proxy_pass http://127.0.0.1:8080;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Forwarded-Proto $scheme;
}

 

🔹proxy_set_header Host $host;

     도메인명을 서버에 전달해준다. 

     이 설정을 안하면 서버에서는 어디서 접속했건 127.0.0.1:8080 프록시 내부 주소로 바껴서 받게된다. 

 

🔹proxy_set_header X-Real-IP $remote_addr;

     실제 클라이언트 IP를 서버에 전달한다. 

     이 설정을 안하면 서버는 어떤 IP가 접속했는지 모르게된다. 

 

🔹 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

      프록시를 여러 개 거칠 때, 원본 IP + 중간 프록시 IP 체인을 전달하며, 

       X-Forwarded-For 헤더에 사용자IP, 프록시1, 프록시2, … 형태로 누적되서 표시된다.

      안할경우 여러 계층에서 접속한 사용자를 알 수 없고, 로드 밸런싱 환경에서 실제 IP추적이 불가능하다.

 

🔹 proxy_set_header X-Forwarded-Proto $scheme;

      사용자가 http 인지 https 로 접속했는지 전달

    

 

 

** 엔진엑스 새로고침 및 재시작

nginx -s reload

 

 

 

** 설정 파일 문법 확인

nginx.conf 설정파일을 건드린 후에는 문법적으로 잘못 적은게 없는지 확인해보는게 좋다.

> nginx -t

// 정상이라면
nginx: the configuration file C:\nginx-1.28.0/conf/nginx.conf syntax is ok
nginx: configuration file C:\nginx-1.28.0/conf/nginx.conf test is successful

 

 

 

 

 

여기까지 설정했다면 nginx로 프록시가 잘 설정된 것이다. 

만약, nginx에서 설정한 포트로 접속했을때 페이지가 잘 열리는데, 서버와 통신이 잘 안된다면

conf 설정파일 문제거나 스프링부트 설정에 문제가 있을수도 있다. 

 

 

 

 

 

- 도움이 되었다면 좋아요🩷부탁드려요:) -

 

 

 

728x90