docker で nginx を使用して、localhost:8080 ではなく localhost/phpMyAdmin に phpMyAdmin を提供する方法

docker で nginx を使用して、localhost:8080 ではなく localhost/phpMyAdmin に phpMyAdmin を提供する方法

私のプロジェクトでは、Django と nginx を使用していますが、クラウド データベースを phpmyadmin を通じて管理したいと考えています。

Django は正常に動作していますが、localhost/phpmyadmin の nginx で実行したいのに、localhost:8080 の apache で実行されているため、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/;
    }
}

phpMyAdmin Docker コンテナのリバース プロキシとして nginx を動作させる方法を誰か教えていただければ幸いです。

重要な情報が不足している場合はお知らせください。

答え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 クライアントを使用して、ホスト経由で SQL サーバーに SSH トンネルする方がはるかに安全です。

運用 Web サーバーに phpmyadmin をインストールしますか?

関連情報