簡體   English   中英

如何在 443 中為 apache AND 節點配置 https 支持?

[英]How to configure https support in 443 for apache AND node?

實際狀態:

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);

這里明顯的問題是 apache 已經在監聽端口 443,然后

Error: listen EADDRINUSE :::443

有沒有辦法使用 Apache 443 為節點提供 SSL?

您只能將一個進程綁定到服務器上的給定端口。

也就是說,執行此操作的正確方法是讓 Apache 偵聽 443,然后使用 mod_proxy 將流量轉發到 HTTP 端口上的 nodejs(不帶 SSL,但您只是在 localhost 上交談)或在 unix 上插座。

如何使用端口 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>

但是,如果您將 Proxy* 行添加到現有 HTTPS 端點,則理論是相同的。

您的節點 HTTPS 服務器可以在任何端口上運行 - 假設是 9090 而不是您設置的 443。 使用 Apache 將https://example.com 中的任何流量重定向到偵聽 9090 的節點 https 服務器。

查看 apache 反向代理以獲取有關如何設置的更多信息:)

要在端口 443 上提供兩台服務器,Apache 和 node.js,常見的解決方案是使用反向代理。

Apache 可以配置使用 mod_proxy,nodejs 也有代理配置,並且有專門用於這個工作的外部程序。

我建議使用 haproxy,偵聽端口 80 和 443,並制定必要的規則將請求轉發到您選擇的服務器。 然后,例如 apache 可以監聽 6080 和 6443,node 可以監聽 8080 和 8443。

這樣一來,apache 和 nodejs 就可以保持不變——除了修改監聽端口——而且 haproxy 對訪問控制列表是透明和靈活的。 您可以將 ssl 用於所有 *443 端口。

實際上不需要在節點服務器中導入 SSL 文件或密鑰。 (按照我的步驟在 SSL 中運行 apache 和節點服務器)。 希望你已經在Apache服務器中配置了 SSL

節點(快遞)

const express = require('express');
const app = express();
var cors = require('cors')
app.use(cors());
var server = require('http').createServer(app);

在服務器中打開httpd.conf並根據需要添加ProxyPass

ProxyPass /api/ http://localhost:3000/

不要忘記重新啟動 HTTP 服務

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

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

http://www.example.com/api/節點 http:好的!

https://www.example.com/api/節點 https: IT WORKKS !!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM