1

Node.js を使用して iPhone クライアント用の API サーバーを作成しています。また、このノード サーバーを使用して、静止画像などの要求されたファイルを送り返しています。

現在、次のコードで https サーバーを作成しています。

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

これは正常に動作します。

ただし、HTTPS ではなく HTTP 経由で静的ファイルを提供したいと考えています。これは可能ですか?

以下のコードで静的ファイルを提供しています。

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

ありがとうございました!

4

1 に答える 1

4

これを同じポートで実行しようとしている場合、これはnode.js の同じポートで HTTP および HTTPS トラフィックをバインドするのとほとんど同じです。.

ただし、複数のポート (HTTP 用に 1 つと HTTPS 用に 1 つ) がある場合は、サーバーのインスタンスを 2 つだけ起動してみることができます。2 つのアプリ (同じノード ファイルで実行できます) を作成します。1 つは実際の API 用で、次に staticApp と呼ばれる静的コンテンツを提供するための小さなアプリです。次に、API サーバーを起動するためのコードは同じであり、次を使用できます。

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

混乱を避けるために、API サーバーの「ポート」変数の名前を「ssl-port」などに変更して、混乱しないようにすることもできます。

これにより、実質的に 2 つのサーバーが作成されます。1 つは HTTP 経由で静的コンテンツを提供し、元の API サーバーは HTTPS 経由で提供します。ポートがプロトコルによって暗黙的に解釈されるように、80/443 (標準) を使用していることを確認してください (つまり、 http: //mydomain.comとhttps://mydomain.comは適切な場所に移動します)。ロードバランサーまたはトラフィックをプロキシしているものはすべて、適切なプロトコルを適切なポートに送信しています。

これにより、HTTP 経由で API にアクセスしようとする人に 404 (ほとんどの場合) が返されることに注意してください。その解決策は、https プロトコルを使用してユーザーを同じパスにリダイレクトする API エンドポイント (構造が設定されている場合は api/* のようなもの) に一致する汎用ルートを追加することです。

あなたのコメントに応えて

2 つのファイルで 2 つのアプリケーションを作成するには、次のようにします。

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
})

2 つのサーバーも作成します。

//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'));
});
于 2013-03-09T18:49:53.733 に答える