Minha configuração é a seguinte:
SO: CentOS 6.2 em execução em uma máquina virtual OpenVZ.
Servidor da Web: Nginx ouvindo na porta 8080
Proxy reverso: Varnish escutando na porta 80
O problema é que o Varnish redireciona meus pedidos para a porta 8080 e isso aparece na barra de endereços como http://mysite.com:8080/directory/
, fazendo com que os links relativos no site incluam o número da porta (8080) na solicitação e ignorem o Varnish.
O site é alimentado por WordPress.
Como faço para permitir que o Varnish use o Nginx como backend na porta 8080 sem anexar o número da porta ao endereço?
Editar: o verniz é configurado da seguinte forma:
Eu disse ao daemon Varnish para escutar a porta 80 por padrão.
VARNISH_VCL_CONF=/etc/varnish/default.vcl
#
# # Default address and port to bind to
# # Blank address means all IPv4 and IPv6 interfaces, otherwise specify
# # a host name, an IPv4 dotted quad, or an IPv6 address in brackets.
# VARNISH_LISTEN_ADDRESS=
VARNISH_LISTEN_PORT=80
#
# # Telnet admin interface listen address and port
VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
VARNISH_ADMIN_LISTEN_PORT=6082
#
# # Shared secret file for admin interface
VARNISH_SECRET_FILE=/etc/varnish/secret
#
# # The minimum number of worker threads to start
VARNISH_MIN_THREADS=1
#
# # The Maximum number of worker threads to start
VARNISH_MAX_THREADS=1000
#
# # Idle timeout for worker threads
VARNISH_THREAD_TIMEOUT=120
#
# # Cache file location
VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin
#
# # Cache file size: in bytes, optionally using k / M / G / T suffix,
# # or in percentage of available disk space using the % suffix.
VARNISH_STORAGE_SIZE=1G
#
# # Backend storage specification
VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"
#
# # Default TTL used when the backend does not specify one
VARNISH_TTL=120
O arquivo VCL que o Varnish chama (através de uma inclusão em default.vcl
) consiste em:
backend playwithbits {
.host = "127.0.0.1";
.port = "8080";
}
acl purge {
"127.0.0.1";
}
sub vcl_recv {
if (req.http.Host ~ "^(.*\.)?playwithbits\.com$") {
set req.backend = playwithbits;
set req.http.Host = regsub(req.http.Host, ":[0-9]+", "");
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
return(lookup);
}
if (req.url ~ "^/$") {
unset req.http.cookie;
}
}
}
sub vcl_hit {
if (req.http.Host ~ "^(.*\.)?playwithbits\.com$") {
if (req.request == "PURGE") {
set obj.ttl = 0s;
error 200 "Purged.";
}
}
}
sub vcl_miss {
if (req.http.Host ~ "^(.*\.)?playwithbits\.com$") {
if (req.request == "PURGE") {
error 404 "Not in cache.";
}
if (!(req.url ~ "wp-(login|admin)")) {
unset req.http.cookie;
}
if (req.url ~ "^/[^?]+.(jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)(\?.|)$") {
unset req.http.cookie;
set req.url = regsub(req.url, "\?.$", "");
}
if (req.url ~ "^/$") {
unset req.http.cookie;
}
}
}
sub vcl_fetch {
if (req.http.Host ~ "^(.*\.)?playwithbits\.com$") {
if (req.url ~ "^/$") {
unset beresp.http.set-cookie;
}
if (!(req.url ~ "wp-(login|admin)")) {
unset beresp.http.set-cookie;
}
}
}