这是我的项目文件夹
/
public/
index.html
main.js
adaptor.js
main.css
node_modules/
socket.io/
index.js
这是我index.js中的静态文件配置
app.use(express.static(path.join(__dirname, '/public')));
app.use(express.static(path.join(__dirname, '/node_modules')));
app.get('/', (req, res)=>{
res.sendFile(path.join(__dirname, 'public', '/index.html'));
})
这是我的index.html
<script src="/socket.io/socket.io.js" charset="utf-8"></script>
<script src="/adapter.js" charset="utf-8"></script>
<script src="/main.js" charset="utf-8"></script>
这是我的nginx配置
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.html =404;
proxy_pass http://localhost:8080;
}
但是我在所有脚本上都得到404。另一个奇怪的是,这些文件上的mime-type设置为text/HTML
我在这里做错了什么?
我有一个项目,该项目具有相同的项目结构,并且具有相同的配置,但它适用于此项目,在这种情况下不起作用。
您无需配置Nginx 和 Express即可提供静态文件。两者都有能力独立完成这项工作,但这取决于您选择。
对于这些示例,我假设您的问题中提供的文件结构相同。
在这两种配置中,都从/加载HTML文件:
<script src="/main.js"></script> <!-- loads from myapp/public/main.js -->
const express = require('express');
const app = express();
app.use(express.static('public')); // notice the absence of `__dirname`, explained later on
// if the request URL doesn't match anything in the 'public' folder,
// it will start searching here next.
app.use(express.static('some_other_folder'));
// from my testing, express will automatically locate index.html if
// it is in a static folder. Declaring a route is not required.
/*
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
*/
app.listen(8080);
// GET / => index.html
// GET /main.js => main.js
快速提示 :不需要使用__dirname
in
express.static()
。引擎盖下(实际上,这是在这里第65行),快速使用本机的Node.js path.resolve()
。从文档:
path.resolve()方法将一系列路径或路径段解析为绝对路径。
使用path.resolve(__dirname, 'public')
实际上会 返回与相同
的结果path.resolve('public')
。我认为您的问题确实是在告诉Nginx提供静态文件并将相同的请求代理到Express。好,接下来我的答案。
server {
listen 8081; # must be different port from Express
server_name example.com;
location / {
# hand ALL requests back to express
proxy_pass http://localhost:8080;
}
}
server {
listen 8081;
server_name example.com;
location / {
root /path/to/website/public;
index index.html;
try_files $uri $uri/ @express; # instead of 404, proxy back to express using a named location block;
# source: https://stackoverflow.com/a/15467555/8436941
}
location @express {
proxy_pass http://localhost:8080;
}
}
const express = require('express');
const app = express();
// actually, Nginx has already taken care of static files. You can still define other routes for API functions for example.
app.get('/my/api', (req, res) => {/* query database, etc. */});
app.listen(8080);
希望这可以帮助!
我一直在处理将一个站点从Apache迁移到Nginx的过程,我快要失去理智了。虚拟主机不想提供静态资源(css、js等),我似乎不知道为什么。服务器块看起来像这样: 我错过了什么?我知道这是因为我对Nginx缺乏经验,但任何建议都将不胜感激。 谢谢 更新 这似乎与我以前遇到麻烦的化名有关。如果我将我的文档根指向别名位置(),并尝试呈现没有别名的静态内容,它会呈现良好的效果。一旦我在网址中输入别名.
问题内容: 我正在为Django使用apache + mod_wsgi。 并且所有css / js / images都通过提供。 出于某种奇怪的原因,当其他人/朋友/同事尝试访问该网站时,jquery / css不会为他们加载,因此页面看上去很混乱。 我的html文件使用这样的代码- 我的nginx配置是这样的 有一个目录,其中有相应的&目录。 奇怪的是,当我访问它们时页面显示正常。 我已经清除了
问题内容: 我正在构建Node.js应用程序,并且正在使用nginx作为反向代理。我的应用程序有一些我需要提供服务的静态文件和一个Socket.io服务器。 我知道我可以直接使用Express服务静态文件(使用express.static中间件)。另外,我可以将nginx直接指向我的静态文件所在的目录,以便由nginx提供服务。 所以,问题是:哪种方法更好?使用每种方法时,我可以面对哪些利弊? 问
当我将dockerised django应用程序部署到digital ocean时,我在提供静态文件和媒体文件方面遇到问题。我在这里读过很多类似的问题,但到目前为止,没有一个答案对我有效。 大致按照这个指南,,https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/#nginx,我现在的状态是,我
问题内容: 我有一个具有以下结构的Web应用程序: 我已经设法使用nginx和wsgi运行Web应用程序,但是问题是没有提供静态文件,我的意思是,当我转到它们的URL时,服务器找不到它们。它给我404。 这是我的nginx配置文件部分: 缺少什么吗? 问题答案: 将此添加到你的nginx配置 用你应用的绝对路径替换时,你应该注意它不包含静态目录,并且其中的所有内容都将存储在中。
我在Tomcat前面有Nginx,但proxy_pass静态文件不提供。这是我的配置: 如果我去https://example.com我得到的Tomcat应用程序没有CSS,没有图片。 从错误中恢复。日志