我正在使用nodejs和PHP以及Mysql
进行应用程序PHP 前端,nodejs 后端
现在
我创建了一个表单并在创建表单时
我正在向Nodejs发送ajax请求
喜欢
网址:http://example.com:8124/sign_in
哪个工作正常
现在问题是
当我在Apache上启用ssl时。
现在我无法向Node发送请求。
它给了我错误,比如
跨域政策,加载不安全内容
如何解决此问题
由于
答案 0 :(得分:2)
这不是PHP的问题,而是JavaScript(AJAX)。这是因为您尝试从不通过SSL提供的网页中使用SSL的服务器加载内容。
只需在Node应用程序上启用SSL即可。
我不建议在Node.js中创建代理服务器
在每个Node.js应用程序前面创建代理服务器实际上是一个好主意。实际上,出于安全考虑,大多数使用Node.js构建的网站都在前面有一个Nginx反向代理。即:用户连接到Nginx(通过Apache选择以获得更好的性能),Nginx向Node.js应用程序发出请求。
使用此设置,只要Nginx启用了SSL,您实际上就不需要在Node.js中启用SSL。
要在Node.js中直接使用SSL,您需要在app.js文件中添加几行。请参阅此问题:How do I setup a SSL certs for an express.js server?
如果服务器位于同一主机名(只是一个不同的端口),那么您将不再需要另一个SSL证书;如果服务器位于不同的主机名(例如子域)和,您的SSL证书不是通配符,那么您将需要另一个证书。
说到端口......默认情况下,HTTPS 运行在443上,但您可以根据需要随意更改它。请记住指定它,例如:https://example.com:8443/
答案 1 :(得分:1)
在节点上启用ssl的一种简单方法是在应用程序前使用代理:
var fs = require('fs');
var httpProxy = require('http-proxy');
var privateKey = fs.readFileSync('key.pem').toString();
var certificate = fs.readFileSync('cert.pem').toString();
var chainCertificate = fs.readFileSync('ca.pem').toString();
httpProxy.createServer({
target: {
host: 'localhost',
port: ...your application port...
},
ssl: {
key: privateKey,
cert: certificate,
ca: chainCertificate
}
}).listen(...the port for ssl...);