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!