XserverにNode.jsを導入する方法

Web APP JavaScript
スポンサーリンク

前提:正直に言うと「普通には動かない」

まず結論から言うと、ExpressをXserverで「普通のWebサーバーのように常駐起動する」のはできません。

理由はシンプルです。

ポートが自由に使えない
常駐プロセスが制限される

つまり app.listen(3000) のような典型的な構成はそのままでは不可能です。

ここを誤解したまま進むと必ず詰みます。

ではどうするかというと、「無理やり動かす」には発想を変えます。


全体戦略:Expressを“サーバー”としてではなく“関数”として使う

発想の転換

通常のExpressはこうです。

リクエストが来る
サーバーが受け取る
レスポンスを返す

しかしXserverでは常駐できないので、こう変えます。

リクエストが来る(Apache)
Node.jsを一瞬起動する
処理してすぐ終了する

つまり「CGIとして実行」します。


方法1:Node.js CGIでExpressを動かす

CGIとは何か

CGIは「リクエストごとにプログラムを起動する仕組み」です。
古いですが、制限環境では最も確実に動きます。


Step1:CGIを有効化

Xserverのサーバーパネルで

「CGI設定」→ ON

対象ディレクトリに .htaccess を置きます。

Options +ExecCGI
AddHandler cgi-script .js
Apache

Step2:Node実行パスを確認(重要)

which node

例:

/home/ユーザー名/.nvm/versions/node/v18.x.x/bin/node

このパスは後で必須です。


Step3:CGI対応Expressコードを書く

ここが核心です。

通常のExpressコードは使えません。
HTTPサーバーを立てず、「1リクエスト処理」に書き換えます。

#!/home/ユーザー名/.nvm/versions/node/v18.x.x/bin/node

const express = require("express");
const app = express();

// 疑似レスポンス
const res = {
  send: (body) => {
    console.log("Content-Type: text/html\n");
    console.log(body);
  }
};

// 疑似リクエスト(簡易)
const req = {
  url: process.env.REQUEST_URI || "/"
};

// ルーティング
app.get("/", (req, res) => {
  res.send("<h1>Hello Express on Xserver</h1>");
});

// 擬似的に処理実行
app._router.handle(req, res, () => {});
JavaScript

Step4:実行権限を付与

chmod 755 app.js

Step5:ブラウザでアクセス

https://あなたのドメイン/app.js

これで動けば成功です。


方法2:リバースプロキシ的な“擬似運用”(応用)

考え方

Xserverでは直接ポート公開は無理なので

外部VPSでExpress起動
Xserverはフロントとして使う

という構成にします。

Apacheから外部APIとして叩く形です。


イメージ

Xserver(フロント)

VPS(Node.js + Express)


メリット

本来のExpressが使える
高速
リアルタイム処理可能


デメリット

サーバーが2つ必要
初心者には難しい


方法3:cronで擬似Webアプリ化(現実的)

これは実務でよく使う

Expressを「APIサーバー」としてではなく

データ生成
HTML生成
バッチ処理

に使います。


一定時間ごとにHTMLを生成

node generate.js > public/index.html

これをcronで回す


なぜ有効か

Xserverは「静的配信は強い」からです。

つまり

動的処理 → Node
公開 → HTML

に分離するのが最適解です。


セキュリティとパフォーマンス(重要な深堀り)

CGI方式の弱点

毎回Nodeが起動するので

遅い
負荷が高い

つまりアクセスが増えると破綻します。


対策

重い処理は避ける
キャッシュを使う
HTMLを事前生成する


セキュリティ

CGIは外部入力を直接扱うため危険です。

特に注意する点

クエリパラメータの検証
ファイル操作の制限
外部APIの扱い


まとめ:本当に使うべきか

ここははっきり言います。

「無理やり動かす」は学習には良いですが、実務には向きません。

本当にやりたいこと別の最適解はこうです。

ExpressでWebサービスを作る → VPS
簡単な処理 → Xserver + Node
高速サイト → 静的生成

タイトルとURLをコピーしました