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

w7t8yxp5  于 2022-11-09  发布在  PHP
关注(0)|答案(1)|浏览(158)

在我的项目中,我使用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默认配置文件

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容器的反向代理工作。
如果遗漏了一些重要信息,请告诉我。

juzqafwq

juzqafwq1#

你可以用另一个docker容器的主机名和内部端口(不是公开的那个)来访问它。另外,重写url是必要的。

location  ~ \/pma {
      rewrite ^/pma(/.*)$ $1 break;
      proxy_set_header X-Real-IP  $remote_addr;
      proxy_set_header X-Forwarded-For $remote_addr;
      proxy_set_header Host $host;
      proxy_pass http://phpmyadmin;
    }

我用这个docker-compose进行了测试。yml:

version: "3.9"

services:      
  nginx:
    image: nginx:latest
    volumes:
      - ./templates:/etc/nginx/templates
    ports:
      - 80:80

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest

相关问题