Como servir phpMyAdmin para localhost/phpMyAdmin em vez de localhost:8080 usando nginx no docker

Como servir phpMyAdmin para localhost/phpMyAdmin em vez de localhost:8080 usando nginx no docker

No meu projeto, estou usando Django e nginx, mas quero gerenciar meus bancos de dados em nuvem através do phpmyadmin.

O Django está funcionando bem, mas não posso fazer o mesmo com o phpmyadmin porque ele está rodando no apache em localhost:8080, quando quero que ele rode no nginx em localhost/phpmyadmin.

aqui está o 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

e 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/;
    }
}

Espero que alguém possa me dizer como fazer o nginx funcionar como um proxy reverso para o contêiner docker phpMyAdmin.

Se alguma informação importante estiver faltando, por favor me avise.

Responder1

Você não especifica qual é o efeito negativo que está enfrentando, mas talvez o phpMyAdmin espere que um cabeçalho de host encaminhe solicitações para PMA_HOST.

Você poderia tentar passar o cabeçalho do host na sua configuração de proxy:

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

Palavra de conselho: O PhpMyAdmin não é conhecido por sua segurança e se você olhar os logs do seu servidor web, verá uma tentativa constante de localizar a instalação do phpMyadmin e verificar se há várias vulnerabilidades nela.

Na minha opinião, o phpMyadmin é um serviço de nível de desenvolvimento e não deveria estar em um servidor de produção. É muito mais seguro fazer um túnel ssh através do seu host para o seu servidor SQL usando, por exemplo, MySQL Workbench ou qualquer outro cliente SQL adequado.

Você instalaria o phpmyadmin em um servidor web de produção?

informação relacionada