如何在443中为Apache AND节点配置https支持?

Her*_*che 4 apache ssl https reverse-proxy node.js

实际状态:

http://www.example.com/mypage apache http:好的!
https://www.example.com/mypage apache https:好!

http://www.example.com:8000 节点http:好!
https://www.example.com:8000 节点https:不起作用(仍然)

我试图将节点程序修改为

var express = require('express');
var app = express();
var https = require('https');
var fs = require('fs');

var server = http.createServer(app);

https.createServer({ 
        key: fs.readFileSync("/etc/letsencrypt/live/www.example.com/privkey.pem"),
        cert: fs.readFileSync("/etc/letsencrypt/live/www.example.com/fullchain.pem"),
        ca: fs.readFileSync("/etc/letsencrypt/live/www.example.com/chain.pem")
}, app).listen(443);
Run Code Online (Sandbox Code Playgroud)

这里的明显问题是apache已经侦听端口443,然后

Error: listen EADDRINUSE :::443
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使用Apache 443为节点提供SSL服务?

Pau*_*aul 6

您只能将一个进程绑定到服务器上的给定端口。

也就是说,正确的方法是让Apache在443上侦听,然后使用mod_proxy将流量转发到HTTP端口(不带SSL,但您仅通过localhost进行通信)或Unix上的nodejs。插座。

如何使用端口80 / HTTP进行操作的一个很好的示例在这里:http : //blog.podrezo.com/making-node-js-work-with-apache/

<VirtualHost *:80>
  ServerName pastebin.mydomain.com
  ServerAlias www.pastebin.mydomain.com
  DocumentRoot /var/www/pastebinjs/
  Options -Indexes
  ErrorDocument 503 /maintenance.html

  ProxyRequests on
  ProxyPass /maintenance.html !
  ProxyPass / http://localhost:8000/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

但是,如果将Proxy *行添加到现有HTTPS端点,则原理是相同的。