docker에서 nginx를 사용하여 localhost:8080 대신 phpMyAdmin을 localhost/phpMyAdmin에 제공하는 방법

docker에서 nginx를 사용하여 localhost:8080 대신 phpMyAdmin을 localhost/phpMyAdmin에 제공하는 방법

내 프로젝트에서는 Django와 nginx를 사용하고 있지만 phpmyadmin을 통해 클라우드 데이터베이스를 관리하고 싶습니다.

Django는 잘 작동하지만 phpmyadmin으로는 동일한 작업을 수행할 수 없습니다. 왜냐하면 localhost/phpmyadmin의 nginx에서 실행하고 싶을 때 localhost:8080의 Apache에서 실행되기 때문입니다.

여기 docker-compose.yml이 있습니다.

version: "3.9"
   
services:

  web:
    restart: always
    build:
      context: .
    env_file:
      - .env
    volumes:
      - ./project:/project
    expose:
      - 8000
      
  nginx:
    restart: always
    build: ./nginx
    volumes:
      - ./static:/static
    ports:
      - 80:80
    depends_on:
      - web

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    restart: always
    environment:
      PMA_HOST: <host_address>
      PMA_USER: <user>
      PMA_PASSWORD: <password>
      PMA_PORT: 3306
      UPLOAD_LIMIT: 300M
    ports:
      - 8080:80

및 nginx default.conf

upstream django{
    server web:8000;
}

server{
    listen 80;
    location / {
        proxy_pass http://django;
    }

    location /pma/ {               
        proxy_pass http://localhost:8080/;                                 
        proxy_buffering off;                                     
    }

    location /static/ {
        alias /static/;
    }
}

누군가 nginx를 phpMyAdmin 도커 컨테이너의 역방향 프록시로 작동시키는 방법을 알려줄 수 있기를 바랍니다.

중요한 정보가 누락된 경우 알려주시기 바랍니다.

답변1

현재 겪고 있는 악영향이 무엇인지 지정하지 않았지만 phpMyAdmin은 호스트 헤더가 요청을 PMA_HOST.

프록시 구성에 호스트 헤더를 전달해 볼 수 있습니다.

location / {
    proxy_pass http://localhost:8080/;                                 
    proxy_buffering off; 
    proxy_set_header Host $host;
}

조언의 말씀: PhpMyAdmin은 보안이 취약한 것으로 알려져 있으며 웹 서버 로그를 보면 phpMyadmin 설치 위치를 찾아 다양한 취약점을 확인하려는 지속적인 시도를 볼 수 있습니다.

제 생각에는 phpMyadmin은 개발 수준 서비스이므로 프로덕션 서버에 있어서는 안 됩니다. 예를 들어 MySQL Workbench 또는 기타 적합한 SQL 클라이언트를 사용하여 호스트를 통해 SQL 서버로 SSH 터널링하는 것이 훨씬 더 안전합니다.

프로덕션 웹 서버에 phpmyadmin을 설치하시겠습니까?

관련 정보