Javascript 未发送静态css/图像文件(NGINX/Express)
我有一个nginx服务器代理我的express应用程序(将ejs文件呈现为html),在尝试加载静态css/图像文件时,它从nginx抛出一个404。这在本地有效(我没有nginx)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配置
文件
//这是将目录注册为静态目录的地方
应用程序使用(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不是非常熟悉。我确实找到了一些可能有帮助的资源。