
어리석은 질문이라면 죄송합니다. 하지만 Nginx Docker를 사용하여 여러 Flask 웹사이트 Docker 컨테이너를 호스팅할 서버를 구축하고 있습니다. 이제 내 질문은 하나의 기본 nginx 도커 컨테이너를 갖고 여기에 모든 웹 사이트 Docker 컨테이너를 호스팅하는 것이 더 낫습니까, 아니면 docker compose를 사용하여 각 애플리케이션에 대해 Nginx 도커 컨테이너를 갖는 것이 더 낫습니까?
자원 처리와 효율성 측면에서 어느 것이 더 나은지 알고 싶습니다.
@Jacob 귀하의 답변에 따라 다음과 같은 설정을 시도하고 있습니다.
도커-compose.yml:
version: "3.8"
services:
portfolix:
container_name: portfolix
image: mervin16/portfolix:dev
env_file:
- config_local.env
expose:
- 8086
restart: always
networks:
- sky_net
mes:
container_name: mes
image: mervin16/mes:dev
networks:
- sky_net
expose:
- 8085
restart: always
nginx:
build: ./nginx
container_name: nginx
ports:
- "8085:85"
- "8086:86"
restart: always
networks:
- sky_net
networks:
sky_net:
name: sky_network
driver: bridge
이제 각 웹사이트는 localhost:8085 및 localhost:8086에서 사용할 수 있습니다.
그런 다음 Nginx(Docker가 아니라 내 서버에 설치된 프록시)에서 역방향 프록시를 사용하여 트래픽을 내 도메인 이름으로 리디렉션합니다.
server {
server_name mes.th3pl4gu3.com;
location / {
access_log /var/log/nginx/mes/access_mes.log;
error_log /var/log/nginx/mes/error_mes.log;
proxy_pass http://localhost:8081;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/mes.th3pl4gu3.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/mes.th3pl4gu3.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = mes.th3pl4gu3.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name mes.th3pl4gu3.com;
return 404; # managed by Certbot
}
답변1
어리석은 질문은 아니지만, nginx와 docker를 어떻게 구성하든 하나의 호스트 IP는 하나의 서비스만 하나의 포트에 바인딩할 수 있으므로 명확히 해두겠습니다. 따라서 포트 80/443(http/ https) 하나의 nginx 컨테이너만 실행하여 서로 다른 호스트 이름(가상 호스트) 간의 라우팅을 처리하고 트래픽을 적절한 백엔드로 리디렉션할 수 있습니다.
또한 이러한 백엔드를 다른 포트에 노출하거나 동일한 Docker 네트워크를 공유해야 합니다.
고려해야 할 사항은 다음과 같은 보다 동적인 백엔드에 더 적합한 것을 갖춘 기본 nginx 컨테이너의 대안입니다.Traefik또는nginx 프록시