Imagem do proxy Nginx / javascript hospedado externamente

3

Estou tentando fazer proxy de um javascript e imagem hospedada por uma parte externa com nginx

Estou executando meu site em https e eles oferecem apenas os arquivos por meio de http, eu já tive contato com eles sobre isso, mas não posso dar a linha do tempo quando eles forem resolvidos.

Então, não, eu estou tentando proxy_pass esses arquivos na minha configuração nginx Eu tenho os seguintes blocos de localização

location /blogcounter/image {
        #rewrite ^/blogcounter(.*) /$1 break;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://widget.external-domain.tld/$uri$is_args?$args;
}
location /blogcounter.js {
        #rewrite ^/blogcounter(.*) /$1 break;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://widget.external-domain.tld/$uri$is_args?$args;
}

O widget que eu quero na minha página é.

<a title="external-domain.tld" href="http://external-domain.tld/" id="hr-random_id" target="_parent">
    <img src="https://my-domain.tld/blogcounter/image?image=red_s&blog_id=random_id"alt="alt-text" border="0">
</a>
<script type="text/javascript"> 
    var hr_currentTime = new Date(); 
    var hr_timestamp = Date.parse(hr_currentTime.getMonth() + 1 + "/" + hr_currentTime.getDate() + "/" + hr_currentTime.getFullYear()) / 1000;
    document.write('<script type="text/javascript" src="https://my-domain.tld/blogcounter.js?blog_id=random_id&timestamp='+hr_timestamp+'"></script>'); 
</script>

Então, eu quero que a solicitação do cliente passe pelo meu servidor, que tem https, o que faz com que o meu servidor solicite o arquivo do servidor externo e o envie de volta ao cliente. Atualmente, isso não está funcionando ainda, é ver a solicitação no log de acesso, que também mostra um código de status 200, mas nem a imagem ou o arquivo javascript são enviados de volta. Alguém pode ajudar com o que estou fazendo errado?

    
por Aegis 22.12.2015 / 20:56

1 resposta

2

Mapeamento de um URL de cliente como:

https://my-domain.tld/blogcounter/image?image=red_s&blog_id=random_id

para um URL upstream como:

http://widget.external-domain.tld/blogcounter/image?image=red_s&blog_id=random_‌​id

não requer transformações de URI mágicas, por isso, o formulário proxy_pass mais simples é tudo o que é necessário:

location /blogcounter {
    proxy_pass http://widget.external-domain.tld;
    proxy_set_header ...;
    ...
}

Observe que não há% / à direita quando a URI da solicitação é passada para atualização sem modificação.

Eu defini o local como /blogcounter , pois não sei quais outros locais (se algum) seu servidor hospeda.

Você não menciona o URL upstream de blogcounter.js . O bloco de localização acima também mapeará:

https://my-domain.tld/blogcounter.js

para o URL do upstream:

http://widget.external-domain.tld/blogcounter.js

Veja este documento para detalhes.

    
por 23.12.2015 / 12:14