Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用NGINX在docker中设置动态子域_Php_Docker_Nginx - Fatal编程技术网

Php 如何使用NGINX在docker中设置动态子域

Php 如何使用NGINX在docker中设置动态子域,php,docker,nginx,Php,Docker,Nginx,基本上,我需要有动态子域,因此站点应该在Docker中的任何子域中可用,如下所示: admin.example.com adrian.example.com files.example.com 我没有固定数量的子域,所以我不能将它们全部放在hosts文件中 服务器名称也没有帮助:Server\u name www.$hostname 他们都应该指向同一个网站。 我尝试了jwilder反向代理,但无法正确设置 我有一个docker compose.yml和Dockerfile 有人能给我一个我可以

基本上,我需要有动态子域,因此站点应该在Docker中的任何子域中可用,如下所示:

admin.example.com
adrian.example.com
files.example.com

我没有固定数量的子域,所以我不能将它们全部放在hosts文件中

服务器名称也没有帮助:
Server\u name www.$hostname

他们都应该指向同一个网站。 我尝试了jwilder反向代理,但无法正确设置

我有一个
docker compose.yml
Dockerfile

有人能给我一个我可以使用的工作代码,然后根据我的需要修改它吗。如果我还需要更改我的主机文件

我做了一些研究,但我的nginx和docker知识还不够

Nginx.conf

Dockerfile

docker compose.yml


不确定您在使用jwilder的反向代理时尝试了什么,但失败了什么,但这是一种很好的解决当前问题的方法,无需处理nginx配置和复杂的组合配置

这是一个工作代码,您甚至不必更改主机文件

version: '3.7'

services:
  nginx:
    image: jwilder/nginx-proxy
    ports: ["80:80"]
    volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro
    environment:
      DEFAULT_HOST: fallback.lvh.me

  api:
    image: dannyben/whoami
    environment:
      MESSAGE: I am the API
      VIRTUAL_HOST: "*.lvh.me"

  web:
    image: dannyben/whoami
    environment:
      MESSAGE: I am the WEB
      VIRTUAL_HOST: "www.lvh.me"
要使其正常工作,必须首先启动nginx代理:

$ docker-compose up -d nginx
只有这样,后端服务

$ docker-compose up -d api web
然后,您可以访问
www.lvh.me
查看web后端,并访问
任何其他.lvh.me
查看API后端

此外,您可以为
VIRTUAL\u HOST
环境变量提供多个通配符主机,以便它同时支持本地开发环境和生产环境,如下所示:

VIRTUAL_HOST: "*.lvh.me,*.your-real-domain.com"
需要注意的是,为了在生产环境中工作,您的DNS也应该设置为使用通配符子域


在本演示中,
lvh.me
只是将所有流量转发到127.0.0.1,然后再转发到您的nginx,nginx再将流量转发到您的实际应用程序。

您能提供您目前编写的代码吗?@kuba,完成:)作为对未来问题的建设性建议:如果您将代码压缩到理解和再现问题所需的最低限度,将有助于其他人帮助您。作为额外的奖励,它还将帮助您更好地理解它。哦,实际上是
lvh.me
帮助解析地址。我正在更改虚拟主机的名称。这一点很重要,因为它有帮助。请注意,我在最后添加了一些关于生产中的通配符和lvh.me的使用的更多信息。我们需要什么样的DNS记录来允许这种设置?
$ docker-compose up -d nginx
$ docker-compose up -d api web
VIRTUAL_HOST: "*.lvh.me,*.your-real-domain.com"