首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有不同phpmyadmin服务和“相同端口”问题的不同域(nginx反向代理、坞)

具有不同phpmyadmin服务和“相同端口”问题的不同域(nginx反向代理、坞)
EN

Stack Overflow用户
提问于 2022-01-07 18:45:45
回答 1查看 177关注 0票数 0

我有一个带有nginx代理容器的VPS,我用phpmyadmin服务创建了一些wordpress网站。如果我想用这个定义创建另一个站点,我会遇到“相同端口”的问题。好的,我可以将端口更改为2998,它可以正常工作,但是我需要为我的VPS添加一个新的开放端口。我不想添加或更改每个站点的端口。

现在:

  • example-a.com:2999 ->示例-一个phpmyadmin登录名page
  • examlpe-b.com:2998 ->示例-b phpymadmin登录页

是否有一种方法可以按域地址引导我找到合适的容器?

  • example-a.com:2999 ->示例-a phpmyadmin登录page
  • examlpe-b.com:2999 ->示例-b phpymadmin登录页

我的nginx代理定义

代码语言:javascript
复制
networks:
  nginx-proxy:
    external: false
    name: nginx-reverse-proxy
  default:
    name: nginx-reverse-proxy-default

version: '2'
services:

  nginx-proxy:
    build:
      context: .nginx-proxy
      dockerfile: Dockerfile
    container_name: nginx-proxy
    ports:
      - 80:80
      - 443:443
    restart: always
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - .nginx-proxy/certs:/etc/nginx/certs:ro
      - .nginx-proxy/vhost.d:/etc/nginx/vhost.d
      - .nginx-proxy/dhparam:/etc/nginx/dhparam
      - /usr/share/nginx/html
    networks:
      - nginx-proxy

  nginx-proxy-acme:
    image: nginxproxy/acme-companion
    container_name: nginx-proxy-acme
    restart: always
    volumes_from:
     - nginx-proxy
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock:ro
     - .nginx-proxy/certs:/etc/nginx/certs:rw
     - .nginx-proxy-acme/acme:/etc/acme.sh

,这是我的wordpress站点定义

代码语言:javascript
复制
version: "3.9"

volumes:
  database_volume: {}

x-logging:
  &default-logging
  driver: json-file
  options:
    max-size: '1m'
    max-file: '3'
    
services:

  web:
    build:
      context: ./.docker
      dockerfile: Dockerfile_web
    container_name: test_web
    ports:
      - '3000:80'
    volumes:
      - ./wp:/var/www
    depends_on:
      - database
      - php
    restart: always
    logging: *default-logging

  database:
    image: mariadb:latest
    container_name: test_database
    environment:
      MYSQL_USER: wp
      MYSQL_PASSWORD: wp
      MYSQL_DATABASE: wp
      MYSQL_ROOT_PASSWORD: wp
    volumes:
      - ./database_volume:/var/lib/mysql
    expose:
      - 3306
    restart: always
    logging: *default-logging
  
  php:
    build:
      context: ./.docker
      dockerfile: Dockerfile_php
    container_name: test_php
    working_dir: /var/www/
    volumes:
      - ./wordpress:/var/www
    restart: always
    logging: *default-logging
  
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: test_phpmyadmin
    links:
      - database:db
    ports:
      - '2999:80'
    restart: always
    logging: *default-logging
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-07 12:49:40

你想要的是不可能的,但你可能并不真正想要它。当您仔细考虑您想要配置的内容,以及如果用户转到任何一个URL时会发生什么情况,就会变得很清楚:

您已经将443

  • you配置为指向IP

  • example-a.com配置为指向您的IP

  • ,您已经将nginx-proxy容器配置为侦听端口80,而希望将WordPress容器配置为同时侦听端口2999
  • you,,或者更确切地说是acme-companion,将nginx容器配置为转发请求主机<代码>D18的HTTP请求,以进入容器,例如端口2999,和请求example-b.com到带有端口example-b.com的容器B

现在,您可以立即看到,您有两件事试图在同一个网络接口上侦听端口2999 --这不起作用,但它不能,因为在解析请求之前,谁会处理接收到的请求,以找出它想要的主机?容器A不能接受请求,如果请求是针对B的,则提交请求-A不知道B。

因此,如果您考虑到一个用户向example-a.com:2999发送请求,那么真正发生的情况是,一个请求会转到<yourip>:2999,就像一个用户转到example-b.com:2999,它最终会转到<yourip>:2999

如何解决这个问题呢?通过让接受用户请求的第三个容器C检查请求,并根据他们是否需要容器A或B,将请求交给A或B。

最棒的事情是:你已经拥有了!容器C实际上是您的nginx容器,它正在监听端口80/443。因此,如果用户在不提供端口的情况下进入example-a.com,它将转到80443 (取决于他们是使用http还是https)。然后,nginx将分析请求,并将其发送到正确的容器。因此,A和B端口监听什么并不重要,因为对外部世界来说,他们似乎在监听80/443

因此,真正的答案是,虽然您不能将自定义端口与虚拟主机组合起来,并且对多个容器使用相同的端口(80/443除外),但实际上并不需要自定义端口!如果您只使用默认端口配置容器,用户可以同时使用https://example-a.comhttps://example-b.com,它将“只工作”™。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70625820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档