요거 다음으로 도커로 nginx 랑 스프링부트 띄우는건 요글을 봐주세영
https://thalals.tistory.com/343
mac 로컬환경에서 진행했습니다.
✨ Nginx 를 aws 앞에 web server 로 두고, 리버스 프록시 서버로 사용해보자 ! !
1. nginx 요청을 spring boot 로 리다이렉트!!
현재 이전 게시물 까지 진행해서, mac 로컬 환경에서, nginx 는 8090 포트로 변경해놓은 상태고 jar 파일도 백그라운드에서 실행시킨 상태
📌 이제 이걸, nginx 8090 포트로 접속하면, spring 내장 톰캣이 띄어놓은, 8080 포트로 리다이렉트 시키고자 한다.
( 그냥 리다이렉트 시키는게 리버스 프록시를 두는 의미가 있는건가,,?)
- 의문을 가졌는데, Nginx 자체에서 리버스 프록시 기능을 해서 로드밸런싱 기능을 해주고
- 앞에 프록시 서버가 요청을 전부 받음으로써, 내부 was 를 클라이언트한테 숨길 수 도있고 이렇게 단순하게 리다이렉트로의 의미만을 가지는 건 아닌것같다.
2. Nginx 리다이렉트 포트 설정 변경
- nginx 설정을 바꿈으로 써 nginx 로 들어오는 요청을 spring boot 포트와 연결해 보장
📌 nginx 설정 변경 방법
- vi /nginx 경로/nginx.conf
- ex) vi /usr/local/etc/nginx/ nginx.conf
server {
listen 8090;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
... 생략
}
➡️ 여기서 location 설정 부분에, proxy_pass 옵션을 추가해주어야 한다고 합니다.
server {
listen 8090;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
// ----- 여기 추가 ----------//
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;
}
... 생략
}
proxy_pass http://localhost:8080
- Nginx에게 모든 요청 ( server_name:: listen 형식의 모든 요청 ) 을 /app 위치에 http://127.0.0.1:8080으로 프록시 서버로 전달하도록 지시합니다.
Nginx 프록시 서버 설정 옵션
이렇게 하면, Nginx 서버가 Reverse Proxy 역할을 하게되는데 SpringBoot 서버에선 요청한 클라이언트의 IP 주소를 Nginx 서버의 IP 로 인식하게 됩니다.
띠라서 다음과 같은 설정을 해줘야한다.
- Real-IP -> 실제 접속 IP
- Forwarded-For -> 프록시 서버가 여러개일때의 주소
- Host -> 요청 필수 값
그러면,, !! 8090 포트로 접속해도, nginx 가 아닌, 내장톰캣으로 요청되고 응답이 왔따!
참고용 Nginx 프록시 템플릿
일반 Nginx 역방향 프록시 옵션
요즘은 HTTPS를 통한 컨텐츠 제공이 표준이 되었습니다. 이 섹션에서는 권장되는 Nginx 프록시 매개 변수 및 헤더를 포함하여 HTTPS Nginx 역방향 프록시 구성의 예를 제공합니다.
location/ {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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 X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
- proxy_http_version 1.1 - 프록시를 위한 HTTP 프로토콜 버전을 정의합니다. 기본적으로 1.0으로 설정됩니다. 웹 소켓 및 활성 연결을 유지하려면 버전 1.1을 사용해야 합니다.
- proxy_cache_bypass $http_upgrade - 캐시에서 응답을 가져오지 않을 조건을 설정합니다.
- Upgrade $http_upgrade 및 Connection "upgrade" - 응용프로그램이 웹 소켓을 사용하는 경우 헤더 필드가 필요합니다.
- Host $host - 다음 우선 순위의 $host 변수에는 요청 라인의 호스트 이름 또는 호스트 요청 헤더 필드의 호스트 이름 또는 요청과 일치하는 서버 이름이 포함됩니다.
- X-Real-IP $remote_addr - 실제 방문자 원격 IP 주소를 프록시 서버로 전달합니다.
- X-Forwarded-$proxy_add_x_forwarded_for - 클라이언트가 프록시 처리한 모든 서버의 IP 주소를 포함하는 목록입니다.
- X-Forwarded-Proto $scheme - HTTPS 서버 블록 내에서 사용할 경우 프록시 서버의 각 HTTP 응답이 HTTPS로 다시 작성됩니다.
- X-Forwarded-Host $host - 클라이언트가 요청한 원래 호스트를 정의합니다.
- X-Forwarded-Port $server_port - 클라이언트가 요청한 원래 포트를 정의합니다.
기존 SSL/TLS 인증서가 없는 경우 certbot을 사용하여 Ubuntu 18.04, CentOS 7 또는 Debian 서버에서 무료 SSL 암호화 인증서를 얻습니다.
*참고
'Web-Network' 카테고리의 다른 글
[Nginx] linux 실시간 access 로그 보기 (0) | 2022.10.13 |
---|---|
HTTP HEAD 메소드 (0) | 2022.07.29 |
jar 파일 생성하고, local 에서 Jar 실행하기 (4) | 2022.07.23 |
[Nginx] mac 로컬 환경에 nginx 설치 실행하기 (local os) (0) | 2022.07.22 |
[프록시란] Proxy? Proxy Server? 리버스 프록시 ? (0) | 2022.07.22 |