web-dev-qa-db-ja.com

PCがWebサーバーになれる理由とできない理由は何ですか。

コンピューターをWebサーバーとして使用することについて質問があります。特定のコンピューターをWebサーバーにすることができるのはなぜですか。どのような機能がWebサーバーになることを可能にしますか?コンピュータがWebサーバーとして機能できない場合はありますか?

43

ネットワークに接続でき、Webサーバーソフトウェアを実行できるのであれば、ほとんどすべてのコンピューターを[Web]サーバーとして使用できます。 Webサーバーは非常に単純で、フリーでオープンソースのWebサーバーがあるため、実際には、どのデバイスでもWebサーバーとして機能できます。

もっと大きな問題はネットワーキング面です。システムがサーバーとして機能するためには、他のマシンがそれにアクセスできる必要があります。 LANで使用するだけの場合は問題ありません。ただし、より広いインターネットから使用する場合は、データをそれにルーティングする必要があります。これには、サーバーに関連付けられた静的IPアドレス(またはルーター経由で転送されたポート)、またはドメイン名/サブドメインを変化する動的IPアドレスにマッピングできる外部サービスのいずれかが必要です。

(FWIW、あなたは $ 10台のコンピューター を購入することができます。これは基本的なWebサーバーとして機能することができます。)

もちろん、どのデバイスでもWebサーバーとして機能できますが、Webサイトの機能は大きく異なる可能性があり、安価なデバイス(または低速の接続)では、特定のWebサイトの内容によっては需要に追いつかない可能性があります。

私は上記のすべてがWebサーバーについて話していることに注意してください - しかし、同じことがほとんどすべてのタイプのサーバーに言えることです。

97
davidgo

まったく難しいことではありません。それは単にあなたの "Webサーバ"の定義に依存します。

マイクロコントローラのように単純なデバイスで「Webサーバー」を実行することは完全に可能です。

最低限必要なWebサーバーが何をする必要があるのか​​を考えてみましょう。それは何らかのテキストを出力する必要があるでしょう - 必ずしもHTMLでさえクライアントに。要求が要求であることを知り、適切に応答する必要があります。あなたの「クライアント」がローカルであれば、ネットワーク接続さえも必要ないでしょう。それは全く無意味なWebサーバーでしょう。

それは これらの のいずれかと同等のWebサーバーになります。

enter image description here

クライアントにネットワーク接続性を追加する(イーサネットはいいが、あなたがwifiで走っているウェブサーバーに接続できないという技術的な理由はない)そしてクライアントからルーティングできることはより良いだろう。

$ 5 ESP8266 - wifi付きの安価で最小限のマイクロコントローラで、その大部分を処理できます。基本的な動的コンテンツでさえも可能です。

私はPythonを使った素早いファイル共有のためにそのようなものを使います。マイクロコントローラでこのようなものを書いたり、電話で実行することさえ可能です。

静的コンテンツは退屈です。動的言語を追加すると、より重いウェイトシステムについて考える必要があります。 LinuxやWindowsを実行しているものはいいです。

この時点で、あなたはコンシューマルータ、UIでWebページを使用している小さなアプリケーション、そしてそれらすべてについて話しています。

Webサーバーはそれほど複雑な問題ではなく、 5行のbash で記述して、Linux上で実行することができます。今Doom...しかし、Doomを実行できるシステムであれば、Webサーバーを実行できます。

特定の負荷を処理できる良いWebサーバーの設定はやや複雑です。

25
Journeyman Geek

最低

文字通り、どのコンピュータでも、次のものがあればWebサーバーになることができます。

しかし、それで十分でしょうか。今、それは難しい質問です。

イントラネットを提供する

現代のWebページまたはWebアプリケーションをコミュニティ全体(学校、会社、美術館など)に提供するWebサーバーになるコンピューターの場合:

  • 一度に複数のコンピュータに応答できるハードウェア。 LinuxまたはWindowsを実行している古いコンピュータXPでうまくいくかもしれません。
  • 十分な帯域幅を持つ高速ネットワーク接続、たとえば1 Gbit /秒イーサネットまたは802.11 g Wi-Fi。
  • IISApacheNginx または その他 。 (驚くべきことに、これら3つは無料です。)

しかし、これは小さな操作では最低限の値でした。操作が大きくなると(つまり、静的ページではなく、トラフィックが増えて複雑なWebアプリケーションにサービスが提供されるようになると)、ニーズは高まります。あなたは結局必要になるでしょう:

  • 複数のXeon CPUと数百ギガバイトのRAMを搭載したラックマウント型サーバーのようなサーバークラスのハードウェア
  • 光ファイバネットワーク

外の世界に奉仕する

インターネットインフラストラクチャを利用して全世界にサービスを提供するには、次のものが必要になります。

  • パブリックIPアドレス
  • パブリックDNSサーバー
  • 安全な接続を確立するために 信頼できる認証局 によって発行されたデジタル証明書

これらがなければ、あなたが持っているのは潜在的なウェブサーバだけです。

11
user477799

プログラミング/ソフトウェアの視点:

ネットワークアダプタのポート80を監視できるプログラム。それはあなたが持っているOS上で動きます。そしてHTTPの定義に従ってリクエストを処理することができます。

任意のポートを監視するプログラムは、同じネットワーク内のすべてのコンピュータから到達可能です。理想的には、それは既知の標準ポート(HTMLサーバーの場合は80と8080、カスタムアプリケーションの場合は1024以上を選択)であるべきです。あなたが開発をしているのと同じコンピュータ上でネットワーク到達可能プログラムの開発を実行することさえ一般的なやり方です。

Localhost経由でアクセスできる場合は、同じネットワーク内のどこからでもアクセスでき、他の場所からこのマシンとそのネットワークアダプタへのパスがあります。

警告:デフォルトのインストールにおける多くのオールインワン開発環境はLocalhostへのアクセスを制限します。結局のところ、インターネットから管理ツールにアクセスできないようにする必要があります。

ハードウェア:

ハードウェアは、どこかで「XPまたはLinuxを実行するその10年前のコンピュータ」で始まり、2TBRAMと256TiBのSSDで、128コアあたりで終わる。 DBは別のサーバーでも動作しています。 Webアプリケーションは愉快に並列化できる傾向があるので、それらのサーバーのクラスタを使ってさらにもっとアップすることができます。そしてジオキャスト。そして分散デザイン。そして他にもたくさんあります。それは私たちが話している規模に完全に依存します。

あなたが出会う可能性が最も高いWebサーバーは、ところであなたが使っているルーターです。それらはすべてLinux上でホストされた設定目的でWebサーバーを実行しています(つまり、すべてのDHCPとNAT作業を実行しています)。

ネットワーキング:

インターネット上のあらゆる場所を含む、他のネットワークからのパスを持つことは今やそのはまったく異なる話であり、アプリケーションのプログラミングよりもさらに困難な部分です。あなたのルーターのNATとキャリアグレードのNATの間で、このことは本当に大変になりました。

  • あなたはいつも私的な人であってもあなたのISPから固定IPアドレスを購入するという選択肢があります。それが示すように、それはおそらく余分な費用がかかるでしょう。 DNSエントリは、生活の質の問題になります。
  • Carrier Grade NAT の前に戻ると、動的IPアドレスとDynDNSサービスを使用できます。しかし、キャリアグレードのNATでは、もう一つの制御不可能なNATを克服する必要があります - おそらく。あなたのプロバイダに依存します。
  • NATの種類を問わず、層をいくつでも通過させるための究極の解決策は、 TCP/IPホールパンチ です。すべてのVPNソリューションがそれを使用しています。 Skype、TeamViewer、その他すべてのものと同じです。問題は、次のとおりです。TCP/IPホールパンチングを実行するには、インターネット上で既に到達可能なサーバーが必要です。
  • 小規模(1〜10個のエンドポイント)の場合は、通常、最も簡単な方法は、サーバーを持つネットワークへのVPN接続を確立することです。ほとんどのルーターはそれをサポートしています。
8
Christopher

Pythonがインストールされているコンピュータ(PC、ラップトップ、スマートフォン、raspberryPIなど)が手元にある場合は、次のように入力してください。

$ python -m SimpleHTTPServer

Node.jsがインストールされている場合は、

$ npm install http-server -g
$ http-server

おめでとうございます、あなたはWebサーバーを持っています!

3
matt