Докер Nginx compose - добавление тома nginx.conf (обратный прокси) - PullRequest
1 голос
/ 01 июля 2019

Я хочу контейнировать свои веб-приложения. В настоящее время я использую Apache для предоставления нескольких приложений PHP.

Каждое приложение должно быть предоставлено своим собственным контейнером. Nginx должен быть доступен по порту 80/443. В зависимости от подчиненного маршрута следует проксировать к одному из контейнеров.

Например:

www.url.de / hello1 -> hello1: 80 www.url.de/hello2 -> hello2: 80

докер-compose.yml:

version: '3'
services:
    nginx:
            image: nginx:latest
            container_name: reverse_proxy
            volumes:
                    - ./nginx.conf:/etc/nginx/nginx.conf
            ports:
                    - "80:80"
                    - "443:443"
            networks:
                    - app-network
            depends_on:
                    - hello1
                    - hello2

    hello1:
            build: ./test1
            image: hello1
            container_name: hello1
            expose:
                    - "80"
            networks:
                    - app-network
    hello2:
            build: ./test2
            image: hello2
            container_name: hello2
            expose:
                    - "80"
            networks:
                    - app-network

networks:
    app-network:

nginx.conf:

events {

}

http {
    error_log /etc/nginx/error_log.log warn;
    client_max_body_size 20m;

    proxy_cache_path /etc/nginx/cache keys_zone=one:500m max_size=1000m;


    server {
            server_name wudio.de;

            location / {
                    proxy_pass http://hello1:80;
            }

            location /hello1/ {
                    proxy_pass http://hello1:80;
                    rewrite ^/hello1(.*)$ $1 break;
            }

            location /hello2/ {
                    proxy_pass http://hello2:80;
                    rewrite ^/hello2(.*)$ $1 break;
            }

    }
}

Если я запускаю docker-compose up -d, только контейнер с изображением webapp-test1 находится в сети. И я также могу добраться до него по curl localhost: 8081. Nginx не работает. Если я удаляю строку, в которой я добавляю nginx.conf в том Nginx, он работает. Что я делаю не так?

Edit1:

http: // отсутствует. Но проксирование все еще не работает на подчиненных. Только местоположение / работает. Как мне запустить / hell1?

1 Ответ

0 голосов
/ 01 июля 2019

Обратите внимание на оператор proxy_pass. Вы должны упомянуть протокол в этом заявлении. Также обратите внимание, как вы можете ссылаться на имя службы в файле docker-compose.yml (в данном случае hello1).

events {

}

http {
    error_log /etc/nginx/error_log.log warn;
    client_max_body_size 20m;

    proxy_cache_path /etc/nginx/cache keys_zone=one:500m max_size=1000m;

    server {
       listen 80;
       location / {
          try_files $uri @proxy ;
       }

       location @proxy {
          proxy_pass http://hello1:80/;
       }
    }
}

Редактировать: Попробуйте вместо этого

events {

}

http {
    error_log /etc/nginx/error_log.log warn;
    client_max_body_size 20m;

    proxy_cache_path /etc/nginx/cache keys_zone=one:500m max_size=1000m;

    server {
      listen 80;
      location / {
          try_files $uri @proxy ;
      }

      location @proxy {
          if ($request_uri ~* "^\/hello1(\/.*)$") {
            set $url "http://hello1:80$1";
          }

          if ($request_uri ~* "^\/hello2(\/.*)$") {
            set $url "http://hello2:80$1";
          }

          proxy_pass "$url"
      }
    }
}
...