업무를 하면서 처음으로 Nginx를 다뤄볼 예정이다. 공부해가도 뚝딱이겠지만 덜 찐따처럼 보이기위해 가볍게 훑어보고 갈 예정 😎
(작년 이쯤 깃허브 블로그에 올렸던거 재탕임)
Nginx란 Nginx는 웹 서버 소프트웨어로 가벼움과 높은 성능을 목표로 한다. 비동기 이벤트 기반 구조의 경량화 웹 서버로 정적 파일을 제공하는 웹 서버로 활용되기도 하고 리버스 프록시 서버로 활용하여 WAS의 부하를 줄여주는 로드밸런서 역할을 하기도 한다.
Nginx가 만들어진 배경 참고 👉🏻 https://dkswnkk.tistory.com/513
나는 기존에 있던 서비스 위에 Nginx를 리버스 프록시로 활용할 예정이다. 이로 인해 얻을 수 있는 이점은 아래와 같다.
리버스 프록시 👉🏻 프록시 서버(Proxy Server)와 DMZ 서버 https://ijo0r98.github.io/posts/proxyNdmz/
brew가 설치되어있다는 가정하에
brew intstall nginx
설치가 성공적으로 끝나면 설치 위치를 확인할 수 있다.
Docroot is: /opt/homebrew/var/www
The default port has been set in /opt/homebrew/etc/nginx/nginx.conf to 8080 so that
nginx can run without sudo.
nginx will load all files in /opt/homebrew/etc/nginx/servers/.
brew 이용한 Nginx 서비스 기동
brew services start nginx # 시작
brew services restart nginx # 재시작
brew services stop nginx # 종료
기본 포트는 8080
http://localhost:8080
기본 웹 루트 디렉토리는 /usr/share/nginx/html
내 스프링 부트 프로젝트의 기본 포트는 9090
http://localhost:9090
이제 이 둘을 연결해주려한다.
Nginx 설정 파일은 아까 설치 결과로 나왔던 곳 /opt/homebrew/etc/nginx 에 위치
vim nginx.conf
기존 설정 파일 살짝 보면
server {
listen 8080; # 사용중인 포트
server_name localhost; # 서비스할 도메인 설정 가능
#charset koi8-r;
#access_log logs/host.access.log main; # 로그 남기고 싶으면 주석 해제
location / { # / 뒤에 경로 지정 가능
root html;
index index.html index.htm;
}
...
참고로! 로그 파일에 날짜를 붙이려고 다음날 확인해보니 접속 로그 파일(host.access.log) 및 에러 로그 파일(error.log) 는 알아서 전날 로그 파일 뒤에 날짜가 붙어 히스토리가 남음.
오늘의 로그 파일은 뒤에 날짜 안붙음. 따라서 굳이 날짜 뒤에 안붙여도 일자별 관리가 가능하다.
이제 location 블럭 하단에 proxy_pass 정보를 추가하면 리버스 프록시의 역할을 할 수 있다.
server {
listen 8080; # 사용중인 포트
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:9090;
}
...
Nginx에 {server_name}:{listen} 으로 오는 요청을 proxy_pass http://localhost:9090 으로 연결시켜준다.
listen 지시문에 의해 포트 번호 8080으로 들어오는 요청들에 대해 server_name과 정확하게 일치하는 서버 블록을 찾으려고 시도한다.
설정 후 Nginx(8080)로 접속해보면
이렇게 기존의 Nginx 기본 페이지가 아닌 내가 스프링 프로젝트에서 설정한 웹 페이지로 연결되는 것을 확인할 수 있다!
그 외 Nginx에서 권장하는 다양한 리버스 프록시 헤더 구성 옵션들이 있다.
proxy_pass http://localhost:9090;
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;
내가 마주친 오류는 아니지만 블로그 읽던 중 알아두면 좋을것 같아 추가한다.
nginx 에서 proxy_set_header 재정의할 때 주의할 점 https://ohgyun.com/537
nginx 에서 proxy_set_header 재정의할 때 주의할 점
발생일: 2014.12.09 키워드: nginx, proxy_set_header, proxy_pass, remote_addr, Remote IP, 프록시 문제: 아래와 같은 nginx 리버스 프록시 설정이 있었다. location /some/path { proxy_pass http://localhost:8000; } 프록시 서버에
ohgyun.com
주요 내용은 프록시 서버로 전달하는 설정 재정의 시 상위 레벨에서 상속받던 값은 무시된다는 것이다. 즉 같은 location 블럭 안에 설정을 지정해야 한다는 것이다.
Nginx가 재정의하는 헤더는 Header와 Connection 두개이며 그 외의 헤더들도 모두 프록시 서버로 전달되는데, 헤더의 값이 비어있다면 그 헤더들은 전달되지 않는다. 만약 헤더의 값을 변경하려면 proxy_set_header 키워드를 사용하면 된다.
제거하고 싶은 속성이 있다면 아래처럼 빈값으로 설정하면 해당 헤더값이 전달되지 않는다.
proxy_set_header var “”;
proxy_set_header는 어디서든 사용 가능하지만 proxy_pass가 지정되는 지점에 값이 재정의된다. 이때 위에서 정의한 proxy_set_header들은 모두 무시된다.
블로그에서 제시된 문제 코드는 다음과 같다.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
location /~ {
# 새 헤더 재정의 및 추가로 위의 proxy_set_header는 모두 무시된다.
proxy_set_header var var;
proxy_pass http://localhost:9090;
}
위의 설정들이 제대로 적용되기 위해서는 같은 location 블럭 안에 proxy_pass와 함께 헤더값이 지정되어야한다.
location /~ {
# 지정한 proxy_set_header는 모두 적용된다.
proxy_pass http://localhost:9090;
proxy_set_header var var;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
Nginx란 무엇인가? https://dkswnkk.tistory.com/513
Nginx란 무엇인가?
서론 토이 프로젝트를 진행하면서 웹 서버로 Nginx를 사용하게 되었는데, 단순히 사용만 하는 것이 아니라 개념부터 확실하게 잡고 가기 위해서 정리를 하게 되었습니다. 웹 서버에 대한 개념은
dkswnkk.tistory.com
[mac] Nginx Tomcat 연동 - nginx 스프링 내장 톰캣 리다이렉트 방법 (Proxy Server) https://thalals.tistory.com/342
[mac] Nginx Tomcat 연동 - nginx 스프링 내장 톰캣 리다이렉트 방법 (Proxy Server)
요거 다음으로 도커로 nginx 랑 스프링부트 띄우는건 요글을 봐주세영 https://thalals.tistory.com/343 mac 로컬환경에서 진행했습니다. ✨ Nginx 를 aws 앞에 web server 로 두고, 리버스 프록시 서버로 사용해
thalals.tistory.com
SW/리눅스 Linux : Nginx Reverse Proxy 설정 방법, 예제, 명령어 https://jjeongil.tistory.com/1490
Linux : Nginx Reverse Proxy 설정 방법, 예제, 명령어
역방향 프록시는 클라이언트 요청을 가져와서 하나 이상의 프록시 서버에 요청을 보내고 응답을 가져오고 서버의 응답을 클라이언트에 전달하는 서비스입니다. 성능과 확장성 때문에 NGINX는 HTT
jjeongil.tistory.com
Nginx & Spring Boot 구성하기(3) SSL 설정과 Socket (0) | 2024.06.30 |
---|---|
Nginx & Spring Boot 구성하기(2) Linux 버전 (0) | 2024.06.30 |
MAC CORS 무시하고 크롬 실행하기 (0) | 2023.10.14 |
다중 서버 환경에서의 세션 관리 (2) | 2023.10.14 |
[SERVLET, JSP] 다양한 이벤트 리스너(Listener) (0) | 2022.12.27 |
댓글 영역