Node.jsアプリのlocalhost:4000をNginxで公開する方法

Share on:

この記事は約3 分で読めます。

目次

Node.jsを勉強し始めると、

  • ローカルな開発環境では動かせているけど、これをどうやって公開するの?
  • localhost:3000で動かしているけど、80番ポートで受けたいよね?

と一瞬悩む方も多いと思います。

先日このブログにてヤマト運輸お問い合わせ伝票番号追跡APIを公開しました。

この公開が実質最初のNode.jsアプリ(API)の公開となりました。

こちらのアプリは、localhost:3000で開発を進め、ポート番号なしのドメインで公開しています。

そこで、Node.jsで作成したアプリの公開方法、今回はWEBサーバーにNginxを利用した場合の方法を書いていきたいと思います。

Nginxの設定

/etc/nginx/conf.dhttp.confssl.confなどの設定ファイルがあると思います。

環境によってファイル名は異なると思いますが、WEBサーバーをさばいている設定ファイルを探してください。

私の場合、KUSANAGIの上でNode.jsを動かしていますので、kusanagi_http.confというような名前が付けられています。

ファイルが見つかったら、開いて編集していきます。

 1server {
 2    listen       443 ssl http2;
 3    server_name  api.lancers.work;
 4
 5    ~ 省略 ~
 6
 7    location / {
 8        proxy_set_header Host $host;
 9        proxy_set_header X-Real-IP $remote_addr;
10        proxy_set_header X-Forwarded-Host $host;
11        proxy_set_header X-Forwarded-Server $host;
12        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
13        proxy_pass http://localhost:3000/;
14    }
15}
  • listen:ヤマトのAPIはSSLサイトですので、443 ssl http2と書きました。(ssl.confのデフォルトのままでOKです。)

  • servername:ヤマトのAPIはapi.lancers.workで公開していますので、公開しているドメインを記述します。

  • location / {}:これらの記述によって、443ポートで受けたリクエストが3000ポートに転送されます。
    localhostという記述はサーバーによって、ローカルIPアドレスを書いたりします。)

設定ファイルを修正したら、Nginxを再起動します。

1$ nginx -s reload

これでポート番号3000を付けずにhttps://ドメイン/の形式でNode.jsアプリへアクセスすることができます。

Node.jsアプリの永続化(常時稼働)

アプリを公開したらNode.jsをずっと起動しておかなければなりません。

一番有名な手法はforeverを使うことです。

こちらは記事がたくさんありますのでそちらを参考にしてください。

私の場合、なんとなくforeverが使いづらい?というか、開発しているとごちゃごちゃするというか、止めたい!と思うことが多いのでので、公開しているNode.jsアプリは全てターミナル(端末)をそれぞれ起動して、

1# DEBUG=yamato-api:* npm start

としています。

普段使いのパソコンで端末を開くと誤って閉じたりしちゃいますので、自宅サーバーのリモート環境内の端末で実行しています。

ご参考に慣れば幸いです。

以上、Node.jsアプリをNginxを使って公開するという記事でした。