如何在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 嗎?

相關內容