So stellen Sie phpMyAdmin mit nginx in Docker an localhost/phpMyAdmin statt an localhost:8080 bereit

So stellen Sie phpMyAdmin mit nginx in Docker an localhost/phpMyAdmin statt an localhost:8080 bereit

In meinem Projekt verwende ich Django und nginx, möchte meine Cloud-Datenbanken aber über phpmyadmin verwalten.

Django funktioniert einwandfrei, aber ich kann das Gleiche nicht mit phpmyadmin machen, weil es in Apache unter localhost:8080 läuft, obwohl ich möchte, dass es in nginx unter localhost/phpmyadmin läuft.

hier ist die 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

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

Ich hoffe, dass mir jemand sagen kann, wie ich Nginx als Reverse-Proxy für den Docker-Container phpMyAdmin nutzen kann.

Sollten wichtige Informationen fehlen, lassen Sie es mich bitte wissen.

Antwort1

Sie geben nicht an, welche negativen Auswirkungen Sie feststellen, aber möglicherweise erwartet phpMyAdmin einen Host-Header, an den Anforderungen weitergeleitet werden PMA_HOST.

Sie könnten versuchen, den Host-Header in Ihrer Proxy-Konfiguration zu übergeben:

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

Ein Rat: PhpMyAdmin ist nicht gerade für seine Sicherheit bekannt. Wenn Sie sich die Protokolle Ihres Webservers ansehen, werden Sie feststellen, dass ständig versucht wird, die phpMyAdmin-Installation zu lokalisieren und sie auf verschiedene Schwachstellen zu überprüfen.

Meiner Meinung nach ist phpMyadmin ein Dienst auf Entwicklungsebene und sollte nicht auf einem Produktionsserver laufen. Es ist viel sicherer, über Ihren Host einen SSH-Tunnel zu Ihrem SQL-Server zu erstellen, beispielsweise mit MySQL Workbench oder einem anderen geeigneten SQL-Client.

Würden Sie phpmyadmin auf einem Produktionswebserver installieren?

verwandte Informationen