0

最初の本番ノードのWebサイトを立ち上げようとしています(本番Webサーバー上の基本的なHello World)。

以下は私が使用しているものです(Apache Webサイトをポート:9000に、ノードWebサイトをポート:8000に渡すための基本的なhttpプロキシ)。apache vhostsは期待どおりに転送されるため、この部分が機能することはわかっています。ただし、機能しないのはノード部分です。代わりに、以下のエラーが発生します。

"Cannot GET /"

これはUbuntu12.04でノード0.8.1を実行しています

私はこれをforever.jsでホストしています(永久にfoo.jsを起動します)。NODE_ENVをエコーすると、「本番」と表示されます

パスにnode_modulesがないことにも注意してください(requireステートメントで確認できます)**これが私の問題と関係があるかどうかはわかりません

var httpProxy = require('/usr/local/lib/node_modules/http-proxy/lib/node-http-proxy');
var express = require('/usr/local/lib/node_modules/express/lib/express');

httpProxy.createServer(function (req, res, proxy) {

    var nodeVhosts = ['www.mysite.com'];
    var host = req.headers['host'];
    var port = nodeVhosts.indexOf(host) > -1
        ? 8000
        : 9000;

    proxy.proxyRequest(req, res, {host: 'localhost', port: port});
}).listen(80);

var one = express.createServer();
one.get('/', function(req, res){
  res.send('Hello from app one!')
});

var app = express.createServer();
app.use(express.vhost('localhost', one));
app.listen(8000);
4

2 に答える 2

2

Ubuntuを実行しているので、upstartを見てみてください。わからない場合は、upstartが、サービスの開始と停止に対するold-school-unixinit-scriptsアプローチに取って代わります。(暗くて怖い日でした!)ボックスの起動/再起動時にアプリを自動的に起動し、アプリ(アプリ)がクラッシュした後に自動的に再起動する場合は、起動する必要があります。upstartの基本を学ぶのは簡単です。そうすれば、node、apache、nginx、postfix、mongodb、mysqlなど、何度でも使用できるツールが手に入ります。

私は永遠のモジュールに取り組んでいる善良な人々を軽視しないことを意味します。間違いなく、確かなユースケースがありますが、システムにすでに存在する基盤を不完全に複製するために使用されることが多すぎます。また、経験豊富なユーザーやnode.jsコミッターによる、node.jsのフォーク可能性と落とし穴についてのコメントをGoogleで検索することもできます。これらは、永遠に非常に関連性があります。

リンクを投稿したいのですが、まだ担当者が足りません。うまくいけば、私が書いたものはグーグルで十分です。

幸運を!

于 2012-07-23T20:36:10.907 に答える
1

http-proxyモジュールはリクエストのホストヘッダーを変更しません。これconnect/express vhost は、仮想ホストを区別するために使用されます。

この行で:

proxy.proxyRequest(req, res, {host: 'localhost', port: port});

変更されていないリクエストをにプロキシするようにプロキシサーバーに指示しますlocalhost:port

したがって、あなたがする必要があるのは変更することです:

var app = express.createServer();
app.use(express.vhost('localhost', one));
app.listen(8000);

に:

var app = express.createServer();
app.use(express.vhost('www.mysite.com', one));
app.listen(8000);

そしてそれは動作するはずです。

または、プロキシreq.headers.hostする前ににを設定することもできます。localhost

于 2012-07-23T14:54:39.967 に答える