質問: Expressなどで.listen( 443 )をして「netstat -tanp | grep 443」とすると tcp6 0 0 :::443 :::* と表示されます。 これはこのサーバー上の全てのIPの443ポートを占有している状態かと思うのですが、 Expressを使ってサブドメイン毎に同じポートNOを割り振ることは出来るのでしょうか。 https://github.com/bmullan91/express-subdomain https://github.com/wilsonpage/express-subdomain-handler などのライブラリを試してみましたが、 Error: listen EADDRINUSE :::443とエラーになってしまい実現出来ませんでした。 そもそものNode.jsのlistenに関わる仕様の部分を調べてみましたが、 言及している箇所が見つかりませんでした。 お手数おかけしますが、どなたかご教授いただけると幸いです。 ----------------------(前提)----------------------- nginxやApacheを使ってサブドメイン毎にポートNOを割り振るのではなく、 Node.jsだけで完結するシステムを考えています。
回答: > > そもそものNode.jsのlistenに関わる仕様の部分を調べてみましたが、 > > 言及している箇所が見つかりませんでした。 > > > expressのapp.listen()はNodeのhttpモジュールのhttp.Server.listen()と同じであり、http.Server.listen()はまた、Nodeのnetモジュールのnet.Server.listen()であるので、 以下のリンク先が「listenに関わる仕様の部分」に該当すると思います。 > > One of the most common errors raised when listening is EADDRINUSE. This happens when another server is already listening on the requested port / path / handle. One way to handle this would be to retry after a certain amount of time: > > > リンク先に記載がある通り、同じポート番号をlistenしようとするとエラーになってしまいます。 express-http-proxyやhttp-proxyなどのリバースプロキシーをサポートするライブラリを使って、1つのポート番号へのリクエストを別のポート番号に転送してあげるなどする必要があるかと思います。 参考1 - プロキシーで https://www.google.co.jp/amp/www.usagi1975.com/15mar161859/amp/ 参考2 - バーチャルホストで http://www.nilab.info/z3/20150503_01_nodejs_express_name_based_virtual_hosting.html https://github.com/expressjs/vhost