nodejs http.createServer读取url并删除urlprefix

时间:2018-11-22 03:34:45

标签: node.js nginx reverse-proxy

这就是我想要的:

  

我有一个网址“ 10.0.0.1/0000000/abctest/文件目录/文件名”,

     

并使用此网址,我可以相应地读取文件

因此,我创建一个带有“ http.createServer”的服务器并绑定到8001端口,并设置nginx使其每当读取/ 0000000 / abctest /时,它将重定向到端口8001

添加nginx反向代理后,我尝试编写服务器代码,这是我的http服务器代码

var port = 8001;
var http = require('http');
var fs = require('fs');

var DefaultFileDir = '/home/ubuntu/Server/Proj/static'; 
var UrlPrefix = "/0000000/abctest"
var hostname = "127.0.0.1"

//var host = hostname+UrlPrefix
var server= http.createServer(function(req,res){
    var url = req.url; 
    console.log(url);
    var file = DefaultFileDir + url;

    fs.readFile(file, function(err,data){
        if(err){
            console.log(err);
            res.writeHeader(404,{
                'content-type' : 'text/html;charset="utf-8"'
            });
            res.write('<h1>404</h1>');
            res.end();
        }else{
            if(url.substr(url.length-3, 3) == ".gz"){
                res.writeHeader(200,{
                    'Content-Encoding' : 'gzip',
                    'content-type' : 'application/octet-stream'
                });
            }else{
                res.writeHeader(200,{
                    'content-type' : 'text/html;charset="utf-8"'
                });
            }
            res.write(data);
            res.end();
        }
    });

}).listen(port,hostname);
console.log("Static file server running at\n  => http://localhost:" + port + "/\nCTRL + C to shutdown");

问题出来了: 它不知道如何忽略url前缀“ / 0000000 / abctest”

Error: ENOENT: no such file or directory, open '/home/ubuntu/xxxxx/static/0000000/abctest/folder001/index.html'

但是我的实际文件路径应为'/home/ubuntu/xxxxx/static/folder001/index.html'

http.createserver是否不能忽略url前缀?我可以从中寻求一些提示吗。

1 个答案:

答案 0 :(得分:0)

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

我最终通过使用nginx反向代理重写url来绕过问题