nginx를 모든 Docker 컨테이너의 역방향 프록시로 사용

nginx를 모든 Docker 컨테이너의 역방향 프록시로 사용

저는 Raspberry Pi 4에서 Docker와 일부 컨테이너화된 웹 애플리케이션을 실행하고 있으며 모든 트래픽이 역방향 프록시로 nginx를 통과하도록 하려고 합니다.

내 문제는 네트워크의 모든 장치에서 Docker 컨테이너 포트에 액세스할 수 있다는 것입니다. 즉, nginx를 우회합니다.

이것은 내 nginx 구성입니다.

server {
    listen 80;
    server_name myRaspi;

    location /cool {
        proxy_pass         http://127.0.0.1:5000/cool;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Connection "Upgrade";
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

보시다시피 http://myRaspi/cool에서 http://localhost:5000/cool(Docker 컨테이너 내에서 실행되는 웹 애플리케이션)로 트래픽을 전달하고 있습니다. 현재 네트워크의 모든 장치에서 http://myRaspi/cool 및 http://myRaspi:5000/cool에 액세스할 수 있습니다.

나는 팔로우한다도커 공식 문서다음을 구성합니다.

iptables -I DOCKER-USER -i ext_if ! -s 192.168.174.0/24 -j DROP

sudo iptables --list새로운 표시 규칙을 실행합니다 .
내 모든 네트워크 장치가 서브넷에 있으므로 192.168.175이제 http://myRaspi/cool 및 http://myRaspi:5000/cool에 대한 모든 트래픽이 작동하지 않기를 바랍니다(예외를 차단했기 때문에) 192.168.174. 중 192.168.175).
안타깝게도 이 방법은 작동하지 않습니다. 여전히 http://myRaspi/cool 및 http://myRaspi:5000/cool에 액세스할 수 있습니다.

그 후에는 sudo reboot이전에 생성된 규칙이 사라지고 sudo iptables --list더 이상 포함되지 않습니다.

저는 아직 Docker/Linux/nginx 네트워킹의 세계에 익숙하지 않기 때문에 모든 트래픽이 nginx를 역방향 프록시로 통과하고 Raspi 외부에서 컨테이너 포트에 액세스하는 것이 불가능하도록 Docker/nginx를 구성하는 데 도움을 주시면 정말 감사하겠습니다. .

답변1

내 실수는 컨테이너를 시작할 때 Docker 포트를 노출하는 방식에 있었습니다.

이와 같은 컨테이너를 실행하기 전에는 -p 5000:5000이제 를 사용하고 있습니다 -p 127.0.0.1:5000:5000. 이렇게 하면 포트가 로컬로만 노출되므로 http://myRaspi:5000/cool을 통해 액세스할 수 없습니다. 수동 조작이 필요하지 않습니다 iptables.

관련 정보