質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

3回答

7763閲覧

自宅サーバー内に複数のwebサーバーを立て、外部からアクセスする方法について。

Pg_Egg

総合スコア18

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2018/02/09 03:32

編集2018/02/09 05:14

こんにちは、プログラマー 歴半年の新米エンジニアです。
現在ネットワーク周りの学習の一環として自宅サーバーを構築し、webサーバーソフトとしてApacheとNode.jsを入れているのですが、不明な点がいくつか出てきてモヤモヤしているので伺いたい次第です。
サーバーのOSはcentos7です。

モヤモヤ1つ目

現在テストでNode.jsを使用し、ポートを3000でlistenして簡単な静的HTMLを返すようにし、WANから見ることができています。
ここで今度はApacheのドキュメントルートにディレクトリを作成し、そこにHTMLを配置、ポートはデフォルトの80を使用、httpdを起動してみたのですが、WANからアクセスするとブラウザには

[504] Gateway Timeout

が表示されます。
つまり

Node.jsの3000番へのアクセスには
http://example.com:3000 でアクセス
成功

Apacheの80番へのアクセスには
http://example.com/testdir でアクセス
[504] Gateway Timeout

という状態です。
ルーターのNAPTの設定は80と3000ともに宛先を自宅サーバー機のプライベートIPに指定しています。

この解決方法を探していますが、私が見つけることができたのはリバースプロキシを使用する方法でした。

モヤモヤ1つ目での質問は、この問題の解決にはリバースプロキシを使用する方法だけなのか?ということです。

#モヤモヤ二つ目
このテストをしていて気になったのは、別々のwebサーバーアプリではなく同一のwebサーバーアプリ内で2つの異なるwebページを運用する際です、つまり
Apache Apache
Node.js Node.js
の組み合わせです
この場合を調べるとバーチャルホストという方法が出てくるのですが、このバーチャルホストという手法で問題は解決出来るのでしょうか?

私の質問は上記の2点です。
出先の為、今の情報はこれくらいですがもしも足りないようであれば自宅で追記致します。
質問が下手で申し訳ありませんが皆さんのお力を貸してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi-sun

2018/02/09 03:35

teratailでは質問の取り消しが出来ないので出直さないでください。質問を修正することが出来ますので時間が掛かっても大丈夫なので適切にメンテしてください。
Pg_Egg

2018/02/09 03:37

ありがとうございます。
guest

回答3

0

ルーターのNAPTの設定は80と3000ともに宛先を自宅サーバー機のプライベートIPに指定しています。

ポートマッピングはしたんですね。
でしたらファイアウォールにより、WAN→LANの80番ポートへの通信を遮断している恐れがあります。
ファイアウォールは2種類あります。

  • ルータの機能として存在しているファイアウォール
  • OSの機能として存在しているファイアウォール

CentOSだったら、iptablesでも使っているんじゃないですかね?
一度確認してみてください。


webサーバーアプリではなく同一のwebサーバーアプリ内で2つの異なるwebページを運用する際です

Webサーバに限らず、外からの通信を待ち受けるアプリは、
OSのポートを待ち受けるという事を行います。

今回はNode.jsとApacheが両方Webサーバとして機能させたいが、
WANから入ってきた通信はどちらのアプリにアクセスすれば良いか分からず迷子になってしまいます。
そのために、80番はApache、3000番はNode.jsという場合分けを行って対応していると考えてください。

バーチャルホスト

インターネット上はIPアドレスで管理しています。
しかし我々はブラウザに[google.com」みたいな文字列を打ち込んでWebサーバへアクセスしています。
この時に正引きといって、DNSサーバに問い合わせて「172.217.26.110」というIPアドレスを貰ってGoogleのサーバへアクセスしています。

ところが、Webサーバにアクセスする際、
ブラウザは「私は172.217.26.110にアクセスしてるんだけど、google.comだとおもってアクセスしてるんだからね!勘違いしないでよね!」
…といった感じの情報を含んだリクエストをWebサーバへ送信しています。

この「google.com」の文字列を抜き出して、ページを出し分けするのがバーチャルホストです。
イメージ的にはこんな感じ

  • google.com: 日本版のGoogleサイトを表示
  • google.co.uk: 英語版のGoogleサイトを表示

ApacheはWebサーバに特化したアプリケーションです。
バーチャルホストにも対応しており、設定ファイルである「httpd.conf」等に記載してページを出し分けすることが可能です。
単純に1個のアプリで2サイトを管理する感じですね。

Node.jsで作る際はこのヘッダーの情報を読み取って勝手に分岐作って頑張ってください。

投稿2018/02/09 03:49

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

僕も以前、DDNSでホスト名解決してもらって
自宅サーバを外部に公開したことがあるんですが
同じ状態になりましたね

トンチンカンなこと言ってたら無視してもらって構わないのですが
ルータの設定でおそらく 「静的IPマスカレード」 っていう項目があると思うので
それを見てみてください

グローバルで指定してきたポートをプライベートのポートにバインドしてくれるやつです

おやすみなさい

投稿2020/02/24 07:05

redis

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

詳しい御回答ありがとうございます!

追記ですがApache・Node.jsのどちらか一方を起動している状態であれば繋がります。

ファイアウォールはCentos7ではデフォルトでhttpが解放されていました。
念の為直で 3000/TCP 80/TCPで解放済みなので、ファイアウォールの問題ではないと考えられます。

仰った中の迷子状態が濃厚そうだと踏んでおり、ポートを分ければ普通につながると考えていたのですが繋がらなかったので投稿した次第です。

バーチャルホストについては知識が皆無だったので非常に為になりました、ありがとうございます!!

投稿2018/02/09 03:59

Pg_Egg

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問