为什么使用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中find它们,但是删除它似乎没有帮助。

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

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

客户端将请求/images/myimage.png …这将不会被引导到您的node.js站点,因为它不以/myNodeSite开始。 有几个解决scheme:

  • 使您的node.js应用程序知道您在前端使用的前缀,以便它们生成适当的链接。 总是通过某种function来生成链接,而不是静态编码链接。
  • 在前端实现某种重写function。 我不知道nginx ,但是Apache有mod_proxy_html 。

你也许可以在你的node.js站点上完全使用相对的链接(没有前导/ ),但这意味着一个非常平坦的站点布局,很容易被打破。