带有Nodejs的Apache上的SSL

时间:2014-11-03 03:15:02

标签: php node.js apache ssl

我正在使用nodejs和PHP以及Mysql

进行应用程序

PHP 前端,nodejs 后端

现在

我创建了一个表单并在创建表单时

我正在向Nodejs发送ajax请求

喜欢

网址:http://example.com:8124/sign_in

哪个工作正常

现在问题是

当我在Apache上启用ssl时。

现在我无法向Node发送请求。

它给了我错误,比如

跨域政策,加载不安全内容

如何解决此问题

由于

2 个答案:

答案 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...);