Как обслуживать phpMyAdmin на localhost/phpMyAdmin вместо localhost:8080 с помощью nginx в docker

Как обслуживать phpMyAdmin на localhost/phpMyAdmin вместо localhost:8080 с помощью nginx в docker

В своем проекте я использую Django и nginx, но хочу управлять своими облачными базами данных через phpMyAdmin.

Django работает нормально, но я не могу сделать то же самое с phpmyadmin, потому что он запущен в Apache по адресу localhost:8080, тогда как я хочу, чтобы он работал в nginx по адресу localhost/phpmyadmin.

вот 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 работать в качестве обратного прокси-сервера для контейнера Docker phpMyAdmin.

Если какая-то важная информация отсутствует, пожалуйста, дайте мне знать.

решение1

Вы не указали, какой именно негативный эффект вы испытываете, но, возможно, phpMyAdmin ожидает заголовок хоста для перенаправления запросов в PMA_HOST.

Вы можете попробовать передать заголовок хоста в конфигурации прокси-сервера:

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

Совет: PhpMyAdmin не славится своей безопасностью, и если вы посмотрите журналы своего веб-сервера, вы увидите постоянные попытки обнаружить установку phpMyadmin и проверить ее на наличие различных уязвимостей.

По моему мнению, phpMyadmin — это сервис уровня разработки, и его не должно быть на сервере производства. Гораздо безопаснее использовать ssh-туннель через ваш хост к вашему SQL-серверу, используя, например, MySQL Workbench или любой другой подходящий SQL-клиент.

Вы бы установили phpMyAdmin на рабочем веб-сервере?

Связанный контент