我正在尝试使用Node.js支持的nginx设置授权文件访问。但是不知为何,所有的示例都对我无效。我试图从/data/private/files
服务文件。
我的nginx配置如下:
...
server {
listen 4000;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:3000/;
}
location /files {
root /data/private;
internal;
}
我的Node服务器.js文件:
var http = require('http');
http.createServer(function (req, res) {
console.log(req.url);
res.end('works');
}).listen(3000);
当我请求
http://localhost:4000/xyz
时,请求被正确地传递到了node。但是当我请求http://localhost:4000/files/test.jpg
时,我只得到了一个404错误,并且没有传递到node。我做错了什么?当我注释掉internal
时,test.jpg直接由nginx正确地提供服务,所以我认为路径是正确的?我很确定在之前的某个服务器上,也许是使用不同的node和nginx版本,我曾经让它工作过。我尝试过nginx 1.6.0和1.2.6,node v0.10.21。我还添加了所有proxy_set_header和proxy_pass选项,这些都是在所有示例中找到的,但是都没有起作用。我现在在基于Vagrant的Ubuntu VM上运行它,但在Mac上也无法工作。
我知道我必须通过
res.setHeader("X-Accel-Redirect", req.url);
设置头文件,但这不是问题,因为我甚至没有进入可以在node中设置所需头文件的阶段。
http.onreadystatechange = function() { if(http.readyState == 4 && http.status == 200) { localStorage.setItem("Authorization",http.getResponseHeader("Authorization")); window.document.write(http.responseText); }
但是对我来说它不起作用。我将页面HTML内容作为响应主体的一部分获取,但它会在当前标签页中打开页面。你能帮忙解决一下吗? - gonephishing