Como especificar nome de domínio de pesquisa do resolvedor nginx para proxy_pass

3

Assumindo que meu servidor é www.mydomain.com , em Nginx 1.0.6

Estou tentando fazer o proxy de todas as solicitações para o link para outros hosts. O URL de destino é especificado como um parâmetro GET chamado " url ".

Por exemplo, quando o usuário solicita uma delas:

http://www.mydomain.com/fetch?url=http://another-server.mydomain.com/foo/bar

http://www.mydomain.com/fetch?url=http://another-server/foo/bar

deve ser procurado para

http://another-server.mydomain.com/foo/bar

Estou usando a seguinte configuração do nginx e ela funciona bem apenas se o parâmetro de URL contiver o nome do domínio, como link ... ; mas falha no link ... no erro:

another-server could not be resolved (3: Host not found)

nginx.conf é:

http {
...
# the DNS server
resolver 171.10.129.16;
server {
    listen       80;
    server_name  localhost;
    root /path/to/site/root;

    location = /fetch {            
        proxy_pass $arg_url;
    }
}

Aqui, eu gostaria de resolver todas as URLs sem nome de domínio como nome de host em meudominio.com , em /etc/resolv.conf, é possível especificar o nome de domínio de pesquisa padrão para o todo Sistema Linux, mas isso não afeta o resolvedor nginx:

search mydomain.com

É possível no Nginx? Ou, alternativamente, como "reescrever" o parâmetro url para que eu possa adicionar o nome de domínio?

    
por myjpa 18.01.2012 / 11:38

1 resposta

1

O nginx executa sua própria resolução de DNS e não usa a biblioteca libc, e é por isso que /etc/resolv.conf não tem efeito. Não consigo encontrar nenhuma opção para especificar um domínio de pesquisa, portanto, reescrever o URL é sua única opção. Algo como isso deve fazer o truque:

location /fetch {
    # Don't rewrite if we've already rewritten or the request already contains the full domain
    if ($arg_url !~ mydomain.com) {
        rewrite ^/fetch?url=http://([^/]+)(/?.*)$ /fetch?url=http://$1.mydomain.com$2;
    }
    proxy_pass $arg_url;
}
    
por 26.03.2012 / 05:57