Por que usar o nginx como um proxy reverso quebra os links locais?

2

Acabei de configurar o nginx como um proxy reverso, portanto, alguns sites servidos da caixa são exibidos diretamente por ele e outros são encaminhados para um servidor Node.js.

O site que está sendo servido por Node.js, no entanto, é exibido sem CSS ou imagens, então eu suponho que os links estão de alguma forma sendo quebrados, mas não sei por quê.

O seguinte é o único arquivo em / etc / nginx / sites-enabled:

server {

    listen   80; ## listen for ipv4
    listen   [::]:80 default ipv6only=on; ## listen for ipv6

    server_name  dev.my.site;

    access_log  /var/log/nginx/localhost.access.log;

    location / {
            root   /var/www;
            index  index.html index.htm;
    }

    location /myNodeSite {
            proxy_pass http://127.0.0.1:8080/;
            proxy_redirect off;
            proxy_set_header Host $host;
    }
}

Eu pensei que talvez estivesse tentando encontrá-los em / var / www devido à primeira entrada, mas remover isso não parece ajudar.

    
por tsvallender 14.03.2012 / 15:01

1 resposta

5

Sem mais detalhes, isso é apenas um palpite, mas em seu frontend você disponibilizou seu node.js em /myNodeSite . Se o seu site node.js retornar algo assim:

<img src="/images/myimage.png"/>

O cliente solicitará /images/myimage.png ... que não será direcionado para o seu site node.js, já que ele não inicia com /myNodeSite . Existem algumas soluções:

  • Torne seus aplicativos node.js cientes do prefixo que você está usando no frontend para que eles gerem links apropriados. Sempre gere links por meio de algum tipo de função que leva isso em consideração, em vez de codificar estaticamente os links.
  • Implemente algum recurso de reescrita no frontend. Eu não sei nginx , mas para o Apache há mod_proxy_html .

Você também pode usar links exclusivamente relativos (sem liderança / ) em seu site node.js, mas isso implica em um layout de site muito plano e é fácil de quebrar.

    
por 14.03.2012 / 15:21