Como configurar o squid para atuar como host virtual para imagens docker

Como configurar o squid para atuar como host virtual para imagens docker

Eu tenho um servidor que está executando várias imagens do Docker (que basicamente hospedam vários sites)

todos eles têm nomes de domínio diferentes, todos apontando para o IP do servidor

(digamos que o IP do servidor seja 111.222.333.444)

(e meus domínios são www.one.com, www.two.com, www.três.com)

No momento, todas as imagens do Docker exportam a porta 80 para o servidor em uma porta diferente:

  • www.one.com é a porta 5080
  • www.two.com é a porta 5180
  • www.três.com é a porta 5280

Então, se eu visitar o URL:port, o site aparecerá.

Mas quero usar um host virtual para poder visitar a porta 80 em cada URL e apenas redirecionar para a porta relevante.

Eu sei como fazer isso com o Apache e provavelmente conseguiria descobrir com o nginx.

Mas ouvi dizer que é para isso que serve o squid (além do Apache, como host virtual, parece muito pesado)

Eu instalei o squid3 no meu servidor ubuntu12.04

e este é o meu squid.conf até agora

http_port 80 accel defaultsite=www.one.com no-vhost
cache_peer 127.0.0.1 parent 5080 0 no-query originserver name=YourAccelNameHere
acl your_site_acl dstdomain www.one.com
http_access allow your_site_acl
cache_peer_access YourAccelNameHere allow your_site_acl
cache_peer_access YourAccelNameHere deny all

Ao ler um tutorial que "deveria" encaminhar www.one.com para a porta 5080 no host local (mas não é)

Eu realmente não tenho ideia sobre o squid e, de todas as minhas pesquisas no Google, não consigo encontrar um tutorial simples para fazer o que quero.

Alguém pode me indicar um bom tutorial ou, melhor ainda, me fornecer um squid.conf que faria o que procuro?

Obrigado

Responder1

Eu mesmo respondi

Minha solução é:

resolvi com verniz

apt-get install varnish

Então eu configurei meu

/etc/default/varnish

para

START=yes
NFILES=131072
MEMLOCK=82000
DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

Então defina meu

/etc/varnish/default.vcl

para

backend default {
    .host = "127.0.0.1";
    .port = "80";
}

backend one_website {
    .host = "127.0.0.1";
    .port = "5080";
}

backend two_website {
    .host = "127.0.0.1";
    .port = "5180";
}

## Multiple virtual host
sub vcl_recv {
 if (req.http.host ~ "^www.default.com(:[0-9]+)?$") {
    set req.backend = default;
 } else if (req.http.host ~ "^www.one.com(:[0-9]+)?$") {
    set req.backend = one_website;
 } else if (req.http.host ~ "^www.two.com(:[0-9]+)?$") {
    set req.backend = two_website;
 }
}

## Fetch
sub vcl_fetch {
        ## Remove the X-Forwarded-For header if it exists.
        remove req.http.X-Forwarded-For;

        ## insert the client IP address as X-Forwarded-For. This is the normal IP address of the user.
        set    req.http.X-Forwarded-For = req.http.rlnclientipaddr;
        ## Added security, the "w00tw00t" attacks are pretty annoying so lets block it before it reaches our webserver
        if (req.url ~ "^/w00tw00t") {
                error 403 "Not permitted";
        }
                ## Deliver the content
        return(deliver);
}

## Deliver
sub vcl_deliver {
        ## We'll be hiding some headers added by Varnish. We want to make sure people are not seeing we're using Varnish.
        ## Since we're not caching (yet), why bother telling people we use it?
        remove resp.http.X-Varnish;
        remove resp.http.Via;
        remove resp.http.Age;

        ## We'd like to hide the X-Powered-By headers. Nobody has to know we can run PHP and have version xyz of it.
        remove resp.http.X-Powered-By;
}

Espero que isso possa ajudar alguém a enfrentar esse problema!

informação relacionada