Nodejs中nginx反向代理和合并文件同时使用问题
Nodejs中nginx反向代理和合并文件同时使用问题
环境:OS X,
nginx-http-concat 个 nginx proxy_pass 同时开启时 配置如下: server { listen 8080; server_name localhost; autoindex on;
location / {
root /Project;
index *;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
proxy_set_header Connection "";
proxy_pass http://0.0.0.0:3000;
}
location /lib/ {
concat on;
concat_max_files 20;
}
}
使用expree后,127.0.0.1:3000/lib/下的js文件都提示404,将concat配置放到第一个location里面,合并还是无效 求教使用心得
纯静态文件, 直接使用 nginx, 不用 node 呢/
求教下怎么部署,express设置了public,jade引用的都在public里
你都没有配置nginx root根目录啊,怎么找的到呢?
这样设置不会 出现404了,但是合并功能还是无效 server { listen 8080; server_name localhost; autoindex on; root /Project; #charset koi8-r;
#access_log logs/host.access.log main;
location / {
index *;
#concat on;
#concat_max_files 20;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
proxy_set_header Connection "";
proxy_pass http://0.0.0.0:3000;
}
location /xxx/lib/{
concat on;
concat_max_files 20;
}
}
项目文件路径是 /Project/xxx 要合并的js文件是/Project/xxx/lib/*.js
在你的配置中,proxy_pass
将所有请求代理到本地的 http://0.0.0.0:3000
,这意味着 /lib/
路径下的请求也会被代理到 Node.js 应用。由于这些请求被代理了,Nginx 的 concat
模块无法处理这些请求,因此返回 404 错误。
为了解决这个问题,你需要确保 Nginx 在处理静态文件之前先进行代理,然后再处理静态文件。你可以通过调整 Nginx 配置来实现这一点:
server {
listen 8080;
server_name localhost;
autoindex on;
location / {
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
proxy_set_header Connection "";
proxy_pass http://0.0.0.0:3000;
}
location /lib/ {
alias /Project/lib/;
concat on;
concat_max_files 20;
}
}
在这个配置中:
alias /Project/lib/;
指定了静态文件的路径。- 确保
/lib/
路径下的请求不会被代理到 Node.js 应用,而是直接从 Nginx 提供静态文件。 concat
和concat_max_files
配置用于合并文件。
另外,在你的 Node.js 应用中,确保 /lib/
路径下的静态资源可以正确提供。例如,如果你使用 Express.js,可以这样配置:
const express = require('express');
const path = require('path');
const app = express();
// 其他中间件和路由...
app.use('/lib', express.static(path.join(__dirname, 'Project', 'lib')));
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
这段代码会将 /lib
路径下的请求映射到 Project/lib
目录,并提供静态文件。这样,当 Nginx 不代理这些请求时,Node.js 应用可以正确地提供这些静态文件。