我有一个 php 程序 `
<?php
$op=exec('node -v');
$op1=exec('which node');
echo "Node version : $op";
echo "\n Node path : $op1";
echo "\nUser : ". get_current_user();
?>
` 当我以 ubuntu 用户身份从命令行运行这个程序时
Node version : v20.11.1
Node path : /home/ubuntu/.nvm/versions/node/v20.11.1/bin/node
User : root
当我以 root 用户身份从命令行运行该程序时
Node version : v18.20.0
Node path : /root/.nvm/versions/node/v18.20.0/bin/node
User : root
当我从浏览器运行这个文件时
Node version : v10.19.0
Node path : /usr/bin/node
User : root
我希望 apache Web 服务器使用的节点版本也设置为节点 18 或节点 20。我该怎么做?因为我想使用一些与节点 10 不兼容的节点模块。如何将 apache Web 服务器的节点 js 版本更改为 18 或 20?
您的其他用户有一个 .nvm 目录,可以在其中找到节点。运行 httpd 的用户没有,因此它使用系统节点实例。像此处显示的其他用户一样设置您的 apache 用户。或者升级/usr/bin下找到的版本。
另一个可能的修复:
看起来当你用 root 登录时,PATH 变量首先被设置为指向 .nvm 版本,而不是 /usr/bin 下的版本。但是当 Apache 启动时,它可能不会加载 root 所具有的环境。您可以修改您的 envvars apache 文件以将 .nvm 目录添加到您的 PATH 中。