【问题标题】:SSL on Apache with NodejsApache 上的 SSL 与 Nodejs
【发布时间】:2014-11-03 03:15:02
【问题描述】:

我正在使用 nodejs 和 PHP 以及 Mysql 开发应用程序

这里PHP是前端,nodejs是后端

现在

我创建了一个表单,同时创建了一个表单

我正在向 Nodejs 发送 ajax 请求

喜欢

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

哪个工作正常

现在的问题是

当我在 Apache 上启用 ssl 时。

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

它给了我错误,比如

跨域策略,加载不安全的内容

如何解决此问题

谢谢

【问题讨论】:

    标签: php node.js apache ssl


    【解决方案1】:

    这不是 PHP 的问题,而是 JavaScript (AJAX) 的问题。这是因为您正尝试从通过 SSL 提供的网页从不使用 SSL 的服务器加载内容。

    只需在 Node 应用上启用 SSL 即可。

    编辑

    我不建议在 Node.js 中创建代理服务器。
    在每个 Node.js 应用程序的前面创建一个代理服务器实际上是一个好主意。事实上,出于安全原因,大多数使用 Node.js 构建的网站前面都有一个 Nginx 反向代理。也就是说:用户连接到 Nginx(选择 Apache 以获得更好的性能),然后 Nginx 向 Node.js 应用程序发出请求。
    使用此设置,您实际上不需要在 Node.js 中启用 SSL,只要 Nginx 启用了 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/

    【讨论】:

    • 你能告诉我,如何在节点上启用 ssl。我需要使用相同的证书还是其他证书。据我所知,ssl 可以在 443 上工作,节点在其他端口:8124
    • 您使用 Express 吗?我可以看到 app.js 中创建节点服务器的代码吗?
    【解决方案2】:

    在节点上启用 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...);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 2011-06-22
      • 2016-02-07
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多