使用nginx配置多个Nodejs项目,静态文件404错误,求大神支招解决Nodejs问题
使用nginx配置多个Nodejs项目,静态文件404错误,求大神支招解决Nodejs问题
nginx配置应该怎么写 location /xxx{ root /home/aaa/xxx; proxy_pass http://127.0.0.1:8001; }
location /yyy{ root /home/aaa/yyy; proxy_pass http://127.0.0.1:8002 }
怎么取不到public里面的css等文件?
比如 http://121.14.58.212/2014 这个站点, 后台跳转到了 http://121.14.58.212:8001/ http://121.14.58.212/2014 这个站点的 css文件404 错误了 。。
怎么办啊,急求解决
针对您描述的问题,Nginx 配置需要确保正确地处理静态文件请求。以下是修正后的 Nginx 配置示例:
Nginx 配置示例
server {
listen 80;
server_name your_domain.com;
location /xxx {
# 指定静态文件根目录
root /home/aaa/xxx;
# 处理静态文件请求
try_files $uri $uri/ @node_xxx;
}
location @node_xxx {
proxy_pass http://127.0.0.1:8001;
}
location /yyy {
root /home/aaa/yyy;
try_files $uri $uri/ @node_yyy;
}
location @node_yyy {
proxy_pass http://127.0.0.1:8002;
}
}
解释
-
try_files $uri $uri/ @node_xxx;
:- 这行代码的作用是首先尝试直接提供静态文件。
$uri
表示当前请求的 URI 路径。$uri/
表示请求的是一个目录,并尝试返回该目录下的默认文件(如index.html
)。- 如果上述两个条件都不满足,则将请求转发到名为
@node_xxx
的内部位置。
-
@node_xxx
和@node_yyy
:- 这些是内部位置,用于将请求代理到 Node.js 应用程序。
proxy_pass
指令用于将请求传递给指定的后端服务器。
示例解释
假设 /home/aaa/xxx
目录下有一个 public
文件夹,其中包含 CSS 文件。Nginx 将首先尝试直接从 /home/aaa/xxx/public
提供这些文件。如果找不到相应的文件,它会将请求转发到 Node.js 应用程序。
Node.js 应用程序配置
确保您的 Node.js 应用程序正确处理了静态文件路径。例如,如果您使用 Express 框架,可以这样配置:
const express = require('express');
const app = express();
// 静态文件中间件
app.use('/xxx', express.static('/home/aaa/xxx/public'));
// 其他路由
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(8001, () => {
console.log('Server is running on port 8001');
});
通过以上配置,Nginx 和 Node.js 应用程序应该能够正确处理静态文件请求,并避免 404 错误。希望这能帮助您解决问题!
/2014 这个 path 破坏了楼主的 css 文件绝对路径
这是nginx配置的问题, 无论你用node, 还是php, rails 都会遇到这个问题.
如果配置的 nginx 是以 /xxx 为前缀区分应用的, 那么在 应用的代码里面, 资源根目录也必须以 /xxx 代替, 而不是默认的 /
使用express框架的项目,访问路径都是 以 ‘/’ 开头, 导致所有静态资源的请求都是以’/’ 开头 怎么给项目加上前缀 /xxx ,如果能加上/xxx 这个问题就解决了。
问题解决了。 我使用的express框架, 查阅express API 发现, 加上这样一行代码 就搞定了。 app.enable(‘trust proxy’); trust proxy 默认为 disable的
代码中 这样请求 <link rel=‘stylesheet’ href=‘stylesheets/style.css’ /> 实际会转换为 2014/stylesheets/style.css
根据你的描述,你想要通过Nginx配置多个Node.js项目,并且确保静态文件(如CSS、JS等)能够正确访问。问题可能出在Nginx配置中root
指令和location
块的设置上。
Nginx配置示例
为了正确处理静态文件,你需要确保Nginx可以找到这些文件。以下是改进后的Nginx配置示例:
server {
listen 80;
server_name yourdomain.com;
location /xxx {
alias /home/aaa/xxx/public; # 注意使用alias而不是root
try_files $uri $uri/ [@node_1](/user/node_1);
}
location /yyy {
alias /home/aaa/yyy/public; # 注意使用alias而不是root
try_files $uri $uri/ [@node_2](/user/node_2);
}
location [@node_1](/user/node_1) {
proxy_pass http://127.0.0.1:8001;
}
location [@node_2](/user/node_2) {
proxy_pass http://127.0.0.1:8002;
}
}
解释
- alias vs root: 当使用
alias
时,Nginx会将请求路径直接映射到指定目录下,这样可以确保静态文件被正确访问。 - try_files: 使用
try_files
确保首先尝试直接访问文件或目录,如果找不到,则转向后端Node.js服务。 - @node_1 和 @node_2: 使用内部位置(
@
)来代理请求到对应的Node.js应用。
确保Node.js应用正确配置
确保你的Node.js应用能够处理所有未匹配到静态文件的请求。例如,如果你使用Express框架,你可以这样做:
app.use(express.static('public')); // 设置静态文件目录为public
// 处理其他路由
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname + '/public/index.html'));
});
通过以上配置,你应该能够解决静态文件的404错误。