我刚刚将 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 网站上使用专门的相对链接(无前导),但这意味着网站布局非常扁平并且很容易被破坏。