3 votes

Nginx proxy image/javascript hébergé en externe

J'essaie de proxyer un javascript et une image hébergés par une partie externe avec nginx.

Je fais tourner mon site en https et ils n'offrent les fichiers que par http, j'ai déjà eu des contacts avec eux à ce sujet mais ils ne peuvent pas donner de délai quand ils vont résoudre ce problème.

Donc non, j'essaie de proxy_pass ces fichiers dans ma configuration nginx j'ai les blocs d'emplacement suivants

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;
}

Le widget que je veux sur ma page est.

<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>

Je veux donc que la demande du client passe par mon serveur qui a https, ce qui fait que mon serveur demande le fichier au serveur externe et le renvoie au client. Actuellement, cela ne fonctionne pas encore, je vois la demande dans le journal d'accès qui montre également un code de statut 200, mais ni l'image ni le fichier javascript ne sont renvoyés. Quelqu'un peut-il m'aider à comprendre ce que je fais mal ?

2voto

HugoFS Points 313

Mapper un URL client comme :

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

vers une URL en amont comme :

http://widget.external-domain.tld/blogcounter/image?image=red_s&blog_id=random_id

ne nécessite pas de transformations magiques des URI, de sorte que le plus simple proxy_pass est tout ce qui est nécessaire :

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

Remarquez qu'il n'y a pas de queue / car l'URI de la demande est transmis en amont sans être modifié.

J'ai réglé l'emplacement sur /blogcounter car je ne sais pas quels autres emplacements (le cas échéant) votre serveur héberge.

Vous ne mentionnez pas l'URL amont pour blogcounter.js . Le bloc d'emplacement ci-dessus sera également cartographié :

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

à l'URL amont :

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

Voir ce document pour les détails.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X