Node.jsで書かれたwebsocketサーバーがあります。コマンドラインで次の手順を実行すると、websocketサーバーが正常に起動します。
nohup "/root/.nvm/versions/node/v8.11.1/bin/node" "/var/www/bm-server/bm-server" 1337 > "/var/www/bm-server/logs.txt" 2>&1 &
pgrep -x "bm-server"
PIDが表示されるため、サーバーが稼働していることがわかります。
ポートが開いていて受信していることがわかります# netstat -an | grep ":1337"
。これは以下を生成するためです。
tcp6 0 0 :::1337 :::* LISTEN
telnet myhost 1337
他のコンピュータから正常に接続されたため、そのポートにアクセスできることがわかります。
私のWebアプリケーションは期待どおりにサーバーに接続して使用できます。
問題はPHPでこのプログラムを始めたいです。
exec('nohup "/root/.nvm/versions/node/v8.11.1/bin/node" "/var/www/bm-server/bm-server" 1337 > "/var/www/bm-server/logs.txt" 2>&1 &', $stdout, $exitcode);
PHPでコマンドを実行すると、ブラウザから接続するときを除いて上記と同じテストに合格します。 Telnetを使用するとうまく接続できますが、ブラウザから接続しようとすると、次のメッセージが表示されます。
failed: Error in connection establishment: net::ERR_CONNECTION_CLOSED
これは、PHPがコードを実行する環境に関連しています。ただし、スクリプトの内容がどのように影響を受ける可能性があるかはわかりません。
これはサーバーソース、それが重要な場合。
PHPユーザー(www-data)がサーバーを起動する際にどのような問題がありますか?ところで、パスワードなしでsudoを実行できるようにwww-data権限も付与してsudoを使ってみましたが、あまり違いはありませんでした。