首页 文章

Node.js是https API服务器,但http是静态文件

提问于
浏览
1

我正在为一个iPhone客户端创建一个带有Node.js的API服务器 . 我也使用这个节点服务器发回一些请求的文件,如静态图像等 .

现在我正在使用以下代码创建一个https服务器:

https.createServer(options,app).listen(app.get('port'), function(){
    console.log("Express server listening on port " + app.get('port'));
});

哪个工作正常 .

但是,我希望静态文件通过HTTP而不是HTTPS提供 . 这可能吗?

我正在使用以下代码提供静态文件:

app.use(express.static(path.join(__dirname, 'uploads')));

谢谢!

1 回答

  • 4

    如果您希望在同一个端口上执行此操作,这几乎与Binding HTTP and HTTPS traffic on the SAME port in node.js?重复 .

    但是,如果您有多个端口(一个用于HTTP,一个用于HTTPS),您可以尝试仅启动服务器的两个实例 . 创建两个应用程序(可以在同一个节点文件中完成),一个用于实际的API,然后是一个较小的应用程序,例如,staticApp用于提供静态内容 . 然后,启动API服务器的代码是相同的,您可以使用

    http.createServer(app).listen(app.get('port'), function(){
        console.log("Static server listening on port " + app.get('port'));
    });
    

    为避免混淆,您还可以将API服务器中“port”变量的名称更改为“ssl-port”,这样您就不会感到困惑 .

    这将有效地创建两个服务器;一个通过HTTP提供静态内容,并通过HTTPS保留原始API服务器服务 . 请确保您使用的是80/443(标准),以便端口被协议隐含解释(即http://mydomain.comhttps://mydomain.com转到正确的位置),或者您的负载均衡器或代理您的流量的任何内容正在发送正确端口的正确协议 .

    请注意,这将为尝试通过HTTP访问API的任何人提供404(最有可能) . 解决方案可能是添加与您的API endpoints 匹配的通用路由(类似于api / *,如果这是您的结构设置的那样),使用https协议将用户重定向到相同的路径 .

    In response to your comment

    两个在一个文件中创建两个应用程序,只需执行以下操作:

    var api = express();
    
    api.configure(function(){
        app.set('ssl_port', [your https port]);
        //your api code
    });
    
    
    var static = express();
    
    static.configure(function () {
        app.set('port', [your http port]); // Set the port
        app.use(express.static(path.join(__dirname, 'static'))); //This will serve everything inside '/static' as static content
    })
    

    创建两个服务器:

    //HTTPS Api Server
    https.createServer(https_options, app).listen(app.get('ssl_port'), function(){
      console.log("Api server listening on port " + app.get('ssl_port'));
    });
    
    //HTTP Static Server
    http.createServer(static).listen(static.get('port'), function () {
        console.log('Static server listening on %s', static.get('port'));
    });
    

相关问题