docker file - nginx를 로비 서버로 활용하기
전체 구조
이때 server1과 server2를 다음과 같이 각각 실행할 수 있다.
하지만 이렇게 각각의 서버를 따로 실행시키는 것은 번거롭다.
그래서 Nginx 서버를 로빈 서버로 사용해본다.
- 이때 LB는 프록시 서버 역할을 수행한다.
- 단일 진입점 역할을 수행한다.
프록시 서버
프록시 서버는 클라이언트와 원격 서버 간의 중개 역할을 수행하는 서버이다.
클라이언트가 프록시 서버에 요청을 보내면, 프록시 서버는 해당 요청을 대신하여 원격 서버로 전달하고, 원격 서버의 응답을 클라이언트에게 반환한다.
이를 통해 클라이언트와 원격 서버 간의 직접적인 통신을 우회하고, 다양한 기능을 제공하거나 보안 및 성능 개선을 위해 사용된다.
프록시 서버는 다음과 같은 기능과 장점을 제공할 수 있다.
1. 캐싱: 프록시 서버는 이전에 요청된 리소스의 사본을 저장하여 다음 동일한 요청에 대해 원격 서버로부터 다시 가져오지 않고 캐시된 리소스를 제공할 수 있다.
이를 통해 네트워크 대역폭을 절약하고, 클라이언트의 응답 속도를 향상시킬 수 있다.
2. 보안: 프록시 서버는 클라이언트와 원격 서버 사이에서 중개자 역할을 수행하기 때문에, 클라이언트의 실제 IP 주소를 숨길 수 있다. 이를 통해 클라이언트의 익명성을 보호하고, 원격 서버에 직접적인 접근을 제한함으로써 보안을 강화할 수 있다.
3. 로드 밸런싱: 프록시 서버는 다수의 원격 서버에 대한 요청을 분산하여 부하를 분산시킬 수 있다.
이를 통해 웹 트래픽의 부하를 균등하게 분배하여 서비스의 가용성과 성능을 향상시킬 수 있다.
4. 콘텐츠 필터링: 프록시 서버는 클라이언트가 접근하는 콘텐츠에 대해 필터링을 수행할 수 있다.
예를 들어, 웹 사이트 차단, 악성 콘텐츠 차단, 압축, 암호화 등의 기능을 제공할 수 있다.
5. 네트워크 트래픽 모니터링: 프록시 서버는 클라이언트와 원격 서버 간의 모든 요청과 응답을 기록하고 모니터링할 수 있다.
이를 통해 네트워크 트래픽 분석, 문제 해결, 보안 위협 탐지 등에 활용할 수 있다.
프록시 서버는 다양한 형태와 용도로 사용되며, 웹 프록시, 리버스 프록시, 익명 프록시 등 다양한 유형이 있다.
각각의 유형은 특정한 목적과 요구사항에 맞게 구성되어 사용된다.
프록시 서버 만들기
nginx.conf
upstream server1 {
server 172.17.0.2:80;
}
upstream server2 {
server 172.17.0.3:80;
}
server {
listen 80;
server_name localhost;
# localhost:8080/server1
location /server1 {
proxy_pass http://server1/;
}
location /server2 {
proxy_pass http://server2/;
}
}
- 이때 server1과 server2의 IP 주소는 docker inspect 명령어를 통해 확인할 수 있다.
주의!!
proxy_pass http://server1/에서 마지막 server1 다음에 '/' 슬래시를 꼭 추가해야 한다.
Dockerfile
FROM nginx
COPY conf/nginx.conf /etc/nginx/conf.d/default.conf
ENTRYPOINT ["nginx", "-g", "daemon off;"]
실행
도커를 사용해 AWS에 배포할 때 Nginx를 사용하는 주요 이점
Reverse Proxy: Nginx는 리버스 프록시로 사용될 수 있다.
클라이언트와 애플리케이션 서버 간의 트래픽을 중계하고 로드 밸런싱을 수행하는 역할을 한다.
Nginx를 사용하면 애플리케이션 서버의 부하 분산, 트래픽 제어, SSL 암호화와 같은 기능을 효과적으로 관리할 수 있다.
정적 파일 서비스: Nginx는 정적 파일 서버로 사용될 수 있다.
애플리케이션의 정적 파일(css, js, 이미지 등)을 Nginx를 통해 효율적으로 제공할 수 있다.
Nginx는 정적 파일 서비스에 최적화되어 있어 빠른 속도와 높은 성능을 제공한다.
SSL/TLS 지원: Nginx는 SSL/TLS 암호화를 지원한다.
HTTPS를 사용하여 애플리케이션을 보안하고, 클라이언트와의 통신을 암호화할 수 있다.
Nginx를 사용하면 SSL/TLS 인증서를 구성하고, 암호화된 연결을 설정하는 작업을 간편하게 수행할 수 있다.
로드 밸런싱: Nginx는 로드 밸런서로 사용될 수 있다.
여러 애플리케이션 서버 또는 인스턴스에 들어오는 트래픽을 분산하여 부하를 분담하고, 가용성을 향상시킬 수 있다.
Nginx의 로드 밸런싱 기능을 사용하면 애플리케이션의 확장성과 성능을 최적화할 수 있다.
가벼움과 성능: Nginx는 경량 웹 서버로 알려져 있으며, 높은 동시 연결 처리량과 낮은 메모리 사용량을 가지고 있다.
따라서 Nginx를 사용하면 리소스 효율성과 빠른 응답 시간을 얻을 수 있다.
요약하면, 도커를 사용하여 AWS에 배포할 때 Nginx를 사용하면 리버스 프록시, 정적 파일 서비스, SSL/TLS 지원, 로드 밸런싱과 같은 다양한 이점을 얻을 수 있습니다. 이를 통해 애플리케이션의 안정성, 확장성 및 성능을 개선할 수 있습니다
'Docker' 카테고리의 다른 글
docker file - MySQL 환경변수와 볼륨연결 (0) | 2023.06.25 |
---|---|
docker file - nginx 게이트웨이 사용하기 (0) | 2023.06.25 |
docker file - nginx 설정 복사 (0) | 2023.06.24 |
docker file - nginx 내부구성 (0) | 2023.06.24 |
docker file - RUN 명령어 (0) | 2023.06.24 |