Javascript 未发送静态css/图像文件(NGINX/Express)

Javascript 未发送静态css/图像文件(NGINX/Express),javascript,node.js,express,nginx,Javascript,Node.js,Express,Nginx,我有一个nginx服务器代理我的express应用程序(将ejs文件呈现为html),在尝试加载静态css/图像文件时,它从nginx抛出一个404。这在本地有效(我没有nginx) 文件 //这是将目录注册为静态目录的地方 应用程序使用(express.static(join(u dirname,“public”)); 下面是我的文件树结构 public/ style.css logo.png views/ index.ejs index.js Nginx配置

我有一个nginx服务器代理我的express应用程序(将ejs文件呈现为html),在尝试加载静态css/图像文件时,它从nginx抛出一个404。这在本地有效(我没有nginx)


文件
//这是将目录注册为静态目录的地方
应用程序使用(express.static(join(u dirname,“public”));
下面是我的文件树结构

public/
    style.css
    logo.png
views/
    index.ejs

index.js
Nginx配置的相关部分:

server {
  listen                               :443 ssl http2;
  listen                               [::]:443 ssl http2;
  server_name                          cygrind.xyz;

  # . files
  location ~ /\.(?!well-known) {
    deny all;
  }

  # logging
  access_log /var/log/nginx/cygrind.xyz.access.log;
  error_log  /var/log/nginx/cygrind.xyz.error.log warn;

  # index.php
  index      index.php;

  # reverse proxy
  location / {
    proxy_pass                         http://The IP was here:8080;
    proxy_http_version                 1.1;
    proxy_cache_bypass                 $http_upgrade;

    # Proxy headers
    proxy_set_header Upgrade           $http_upgrade;
    proxy_set_header Connection        "upgrade";
    proxy_set_header Host              $host;
    proxy_set_header X-Real-IP         $remote_addr;
    proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host  $host;
    proxy_set_header X-Forwarded-Port  $server_port;

    # Proxy timeouts
    proxy_connect_timeout              60s;
    proxy_send_timeout                 60s;
    proxy_read_timeout                 60s;
  }

  # favicon.ico
  location = /favicon.ico {
    log_not_found off;
    access_log    off;
  }

  # robots.txt
  location = /robots.txt {
    log_not_found off;
    access_log    off;
  }

  # assets, media
  location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
    expires    7d;
    access_log off;
  }

  # svg, fonts
  location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
    add_header Access-Control-Allow-Origin "*";
    expires    7d;
    access_log off;
  }
}
可以找到完整的nginx配置文件(请忽略任何关于大括号的语法错误)

如果需要,您可以找到查看dev控制台的站点


提前谢谢

确保您有以下命令:app.use(express.static('public'); 此外,请确保在主express文件中正确设置了视图引擎。 Express将查看应设置在项目根级别的“视图”文件夹。 对于您的问题,我假设它必须是Nginx配置文件。
请问您为什么使用nginx?对于简单nodejs应用程序的生产部署,我使用PM2运行应用程序并使用Docker进行容器化。

您的问题是,您有用于各种资产(css、favicon等)的位置块来关闭日志记录,但它们不做任何其他事情,请求到此结束,因此Nginx返回404。您可以通过查找
x-powered-by
标题(从您的Express应用程序中,它返回为
Express
;从样式、favicon等路线中,该响应标题不在那里)看到它甚至没有点击Express

位置块不能合并。(有关例外情况,请参阅“位置块评估何时跳转到其他位置?”一节。)


对于每个更具体的位置块,都需要添加相同的代理相关指令。您也可以在
位置/
下,这可能会减少一点复制粘贴,但是来自父位置块,因此您仍然会在那里有一些复制。

您可以发布Nginx配置吗?这似乎就是问题所在,如果在没有Nginx的情况下访问服务器时资产加载正常。是的,尝试访问该域时会超时。。。你能在你的问题中编辑它吗?非常抱歉,看起来这个网站一定是刚刚关闭了。无论如何,我现在已经用一个工作链接编辑了这个问题谢谢,我只是将与你的问题相关的部分复制到了问题中,因为这是一个相当长的问题。问题表明
express.static
使用正确,我使用nginx是因为在主机和cloudflare上都有一个签名的SSL证书比只保护cf和浏览器之间的流量要安全得多。关于nginx配置,我不确定出了什么问题,但我假设这与此有关,因为正如我所提到的,它在没有nginx的地方本地工作。作为旁注,配置文件中没有静态文件的根目录。应该有吗?如果是这样的话,我应该让它指向nodejs应用程序上的静态目录吗?我假设是的,但正如我所说的,我对nginx不是非常熟悉。我确实找到了一些可能有帮助的资源。