nginx proxy_pass com docker 1.12 e swarm

1

Estou tentando configurar um enxame docker com várias redes, para que eu possa executar um conjunto de serviços (em versões diferentes) em redes diferentes no swarm. Eu também quero acessar esses serviços fora do swarm, mas não quero lutar por portas toda vez que eu inicio um novo serviço

Para lidar com isso, estou tentando configurar um proxy usando o nginx, para que eu possa apontar o link para o meu etcd -viewer rodando no link na rede de sobreposição do teste de descanso ; tudo no enxame. Isso está me dando uma dor de cabeça a partir de agora!

Ao acessar http: // service-v1.swarm-master / config /, encontrei uma página 404:

HTTP ERROR 404
Problem accessing /config/. Reason:
Not Found
Powered by Jetty://

De dentro do meu container nginx, certifiquei-me de que, de fato, posso alcançar os serviços que estou tentando acessar fazendo ping -c1 etcd-viewer e ping -c1 etcd-viewer.rest-test . Há acesso a ambos dentro do contêiner nginx em execução.

Então por que meu nginx.conf não parece funcionar? Está montado em /etc/nginx/conf.d/ .

resolver 127.0.0.11;

upstream config {
  server etcd-viewer.rest-test:8080;
}

log_format compression '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $request_body ($body_bytes_sent) '
                           '"$http_referer" "$http_user_agent" "$gzip_ratio"';

server {
  listen 80;
  #server_name docker.cdrator.com;

  access_log /var/log/nginx/access.log compression;

  # disable any limits to avoid HTTP 413 for large image uploads
  client_max_body_size 0;

  # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
  chunked_transfer_encoding on;

  location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

  location /config/ {
    proxy_pass                          http://config;
    proxy_set_header  Host              $http_host;   # required for docker client's sake
    proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_read_timeout                  900;
  }

  location /basic_status {
      stub_status;
  }
}
    
por Tue Dissing 23.11.2016 / 10:14

1 resposta

0

Fiz uma pequena alteração na configuração e decidi substituir o nginx.conf principal. Isso não é limpo, mas funciona por enquanto.

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;


    upstream config {
      server etcd-viewer.rest-test:8080;
    }

    server {
      listen 80;

      location /etcd {
        proxy_set_header  Host              $http_host;   # required for docker client's sake
        proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
        proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto $scheme;
        proxy_read_timeout                  900;

        proxy_pass                          http://config;
      }

      location /basic_status {
          stub_status;
      }
    }

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


}
    
por 23.11.2016 / 13:32