NGINX容器作为不同docker-compose实例之间的反向代理

时间:2019-05-04 23:58:39

标签: docker nginx reverse-proxy

我对nginx和docker都相当陌生

我有两个wordpress和一个nginx(分开)docker-compose.yml。 我想让nginx conainer作为我的两个wordpress的反向代理。 例如,我想转到 http://localhost/wordpressblog http://localhost/wordpressphotography

我很乐意接受建议

其中一项是

    var mu sync.Mutex
    var wg sync.WaitGroup

    // length is 197K
    for i:=0;i<len(listings.Listings);i++{
       wg.Add(1)
       go func(){
           mu.Lock()

           // code execution (tested prior to adding concurrency and locking and wait group)      

           wg.Done()
           mu.Unlock()   
       }()
    }
    wg.Wait()

这是我的Nginx配置

version: '3'
services:
  wp:
    image: wordpress:latest
    hostname: wordpressblog
    ports:
      - 81:80
    volumes:
      - /opt/wordpress/config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
      - /opt/wordpress/wp-app:/var/www/html
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: "wordpress"
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: "password"
    depends_on:
      - db
    links:
      - db

1 个答案:

答案 0 :(得分:1)

请尝试使用Traefik(它是可识别Docker的反向代理)来代替NGinX。

您可以在Traefik on Docker for Web Developers - With bonus Let's Encrypt SSL!的“ Juan Treminio”中看到一个示例,以便自动注册您的容器并通过预定义的URL访问它们。

胡安介绍了如何解决“口舞”:

  

如果端口80映射到Web服务器A,则必须选择另一个端口来绑定Web服务器B和Web服务器C。
  这很快就会变老,因为您必须记住http://localhost转到A,http://localhost:81转到B,http://localhost:82转到C。

他指出:

  

在虚拟机上,实际上不会发生此问题,因为您可以为服务器分配静态IP地址,并将其绑定到系统的主机文件(/etc/hosts)。
  容器本质上是临时的,通常不会在主机网络上创建,而是在专用网络中使用其在特定范围内的随机IP地址创建。但是,您必须为启动的每个VM编辑/etc/hosts,并且列表会随着您处理的项目数的增加而增加。

     

Træfik解决了这两个问题,首先是消除了在URL中使用端口的需要,其次是完全不需要编辑/etc/hosts

Traefik检测到新容器的方式是Docker专用网络:

 docker network create --driver bridge traefik_webgateway

一个新的容器将自己注册到所述Traefik码头工人网络:

docker run -d --name some-mailhog \
    --network traefik_webgateway \
    --label traefik.docker.network=traefik_webgateway \
    --label traefik.frontend.rule=Host:mailhog.localhost \
    --label traefik.port=8025 \
    mailhog/mailhog

URL变得简单http://mailhog.localhost

您可以类似地注册两个Wordpress组件。

优点:无需维护 static NGiNX配置文件:任意数量的组件都可以注册其URL。


在Traefik之前,旧的方式是与NGiNX一起使用jwilder/nginx-proxy

它是Automated Nginx Reverse Proxy for Docker

  

Docker提供了一个远程API,以检查容器并访问其IP,端口和其他配置元数据。此外,它还提供了实时事件API,可用于在启动和停止容器时进行通知。这些API可用于自动生成反向代理配置。

     

docker-gen 是一个小型实用程序,使用这些API并将容器元数据公开给模板。呈现模板并可以运行可选的Notification命令以重新启动服务。

     

使用docker-gen,我们可以自动生成Nginx配置文件,并在更改时重新加载Nginx。