2016-01-28 9 views
5

私はlocalhost:someportnumberでアクセスできるノードアプリケーションを持っています。自分のマシンだけを使用して、何らかのホスティングサービスではなく、このアプリを公開する(つまり、私のローカルネットワークだけでなく、他のインターウェブへ)。マシンはマックブックのプロですが、それは重要ではありません。私のマシン上にノードアプリケーションをホスト

注:これは純粋に理解するためのものですが、私はノートパソコンに玩具webappを常時ホストするつもりはありません。

私の混乱 - 私のnode.jsアプリケーションはWEBSERVERですが、私のアプリをホストするために別のサーバー(すなわちheroku、awsなどが提供するサーバー)が必要なのはなぜですか?私は何かが欠けているように感じる...

答えて

8

これはホームネットワークであると仮定すると、ホームネットワークをインターネットに接続するルーター/ファイアウォールがある可能性があります。デフォルトでは、ルータはセキュリティ上の理由から、ネットワークへのすべての着信接続をブロックします。

ポートフォワーディングルールと呼ばれるものを設定して、ポート80(ブラウザのデフォルトのhttpポート)に着信接続するようにルーターに指示します。あなたのホームネットワーク上のMacBook Pro。通常、ホームネットワーク上にあるときにIPアドレスがMacbook Proのものであることを発見し、そのIPアドレスにポート転送ルールを設定します。ポート転送ルールは、通常、Webブラウザから使用できる何らかの種類のWebベースの管理ユーザインターフェイスを介して設定されます。ルータに接続して設定するには、そのルータのマニュアルを参照する必要があります。

静的IPアドレスを持つようにmacbook proを設定しない限り、そのIPアドレスはルータによって動的に割り当てられます。それは少しでも同じままになる可能性がありますが、時間とともに変化する可能性があります。

これを実行したら、自宅のWeb接続のIPアドレスを検出する必要があります。これは動的に割り当てられる可能性もありますが、しばらく同じ状態を維持する必要があります。あなたがこのIPアドレスを知っているならば、ウェブサイト内のブラウザはURL http://xxx.yyy.zzzに行くことであなたのWebサーバーに接続できます。xxx.yyy.zzzはインターウェブから見たホームネットワークのIPアドレスです。

通常のドメイン名(http://mysampledomain.comなど)で接続できるようにしたい場合は、動的IPアドレスにドメインを設定するために支払うことができるいくつかの動的DNSサービスがあります。長期間の使用にはお勧めできません。おそらくISPのルールに反しているだけでなく、特にスケーラブルで堅牢なソリューションではありません。ホスティングプロバイダへの移行は、長期的にはより意味をなさないでしょう。ここで

は私の混乱だ - 私のNode.jsアプリケーションはWEBSERVER IS、なぜ私は私の アプリをホストするために別のサーバー(Herokuの、AWS、などが提供する、すなわち1)が必要 のですか?私は何かが欠けているように感じます...

あなたは別のWebサーバーは必要ありません。ホスティングプロバイダを見つける場合は、node.jsサーバをホスティングするホスティングプロバイダを使用します。これらのタイプのプロバイダでは、別のWebサーバーが存在しない可能性があります。関与するのはnode.jsサーバーだけです。マルチテナント環境を構築するために使用するプロキシやロードバランサを使用しているかもしれませんが、適切なインストール手順に従って、node.jsサーバを正常に稼動させるためには、環境。

+1

ここで私はポート転送が疑わしいと答えました。私はこれを投稿する前にもう少し考えていたはずです。それにもかかわらず、私は詳細な答えに非常に感謝します。 –

0

この方法は永久にはお勧めしませんが、デモのために、あなたのルータでポートを開くことができ、別の(公共のインターネットから)アクセスすることができます。ドメインが必要な場合は、ドメインとのマッピングにno-ipのような動的DNSを使用しないでください。 あなたを助けてくれることを願います。

1

あなたはあなたがアプリケーションをホストするサーバーを必要としない、それは例がnginxの

server { 
listen 80; 

server_name example.com; 

location/{ 
    proxy_pass http://APP_PRIVATE_IP_ADDRESS:8080; 
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection 'upgrade'; 
    proxy_set_header Host $host; 
    proxy_cache_bypass $http_upgrade; 
} 
} 
+0

これだけは解決策ではありません。 –

3

で設定だnginxのを使用して、ノードのjs にあなたのnginxのプロキシの設定を追加することができます - あなたがするサーバーが必要インターネット経由でアクセスできます。これを行うには多くの方法があります。

ウェブサーバーアプリに連絡するには、お使いのコンピュータのIPアドレスを知る必要があります。あなたは、(私にあなたの公共 IPアドレスを与えるWhat Is My Ipでこれを見つけ、私にアドレスを与えることができましょうと私はどのポートに接続するようにしましょう。stackoverflowのの

例えばIPアドレスが104.16.34.249ですが、 IPv6のアドレスのみを有することができる、に関係なく。今、自宅のISPのほとんどが毎日あなたのパブリックIPアドレスをリセットするhabbitを持っていることを覚えておいてください。

次の事、あなたは私のアプリのポートを与えて、例えば8080

だから私はhttps://104.16.34.249:8080/(またはあなたのアプリに応じてhttp://104.16.34.249:8080/)を取得しようとします。

しかし、私はほとんどのシナリオでは、何もないか、ルーターに当てはまるでしょう。それはステップ2です:ルータにこのポートのトラフィックをコンピュータに渡すように指示します。単純なポート転送設定を持つことができます。コンピュータをDMZに入れます。 (これを行う方法は別の質問です。恐らくServerFaultやSuperUserで終わるでしょう)。

これで、私はinterwebzからあなたのアプリにアクセスできます。

しかし、IPアドレスを変更しないで、一定の名前を使用することをお勧めします。だから、DynDNSやNo-IPのようなサービスに登録して、あなたのコンピュータやルーターに小さなスニペットをインストールすれば、ホームホスト名のようなものが得られます。 http://best-home-webserver-that-will-never-run-out-of-electricity.dyndns.com/またはhttp://my-cool-app.no-ip.com/です。

あなたのゲームを強化する話はありますか?

しかし、 "http://i-have-webz.com:8080/"のような独自のドメイン名が本当に必要な場合はどうなりますか?さて、あなたの次のステップは、Namecheapのような誰かからこのドメインを購入して、あなたのIPアドレス(静的な場合、つまり常に変化しない場合)またはaliasをno-ip/dyndns(動的)ホスト名に追加します。

次の良いステップは、適切なUPSを入手するようなものです。また、電源を使い切ったときに別のDSLラインを別のプロバイダーから別のループで借りるためのディーゼル発電機もあります。 1つのファイバーライン)をバックアップしたり、ネイバーからこの目的のためにワイヤレスアクセスを借りて、ラウンドロビンDNSを実装したり、巨大なビジネスを成長させたりして、すべてAmazonに移行できます。

上記は、シナリオを処理するための高度な手順です。これは、完全な方法ではなく、潜在的な懲罰を網羅したものではありません。多くの、あるいはすべてのステップを行うためには、より多くの、おそらくより良い方法があります。

関連する問題