Cómo servir phpMyAdmin a localhost/phpMyAdmin en lugar de localhost:8080 usando nginx en Docker

Cómo servir phpMyAdmin a localhost/phpMyAdmin en lugar de localhost:8080 usando nginx en Docker

En mi proyecto, estoy usando Django y nginx, pero quiero administrar mis bases de datos en la nube a través de phpmyadmin.

Django funciona bien pero no puedo hacer lo mismo con phpmyadmin porque se ejecuta en apache en localhost:8080, cuando quiero que se ejecute en nginx en localhost/phpmyadmin.

aquí está el 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

y 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 alguien pueda decirme cómo hacer que nginx funcione como proxy inverso para el contenedor acoplable phpMyAdmin.

Si falta alguna información importante, hágamelo saber.

Respuesta1

No especifica cuál es el efecto negativo que está experimentando, pero quizás phpMyAdmin espera que un encabezado de host enrute las solicitudes a PMA_HOST.

Podrías intentar pasar el encabezado del host en tu configuración de proxy:

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

Un consejo: PhpMyAdmin no es conocido por su seguridad y si observa los registros de su servidor web, verá un intento constante de ubicar la instalación de phpMyadmin y verificar si hay varias vulnerabilidades en ella.

En mi opinión, phpMyadmin es un servicio de nivel de desarrollo y no debería estar en un servidor de producción. Es mucho más seguro hacer un túnel ssh a través de su host hasta su servidor SQL utilizando, por ejemplo, MySQL Workbench o cualquier otro cliente SQL adecuado.

¿Instalarías phpmyadmin en un servidor web de producción?

información relacionada