WSGI 애플리케이션 배포를 위한 일반적인 구성에는 역방향 프록시 역할을 하는 범용 웹 서버(예: nginx) 뒤에 WSGI 서버(예: uWSGI 또는 Gunicorn)가 포함됩니다. 리버스 프록시를 사용하는 주요 이유 중 하나는 정적 파일을 효율적으로 제공하기 위해서입니다. 다른 이유가 있나요?
내 애플리케이션에 Python 코드만 포함되어 있고 정적 콘텐츠에는 관심이 없다고 가정해 보겠습니다. 이 경우 역방향 프록시가 필요한 이유는 무엇입니까? uWSGI와 Gunicorn은 이미 클라이언트와 인터페이스할 수 있는 비동기 HTTP 서버를 제공하고 있습니다.
WSGI HTTP 서버를 외부 세계에 직접 노출하는 것이 더 나은 실제 사례가 있습니까?
답변1
본격적인 역방향 - 프록시와 같은 더 많은 구성 옵션이 있습니다.
- 고쳐 쓰기
- 위치
- 섬기는 사람
- https
- 헤더 정리
- 만료
- gzip
- ....
로드 밸런싱을 할 수 있습니다
- Proxy_cache를 사용할 수 있습니다
- 앱 서버가 다운된 경우에도 사용자 정의 오류 페이지를 구현할 수 있습니다.
- WAF를 구현할 수 있습니다
- (때때로) 취약점에 대한 핫패치를 할 수 있습니다
보너스포인트
- 다음 설정(nginx)을 사용하면 초당 100,000개의 요청(평균 하드웨어 기준)으로 클라이언트에게 깊은 인상을 줄 수 있습니다.
.
location /perftest/ {
return 200;
}
답변2
역방향 프록시 사용의 추가 이점.
귀하에게 도움이 될 수 있는 다른 혜택도 얻을 수 있습니다.
- 인터넷에서 정보를 숨길 수 있습니다(웹 서버 버전, 앱 서버, 데이터베이스 서버, API).
- 하나의 도메인(Linux tomcat + Windows IIS 등) 뒤에 여러 웹 서버 기술을 구현할 수 있습니다.
- https/SSL 연결을 종료하고 이를 내부 http 서비스에 매핑할 수 있습니다.
- 모든 로깅을 중앙 집중화할 수 있습니다.
- 모든 DDOS 예방을 중앙 집중화할 수 있습니다.
- 웹 서버 계층에서 ID 관리를 구현할 수 있습니다.
보안상의 이점
- 위와 같이 내부서버가 숨어있습니다.
- 호스트(DMZ라고 함)의 소프트웨어 방화벽을 사용하지 않고도 인터넷에서 내부 앱 서버 서버 및 데이터베이스 서버를 라우터/방화벽화할 수 있습니다.
- 즉시 해결이 불가능한 서버를 알려진 문제(웹 애플리케이션 방화벽)나 알려진 공격 패턴으로부터 보호할 수 있습니다.