이번에는 요즘 많이 사용되고 있는 Nginx에 대해 설치 부터 튜닝까지 방법에 대해 진행해보겠습니다.
이번엔 두 번째로 Nginx에서 자주 사용하는 proxy_pass 에 대해 설명해드리겠습니다.
진행 순서는 1~8까지 가이드를 준비하고 있습니다.
- Nginx 설치 및 컴파일 방법_(모듈설치)
- Nginx 사용하는 옵션정리_proxy_pass
- Nginx 사용하는 옵션정리_upstream
- Nginx 사용하는 옵션정리_health-check
- Nginx 사용하는 옵션정리_sticky
- Nginx 사용하는 옵션정리_upstream, ip hash
- Nginx 사용하는 옵션정리_X-Forwarded-For
- Nginx 사용하는 옵션정리_php-fpm & zabbix 모니터링
Nginx 에서 제공하는 proxy_pass 설정을 잘 활용하면 was의 Instance 별 재기동 및 장애 발생시 health-check 를 자동으로 설정하여
WAS Instance 에서 서비스 이슈 발생하여 Thread Hang이 증가하여 큐가 발생했을때 해당 인스턴스로 호를 보내지 않고 정상적인 인스턴스로 호출을 보내면서 장애를 최소화 할 수 있습니다.
또한, 해당 health-check 기능을 활용하여 WAS Instance restart 및 stop 시 health-check 가 성공하지 않으면 해당 인스턴스로 호출을 보내지 않도록 할 수도 있습니다.
위 health-check 기능을 활용하면 서비스 중에도 재기동을 마음편히(?) 할 수 있고, 장애가 발생해서 WAS Instance 를 재기동 하느라 진땀빼지 않아도 됩니다.
아래 내용 참고해서 시스템에 맞도록 설계하시면 많은 도움이 될 거라 생각됩니다.
이해를 돕기위해 health-check 흐름도를 만들어 봤습니다.

아래 순서대로 진행해보세요.
| 1. health check 옵션이란? WAS instance 가 정상적으로 작동하는지 sample 소스를 호출하여 http 2xx code 발생하면 정상이며, 2xx code 외에 다른 code 호출시 일정 Time을 준뒤 정상으로 돌아올때 까지 해당 인스턴스로 호출을 보내지 않는 방식 경로 : /etc/nginx/proxy/include 파일 : health-check.conf check interval=2000 rise=5 fall=1 timeout=1000 type=http;
check_http_send "GET /health HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx; - 경로 : /etc/nginx/ nginx.conf
- 경로 : /etc/nginx/proxynginx-proxy.conf (폴더) backend
- 경로 : /etc/nginx/proxy/backend(폴더) include 서비스명.conf (폴더) 서비스명
- 경로 : /etc/nginx/proxy/backend/서비스명/healthhealth-check-base-adminserver.conf
health-check-base-apiserver.conf health-check-base-batchwebserver.conf health-check-base-frontweb.conf nginx에서 health 설정을 하면 정해진 옵션에 따라 주기적으로 브라우저 호출을 진행한다. URL : http://localhost/m/health 정상일경우 OK 화면이 브라우저에 호출된다. - health-check 샘플 소스 @Controller
public class HealthController { @Autowired(required=false) private HealthEndpoint healthEndpoint; @RequestMapping("/health") @ResponseBody @ConditionalOnBean(value={HealthEndpoint.class}) public Json<?> health() { Health health = healthEndpoint.invoke(); Status status = health.getStatus(); if(status.equals(Status.UP)) { return Json.createJson(HttpStatus.OK); } else { throw new ResponseCodeException(HttpStatus.SERVICE_UNAVAILABLE.toString(), HttpStatus.SERVICE_UNAVAILABLE.getReasonPhrase(), HttpStatus.SERVICE_UNAVAILABLE.value()); } } } |
'Apache Tomcat' 카테고리의 다른 글
| (Nginx-5) Nginx 사용하는 옵션정리 5_X-Forwarded-For (0) | 2023.10.16 |
|---|---|
| (Nginx-4) Nginx 사용하는 옵션 정리 4_(sticky, upstream, ip hash) (0) | 2023.10.13 |
| (Nginx-2) Nginx 사용하는 옵션 정리 2_(proxy_pass & upstream) (0) | 2023.10.12 |
| (Nginx-1) Nginx 설치 및 컴파일 방법 (0) | 2023.10.12 |
| (JBoss & Wildfly) 기동, 다운 스크립트 생성 방법 (standalone.sh, domain.sh) (0) | 2023.10.11 |