我有一个后端有Apache和PHP的Web应用程序。我正在用许多新特性来增强这个应用程序,并考虑在新工作中使用nodeiderjs。首先,PHP和node.js可以在同一台机器上共存吗?我看不出为什么不行。其次,我可以直接从Javascript调用node.js代码并返回JSON吗?
lymnna711#
Node和Apache / PHP可以在一个服务器上共存。您可能遇到的唯一问题是它们不能同时监听同一个 * 端口 *。默认情况下,HTTP在端口80上运行,并且任何时候只有一个进程可以“监听”单个端口。因此,您可能必须在不同的端口(例如,8080)上运行Node应用程序,如果您的任何目标用户被限制为仅使用端口80,这可能会带来困难。
im9ewurl2#
你可以在同一台服务器上运行node和PHP,甚至可以在同一个端口上运行。关键是使用一个像nginx这样的服务器在前面监听端口80,在Nginx中像平常一样设置PHP(使用php-fpm),并设置你的Node示例在本地监听某个高端口,如8081。然后配置nginx将所有的Node请求代理到localhost:8081,使用目录名作为过滤器。实际上,您设置nginx处理Node请求的方式有点像处理PHP请求:它会将它们转发给其他守护进程,然后在它返回时处理响应。Nginx在这方面做得很好。它将增加一层安全性,并将提高性能,因为它非常擅长同时管理多个连接,即使后端不擅长。这样做的另一个好处是,你可以在不同的域上拥有多个独立的Node示例,并使用常规的nginx规则来处理所有这些。你也可以将它与其他应用服务器一起运行,比如用Go语言编写的应用。您将受益于Nginx的可配置性,它的SSL和HTTP/2支持和巨大的速度在服务静态文件,而不必服务静态文件从您的节点应用程序(如果你不想)。
ct3nt3jp3#
如果你的服务器是Ubuntu或Debian,请按照以下步骤操作:1.打开终端写入:
sudo curl -sL https://deb.nodesource.com/setup_8.x | bash - sudo apt-get install nodejs
1.如果服务器上未安装curl:
sudo apt-get install curl
1.为了在不关闭示例的情况下退出终端时Node.js应用程序不会停止,请使用名为Forever的包。
npm install -g forever
1.如果您的站点已经上传,并且NPM和Forever配置正确,那么就应该启动Node.js示例了。如果您使用的是Express.js,请运行以下命令来启动Forever示例:
forever start ./path/to/your/project
1.在上面的命令中,您会注意到我正在输入./bin/www脚本,因为这是npm start为Express.js启动的脚本。请确保将该脚本更改为您的启动脚本。默认情况下,网站(nodejs)以http://localhost:3000运行,这对于远程访问者来说并不理想。我们希望能够通过Apache处理的域名访问我们的网站。在Apache VirtualHost文件中,您可能会看到如下内容:
<virtualhost *:80> ServerName www.example.com ProxyPreserveHost on ProxyPass / http://localhost:3000/ ProxyPassReverse / http://localhost:3000/ </virtualhost>
我们告诉Apache创建一个代理,每次访问www.example.com域名时,该代理将获取我们的Node.js http://localhost:3000站点www.yousite.com。所有资产和页面都将使用www.yoursite.com路径,而不是http://localhost:3000,这会使每个人都相信该网站的服务与其他网站没有什么不同。但是,默认情况下,Apache代理模块未启用。如果模块尚未启用,则必须运行以下两个命令:
a2enmod proxy a2enmod proxy_http
启用这些模块后,可能需要重新启动Apache。我是在The Poliglot Developer上获得此信息的。
eanckbw94#
在Intellij的较新版本中,这似乎集成在Terminal插件中,默认情况下可用。您可以通过以下方式使用鼠标打开目录:
Terminal
right click -> Open In -> Terminal
或者为键盘Map命令Plugins/Terminal/Open in Terminal指定快捷键。由于创建新的终端选项卡需要使用command + T,因此我指定了command + shift + T
Plugins/Terminal/Open in Terminal
slhcrj9b5#
是的,如果你使用php来为客户端提供javascript页面,javascript代码可以使用 AJAX 请求来访问从你的节点服务器暴露的路由。
5条答案
按热度按时间lymnna711#
Node和Apache / PHP可以在一个服务器上共存。
您可能遇到的唯一问题是它们不能同时监听同一个 * 端口 *。默认情况下,HTTP在端口80上运行,并且任何时候只有一个进程可以“监听”单个端口。因此,您可能必须在不同的端口(例如,8080)上运行Node应用程序,如果您的任何目标用户被限制为仅使用端口80,这可能会带来困难。
im9ewurl2#
你可以在同一台服务器上运行node和PHP,甚至可以在同一个端口上运行。关键是使用一个像nginx这样的服务器在前面监听端口80,在Nginx中像平常一样设置PHP(使用php-fpm),并设置你的Node示例在本地监听某个高端口,如8081。
然后配置nginx将所有的Node请求代理到localhost:8081,使用目录名作为过滤器。实际上,您设置nginx处理Node请求的方式有点像处理PHP请求:它会将它们转发给其他守护进程,然后在它返回时处理响应。Nginx在这方面做得很好。它将增加一层安全性,并将提高性能,因为它非常擅长同时管理多个连接,即使后端不擅长。
这样做的另一个好处是,你可以在不同的域上拥有多个独立的Node示例,并使用常规的nginx规则来处理所有这些。你也可以将它与其他应用服务器一起运行,比如用Go语言编写的应用。
您将受益于Nginx的可配置性,它的SSL和HTTP/2支持和巨大的速度在服务静态文件,而不必服务静态文件从您的节点应用程序(如果你不想)。
ct3nt3jp3#
如果你的服务器是Ubuntu或Debian,请按照以下步骤操作:
1.打开终端写入:
1.如果服务器上未安装curl:
1.为了在不关闭示例的情况下退出终端时Node.js应用程序不会停止,请使用名为Forever的包。
1.如果您的站点已经上传,并且NPM和Forever配置正确,那么就应该启动Node.js示例了。如果您使用的是Express.js,请运行以下命令来启动Forever示例:
1.在上面的命令中,您会注意到我正在输入./bin/www脚本,因为这是npm start为Express.js启动的脚本。请确保将该脚本更改为您的启动脚本。
默认情况下,网站(nodejs)以http://localhost:3000运行,这对于远程访问者来说并不理想。我们希望能够通过Apache处理的域名访问我们的网站。在Apache VirtualHost文件中,您可能会看到如下内容:
我们告诉Apache创建一个代理,每次访问www.example.com域名时,该代理将获取我们的Node.js http://localhost:3000站点www.yousite.com。所有资产和页面都将使用www.yoursite.com路径,而不是http://localhost:3000,这会使每个人都相信该网站的服务与其他网站没有什么不同。
但是,默认情况下,Apache代理模块未启用。如果模块尚未启用,则必须运行以下两个命令:
启用这些模块后,可能需要重新启动Apache。
我是在The Poliglot Developer上获得此信息的。
eanckbw94#
在Intellij的较新版本中,这似乎集成在
Terminal
插件中,默认情况下可用。您可以通过以下方式使用鼠标打开目录:
或者为键盘Map命令
Plugins/Terminal/Open in Terminal
指定快捷键。由于创建新的终端选项卡需要使用command + T,因此我指定了command + shift + T
slhcrj9b5#
是的,如果你使用php来为客户端提供javascript页面,javascript代码可以使用 AJAX 请求来访问从你的节点服务器暴露的路由。