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

tsv*_*der 2 nginx reverse-proxy node.js

我刚刚将 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我原以为它可能是因为第一次进入而试图在 /var/www 中找到它们,但删除它似乎没有帮助。

lar*_*sks 5

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

<img src="/images/myimage.png"/>
Run Code Online (Sandbox Code Playgroud)

客户端将请求/images/myimage.png...不会被定向到您的 node.js 站点,因为它不是以/myNodeSite. 有几种解决方案:

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

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