我有运行Apache和NodeJS服务器的Ubuntu 18.04。 Apache服务器正在端口80和443上侦听。PHP文件由Apache服务器执行,位于以下位置: http://server-ip/abc/index.php 。它对NodeJS服务器执行后请求:
.as-console-wrapper { max-height: 100% !important; top: 0; }
NodeJS服务器(下面的脚本)应读取Post-Parameters,并对其执行一些操作以返回字符串。
$postdata = http_build_query(
array(
'var1' => 'some content',
'var2' => 'doh'
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-Type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents('http://127.0.0.1:8080/', false, $context);
//do something with $result
当PHP脚本尝试连接到NodeJS服务器时,我得到了CORS相同的原点错误。
答案 0 :(得分:1)
您直接无法在特定的路由位置上启动 NodeJS ,但是可以通过两种方式解决问题:
第一个是启用 CORS ,如下所示:
const express = require('express');
const app = express();
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
或使用cors之类的软件包,有关更多信息,请访问此link。
第二个是将Apache配置为在如下所示的代理后面托管您的Nodejs应用程序:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ProxyPreserveHost On
ProxyPass /node http://example.com:3000/node
ProxyPassReverse /node http://example.com:3000/node
</VirtualHost>
有关如何为代理后面的 NodeJS 服务器提供服务和配置 Apache 的更多信息和相同问题,请访问此answer。
答案 1 :(得分:0)
总是在主机之后立即定义端口。因此127.0.0.1/abc:8080
与127.0.0.1:80/abc:8080
没什么不同,其中abc:8080
被当作路径来处理。当已经使用8080时,必须将nodeJs绑定到另一个端口。