Node.js Express js服务静态文件不适用于nginx

Node.js Express js服务静态文件不适用于nginx,node.js,express,nginx,Node.js,Express,Nginx,我很困惑,为什么我最新的web应用程序无法获取我包含的任何css或js文件。在我的本地机器上,这些文件可以正常运行,但是当我把它放在我的nginix前置服务器上时,我得到的是404。这是我的html文件 <!-- ANGULAR --> <script src="/bower_components/angular/angular.js"></script> <!-- ANGULAR BOOTSTRAP UI --> <script src=

我很困惑,为什么我最新的web应用程序无法获取我包含的任何css或js文件。在我的本地机器上,这些文件可以正常运行,但是当我把它放在我的nginix前置服务器上时,我得到的是404。这是我的html文件

<!-- ANGULAR -->
<script src="/bower_components/angular/angular.js"></script>

<!-- ANGULAR BOOTSTRAP UI -->
<script src="/bower_components/angular-bootstrap/ui-bootstrap.js"></script>

<!-- ANGULAR ROUTE-->
<script src="/bower_components/angular-route/angular-route.js"></script>

<!-- Bootstrap CSS -->
<link rel="stylesheet" type="text/css" href="./bower_components/bootstrap-css-only/css/bootstrap.css">

<!-- ANGULAR APP SETUP -->
<script src="/js/app.js"></script>
<script src="/js/controllers.js"></script>

<!-- Custom styles -->
<link rel="stylesheet" type="text/css" href="/css/styles.css">
我所有的js/css/bower_组件都在公共目录下。我唯一能想到的问题是nginx我有这个

location /DI_Uploader/ {

    proxy_ignore_client_abort on;
    proxy_pass http://webserverName:8002;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
}
托管版本与我的本地版本的唯一不同之处在于,我要访问的是托管版本,而不是根website.com。任何方向都是有帮助的,因为我还是express的新手

编辑:删除html前面的句点包括

我不知道如何把它放在评论中,但这是web服务器上的文件夹结构

- DI_Uploader
    - node_modules
    - public
        - bower_components
        - css
        - js
        index.html
    server.js
    package.json

多亏了@jfriend00,我才发现我无法加载静态内容的原因是,当我在嵌套的/DI_Uploader/文件夹中确实需要静态内容时,我在网站的根目录上设置了静态内容。要解决这个问题,您可以使用虚拟路径来欺骗它

代码更改为

app.use('/DI_Uploader',express.static(path.join(__dirname, '/public')));

为什么要用
/
启动网页中的资源路径?这使得浏览器相对于网页的路径来解释它们,而网页的路径几乎从来都不是您想要的。客户端路径通常应该以
/
开头。现在我看到托管版本使所有路径都以
开头http://website.com/DI_Uploader/
,那么我前面的评论可以解释您的整个问题。这意味着浏览器中对
/css/styles.css
的请求将作为对
/DI_Uploader/css/styles.css
的请求到达您的服务器,而这不是您设置的目的。@jfriend00老实说,我一直都是这样做的,到目前为止,这对我来说是行之有效的。我已经纠正了这一点,但仍在解释这个问题。我也会用这个更新这个问题。@jfriend00我想这也让我能够从DI_Uploader中获取静态内容。文件夹结构是DI_Uploader,然后是public,然后是html、css、js。当我删除./I现在请求的是website.com/css,而不是website.com/DI_Uploader/css,我认为这也不正确。但是,您将
express.static()
直接指向
public
,所以在磁盘层次结构中,上面是什么并不重要,对吗?当您的客户端请求
/js/app.js
时,该文件在硬盘上的具体位置?它是不是公开的/js/app.js?其中
public
path.join(\uu dirname,/public')
?那么您希望
/DI\u Uploader/
位于请求的URL中吗?非常混乱。@jfriend00我需要url中的DI_上传程序,以便nginx将其拾取并将其定向到正确的节点js express实例。该服务器还承载另外两个Web服务器,即另一个express实例和一个tomcat实例。我们正在尝试不必为正确的端口创建另一个dns记录/VIP。我们这样做只是为了不必在这里等待网络团队。TLDR:Yes我能够重定向到express中的正确路径,并将html文件(app.use(./dev',…)发送到服务器,但是公共目录中的样式表仍然无法加载
app.use('/DI_Uploader',express.static(path.join(__dirname, '/public')));