如何在 docker 中使用 nginx 将 phpMyAdmin 服务于 localhost/phpMyAdmin 而不是 localhost:8080

如何在 docker 中使用 nginx 将 phpMyAdmin 服务于 localhost/phpMyAdmin 而不是 localhost:8080

在我的项目中,我使用 Django 和 nginx,但我想通过 phpmyadmin 来管理我的云数据库。

Django 运行良好,但我无法对 phpmyadmin 执行相同操作,因为它在 localhost:8080 的 apache 中运行,而我希望它在 localhost/phpmyadmin 的 nginx 中运行。

这是 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 docker 容器的反向代理工作。

如果缺少一些重要信息,请告诉我。

答案1

您没有指定您遇到的不良影响,但也许 phpMyAdmin 需要主机标头来将请求路由到PMA_HOST

您可以尝试在代理配置中传递主机头:

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

忠告: PhpMyAdmin 并不以其安全性而闻名,如果您查看 Web 服务器日志,您会看到有人不断尝试定位 phpMyadmin 安装并检查其中是否存在各种漏洞。

我认为 phpMyadmin 是一种开发级服务,不应在生产服务器中使用。使用例如 MySQL Workbench 或任何其他合适的 SQL 客户端通过主机通过 SSH 隧道连接到 SQL 服务器更为安全。

您会在生产 Web 服务器上安装 phpmyadmin 吗?

相关内容