Как настроить несколько nginx услуг в одном docker сочинении - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь сломать мое монолитное c приложение до микро-сервисов. Мой docker -compose.yml выглядит примерно так:

  user-api:
    build:
      context: .
      dockerfile: ./UserApi/Dockerfile
    depends_on:
      - mysql
      - redis
    working_dir: /code
    ports:
      - "8101:80"
  user-api-nginx:
    build:
      context: .
      dockerfile: ./UserApiNginx/Dockerfile
    depends_on:
      - user-api
    network_mode: "service:user-api"
  order-api:
    build:
      context: .
      dockerfile: ./OrderApi/Dockerfile
    depends_on:
      - mysql
      - redis
    working_dir: /code
    ports:
      - "8102:80"
  order-api-nginx:
    build:
      context: .
      dockerfile: ./OrderApiNginx/Dockerfile
    depends_on:
      - order-api
    network_mode: "service:order-api"

И два моих nginx conf:

server {
    listen       80 default_server;
    server_name  testsite.local;
    root         /code/public;

    index index.php index.html;

    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME     $fastcgi_script_name;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
    }
}

и

server {
    listen       80 default_server;
    server_name  testsite.local;
    root         /code/public;

    index index.php index.html;

    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME     $fastcgi_script_name;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
    }
}

Таким образом, в моей локальной dev-среде я мог вызывать testsite.local: 8101 и testsite.local: 8102 для получения данных о пользователе и заказе соответственно. Насколько я понимаю, если я разверну свой код в aws ecs и добавлю ALB поверх него, ALB будет отправлять запросы в зависимости от пути, но не от порта. Мой вопрос: как я могу достичь этого в моем местном окружении? Спасибо!

...