为什么使用 nginx 作为反向代理会破坏本地链接?

为什么使用 nginx 作为反向代理会破坏本地链接?

我刚刚将 nginx 设置为反向代理,因此一些从该框提供服务的站点直接由它提供服务,而其他站点则转发到 Node.js 服务器。

但是,由 Node.js 提供服务的站点没有显示 CSS 或图像,因此我认为链接不知何故被破坏了,但不知道原因。

以下是 /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;
    }
}

我曾以为也许它试图在 /var/www 中找到它们,因为有第一个条目,但删除它似乎没有帮助。

答案1

如果没有更多细节,这只是一个猜测,但在你的前端,你已经让你的node.js在可用/myNodeSite。如果你的node.js网站返回如下内容:

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

客户将请求/images/myimage.png...将不会直接转到您的 node.js 网站,因为它不是以 开头的/myNodeSite。有几种解决方案:

  • 让您的 node.js 应用程序知道您在前端使用的前缀,以便它们生成适当的链接。 总是通过某种考虑到这一点的函数生成链接,而不是静态编码链接。
  • 在前端实现某种重写功能。我不知道nginx,但对于 Apache 来说mod_proxy_html

您可能还能够/在 node.js 网站上使用专门的相对链接(无前导),但这意味着网站布局非常扁平并且很容易被破坏。

相关内容