如何使用Docker NGINX映像为带有域名的情侣容器提供服务

时间:2017-01-21 15:56:42

标签: nginx docker docker-compose reverse-proxy proxypass

我将来需要使用我的docker-machine托管多个站点,但我知道我正试图在localhost上启动它。

主要目的是获取某个网站,当然我需要从OS X上的/etc/hosts文件开始,下面列出:

127.0.0.1   localhost
255.255.255.255 broadcasthost

127.0.0.1     dev.proling.ru
127.0.0.1     dev.vshvetsov.ru

此配置允许我访问具有独立于DNS设置的所选域的站点。现在我将展示我的docker-compose.yml

version: '2'

services:
  mysql:
    build: mysql/
    restart: always
    volumes:
      - mysql_data:/var/lib/mysql
    container_name: mysql
  vshvetsov:
    depends_on:
      - mysql
    build: vshvetsov/
    ports:
      - 8000:80
    restart: always
    container_name: vshvetsov
  proling:
    depends_on:
      - mysql
    build: proling/
    ports:
      - 8003:80
    restart: always
    container_name: proling
  nginx:
    depends_on:
      - proling
      - vshvetsov
    image: nginx
    restart: always
    ports:
     - "80:80"
    volumes:
     - ./nginx/volume:/etc/nginx
    container_name: nginx
volumes:
    mysql_data:

两个网站容器在localhost:8000localhost:8003上完美运行,下面是我的nginx/volume文件夹树:

volume
    ├── conf.d
    │   ├── default.conf
    │   ├── proling.ru
    │   └── vshvetsov.ru
    ├── fastcgi_params
    ├── koi-utf
    ├── koi-win
    ├── mime.types
    ├── modules -> /usr/lib/nginx/modules
    ├── nginx.conf
    ├── scgi_params
    ├── uwsgi_params
    └── win-utf

因此影响我的NGINX配置的唯一方法是将.conf个文件放在conf.d目录中,以下都是:

dev.proling.ru

server {
    listen  80;
    server_name  www.proling.ru;
    rewrite ^ http://proling.ru$request_uri? permanent; #301 redirect
}

server {
    listen 80;

    server_name proling.ru *.proling.ru;

        location / {

            proxy_pass http://proling;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;

            access_log /var/log/nginx/proling.ru-access.log;
        }
}

和dev.vshvetsov.ru

server {
    listen 80;

    server_name www.vshvetsov.ru vshvetsov.ru dev.vshvetsov.ru;

    location / {
        proxy_pass http://vshvetsov;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        access_log /var/log/nginx/vshvetsov.ru-access.log;
    }
}

1 个答案:

答案 0 :(得分:0)

conf.d中重命名nginx配置文件解决了这个问题。它们必须以.conf扩展名结尾,因为nginx.conf默认使用此字符串:

include /etc/nginx/conf.d/*.conf;

当然我可以挂载或复制我们的配置,如果它更方便,但我更喜欢默认路径。