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 설정파일 문제거나 스프링부트 설정에 문제가 있을수도 있다.
- 도움이 되었다면 좋아요🩷부탁드려요:) -