Número da porta sendo adicionado ao WordPress admin após a instalação do Varnish

2

Eu adicionei o Varnish na frente do nginx. Quando tento acessar o WordPress, vou para domain.com/wp-admin, mas agora sou redirecionado para domain.com:8080/wp-admin. Eu posso remover manualmente a porta e as funções do lado do administrador do jeito que deveria.

Configuração do meu verniz:

backend origin {
    .host = "localhost";
    .port = "8080";
    .connect_timeout = 60s;
    .first_byte_timeout = 60s;
    .between_bytes_timeout = 60s;
}
acl purge {
    "localhost";
}
sub vcl_recv {
    set req.backend = origin;
    set req.http.X-Forwarded-For = client.ip;
    if(req.url ~ "^/wp-(login|admin)" || req.http.Cookie ~ "wordpress_logged_in_") {
        return (pass);
    }
    if(req.url ~ "/xmlrpc.php") {
        return(pass);
    }
    if( req.url ~ "\?s=" ){
        return (pass);
    }
    if (req.request == "BAN") {
        if(!client.ip ~ purge) {
            error 405 "Not allowed.";
        }
        ban("req.url ~ "+req.url+" && req.http.host == "+req.http.host);
        error 200 "Banned.";
    }
    if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE") {
        return (pipe);
    }
    if (req.request != "GET" && req.request != "HEAD") {
        return (pass);
    }
    unset req.http.Cookie;
    return (lookup);
}
sub vcl_hit {
    if (req.request == "PURGE") { purge; }
    return (deliver);
}
sub vcl_miss {
    if (req.request == "PURGE") { purge; }
    return (fetch);
}
sub vcl_fetch {
    unset beresp.http.Server;
    unset beresp.http.X-Powered-By;
    if (beresp.status == 404) {
        set beresp.ttl = 0m;
    return(hit_for_pass);
    }
    if( beresp.http.Set-Cookie && req.url !~ "^/wp-(login|admin)" ){
        unset beresp.http.Set-Cookie;
    }
    if ( req.request == "POST" || req.http.Authorization ) {
        return (hit_for_pass);
    }
    if ( beresp.status != 200 ) {
        return (hit_for_pass);
    }
    if( req.url ~ "\?s=" ){
        return (hit_for_pass);
    }
    set beresp.ttl = 5m;
    return (deliver);
}
sub vcl_deliver {
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT";
    } else {
        set resp.http.X-Cache = "MISS";
    }
    unset resp.http.Via;
    unset resp.http.X-Varnish;
}
sub vcl_error {
    if (obj.status == 503 && req.restarts < 2) {
        set obj.http.X-Restarts = req.restarts;
        return(restart);
    }
    if (obj.status == 301) {
        set obj.http.Location = req.url;
        set obj.status = 301;
        return(deliver);
    }
    if (obj.status == 750) {
        set obj.http.Location = obj.response;
        set obj.status = 302;
        return (deliver);
    }
}
    
por kel 28.03.2013 / 03:51

3 respostas

6

Acho errado que o redirecionamento só acrescente a porta, sem também adicionar uma barra ao final da URL.

Depois de pegar esse problema, fica bastante claro que isso é um redirecionamento interno feito pelo nginx quando ele encontra um diretório sendo acessado sem uma barra final.

Você usaria o link para impedir que a porta fosse anexada:

port_in_redirect off;

Esta solução funcionará muito bem, contanto que você não dependa de tais redirecionamentos ao tentar acessar o nginx diretamente na porta 8080 e desde que os nomes Host correspondam entre verniz e nginx.

    
por 28.03.2013 / 19:13
1

Não tenho certeza do que toda essa conversa sobre o autor "mentir", já que mentir é, "fazer uma afirmação falsa com a intenção de enganar". O autor claramente não pretende enganar os usuários, mas simplesmente não percebeu que estava trabalhando com uma barra e, em última análise, a pessoa só quer saber como fazê-lo funcionar sem uma barra invertida.

Para resolver isso, eu recomendaria adicionar o seguinte ao seu bloco de servidor nginx:

rewrite /wp-admin$ $scheme://$host$uri/ permanent;

Isto foi quando você vai para example.com/wp-admin ele irá para example.com/wp-admin ao invés de ir para example.com:8080/wp-admin/ e se você estiver no CloudFlare DNS por exemplo vai dizer que o site está em baixo.

Estou usando o Ubuntu, o Nginx e o Varnish, e isso funciona perfeitamente agora, em vez de desativar o port_in_redirect.

Para adicionar, certifique-se de reiniciar o nginx depois:

sudo service nginx restart
    
por 01.02.2014 / 18:07
0

Em "Configurações - > Geral", defina "Endereço do WordPress (URL)" para " link "

Atualização: descobri que essa solução realmente funciona apenas nos cenários mais básicos. Qualquer tipo de cache ou plugin CDN que olhe para esta variável irá adicionar o ': 80' - causando todos os tipos de problemas funky. No final, eu simplesmente fiz o meu cliente apontar para '/wp-login.php'. ;)

    
por 24.06.2013 / 12:48