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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1496閲覧

サーバーで立てたNode.jsへクライアント側からアクセスすると拒否される

rick

総合スコア18

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/01/24 14:31

編集2022/01/24 14:33

Web系の知識がない初心者で、5日位悩んで分からなかったため質問させていただきます。
以下のサイトを参考に、レンタルサーバー(さくらのVPS)へNode.jsを置いて
クライアント側からアクセスしようとしています。
https://www.sejuku.net/blog/84935

server.js

JavaScript

1var http = require('http'); 2var httpProxy = require('http-proxy'); 3 4httpProxy.createProxyServer({ 5 target: 'http://localhost:9000' 6}).listen(8080); 7 8http.createServer(function(req, res) { 9 res.write('Hello Proxy'); 10 res.end(); 11}).listen(9000);

サーバー側でserver.jsを起動し

node server.js &

サーバー側で

curl http://localhost:8080

でアクセスするとアクセスできます。("Hello Proxy"を表示)
しかし別のPC(クライアント側)のコマンドプロンプトで同じコマンドを打っても

curl: (7) Failed to connect to localhost port 8080 after 2212 ms: Connection refused

となりアクセスに失敗します。別のサイトでは”localhost”および"127.0.0.1"はローカルループバックアドレスと呼ばれ自分自身を指すため、クライアント側からはこのままではアクセス出来ないのかなと思っています。

クライアント側のコマンドプロンプトからcurl、もしくはブラウザを用いて
サーバー側に置いたNode.jsへアクセスするには、どの様な設定が必要で
どの様なアドレスを使用すればアクセスが可能になるでしょうか・・・??
ご教授をお願いいたします。

ちなみにさくらのVPSにはパケットフィルターという通信制限を行うサービスをコントロールパネルで設定できるのですが、そちらでも 送信元アドレス TCP80/443 の許可は設定しています。

どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

”localhost”および"127.0.0.1"はローカルループバックアドレスと呼ばれ自分自身を指すため、クライアント側からはこのままではアクセス出来ないのかなと思っています。

結論から言うと、VPSに割り当てられたサブドメインを使ってください。

コントロールパネル画面 - さくらのVPS マニュアル
上記ページの「名称未設定」の下に■■■.vs.sakura.ne.jpという文字列が記載されていますよね。
コントロールパネルにアクセスして、そこの文字列を使いましょう。

一旦解説を挟んだ後、それだけじゃダメだよって話をしていきます。


解説していきます。

貴方は長期休暇で知り合いと旅行に行く計画をしており、
スマホで良いと評判のホテルを予約しました。
当日そのホテルへチェックインする為に現地へ移動するわけですが、
「貴方はホテルの住所をスマホに登録しておき、地図アプリで調べながら到着」しました。

このような流れはWebでも同様です。

Web上で公開されているパソコンには「住所」を示す「IPアドレス」が必要です。
それはサーバーマシンも同じです。
203.0.113.992001:0db8:0000:0000:0000:0000:0000:00fdといった数字ですね。
これはレンタルサーバやVPSといったサービスを利用する時にマシンに割り当ててくれます。

しかし我々は普段yahoo.co.jpといった文字列でアクセスしています。
この文字列を「ドメイン」と呼びます。

Webの世界には人間が理解しやすい文字列を「IPアドレス」に変換してくれるNICという団体が存在しており、
我々Webの利用者はブラウザで何気なくyahoo.co.jp等にアクセスしていますが、
このNICさんにお伺いして文字列をIPアドレス(前述のyahoo.co.jpは183.79.217.124)に変換してからアクセスしています。
参考サイト: WHOIS情報検索

この辺は概要だけでさらっと飛ばすとして、
VPSやレンタルサーバを借りても住所の情報が無ければ使えません。
サービスとして破綻してしまう……
なのでサービス提供者からこの住所使ってねという「ドメイン」や「IPアドレス」の情報が払い出されます。
都度コントロールパネルにアクセスして確認するなり、メモを取るなりしましょう。

別料金になりますが、独自ドメインを取得して利用することも可能です。
レンタルしたVPSのIPアドレスを繋ぎ込む事で、自分だけのドメイン名でサービスを利用できます。
■■■.vs.sakura.ne.jpなんてダサい!やだやだ!と思ったら検討してみてください。

価格一覧 - さくらのドメイン
年間利用料金がこれで、月額にすると低スペックなVPSの半額とかそのあたりになりますね。


次にポート番号の話をしていきます。

js

1var http = require('http'); 2var httpProxy = require('http-proxy'); 3 4httpProxy.createProxyServer({ 5 target: 'http://localhost:9000' 6}).listen(8080); 7 8http.createServer(function(req, res) { 9 res.write('Hello Proxy'); 10 res.end(); 11}).listen(9000);

.listen(数字)の数字の部分に注目してください。
これはマシンのポート番号に利用申請して占拠する事で、
外部からTCP通信が来た時に番号に一致するサービスに通信を流し込んでくれます。

上記のコードでは.listen(9000).listen(8080)といった数字を利用したいよと言っています。
なので、マシンと紐付いているのは90008080番のポートなんです。

送信元アドレス TCP80/443 の許可は設定しています。

80443番を許可しても意味がありません。

Node.js製のWebサーバは90008080番を求めているので、これと一致するポート番号を許可しましょう。
WebサーバはTCPなので、TCP9000の許可を出せば使えるようになるはずです。
そうすれば前述のサブドメインを利用してこんな感じでアクセスできるようになるでしょう。

bash

1$ curl http://■■■.vs.sakura.ne.jp:9000

話はこれでおしまいですが、
折角なので80443という数字にも解説します。

普段我々はブラウザにyahoo.co.jp等と入力してhttps://www.yahoo.co.jp/のサイトを表示させて閲覧しています。
この時アクセスに使われるポート番号は443で、ポート番号を省略せずにhttps://www.yahoo.co.jp:443/と記入しても問題なくページを閲覧することが可能です。

httpならば80番、httpsならば443番が初期で使われるデフォルト値となります。
貴方が自分や知人しか使わないWebサイトを作り上げ、
こっそり使いたいならば8080でも9000でも良いです。

しかし、今後全世界に公開して皆に閲覧してほしいと思ったのならば
その時は80や443番を使うようにしましょう。

js

1var http = require('http'); 2var httpProxy = require('http-proxy'); 3 4httpProxy.createProxyServer({ 5 target: 'http://localhost:9000' 6}).listen(80); 7 8http.createServer(function(req, res) { 9 res.write('Hello Proxy'); 10 res.end(); 11}).listen(9000);

こう直して、ローカルのマシンでサブドメイン使うだけで動くんじゃないですかね?

bash

1$ curl http://■■■.vs.sakura.ne.jp

投稿2022/01/24 18:42

編集2022/01/24 19:01
miyabi-sun

総合スコア21158

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

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

rick

2022/01/25 10:09

非常に丁寧な説明をしていただき、ありがとうございます! 上記解説に従い、クライアント側のコマンドプロンプトにてさくらのVPSで自分に割り当てられたドメイン名を用いて「curl http://■■■.vs.sakura.ne.jp」を打ち込むと、server.jsへアクセスすることができました。 以下の事を実施。 ・教えていただいたコードへ差し替え ・Apache2が80番を使用していたため、別のポート番号へ変更  (/etc/apache2/ports.confの"Listen"を80番以外へ修正)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問