Nul*_*ter 4 networking proxy apache2 nodejs
我有端口号是的 nodejs 应用程序,3001
这个应用程序使用 http 但不适用于 https。在Apache服务器,用于设置翻领代理80
或443
到5001
和一套翻领代理的3001也。
http://<domain>:3001/socket.io/socket.js ---> Work
https://<domain>:3001/socket.io/socket.js ---> Not Work(Secure Connection Failed or This site can’t be reached)
Run Code Online (Sandbox Code Playgroud)
在这里,我需要知道相同的端口(3001
)与http
和一起使用https
?
有什么解决办法吗?
不,不可能在同一端口上运行 HTTP 和 HTTPS。
使用 HTTPS 时,连接从一开始就使用 SSL/TLS 协议。客户端不可能使用纯 HTTP 开始传输。
如果在端口上检测到纯文本通信,则 SSL/TLS 标准不提供回退到 HTTP 的方法。
我不知道他们是怎么做到的,但我公司的开发人员做了@thomasrutter说你不能做的事情:我们使用非标准TCP端口(所以不是80,也不是443),例如8080,并且在该端口上如果你发送一个 http 请求,它会将你重定向到同一端口 8080 上的 https。他们用 nginx 做到了这一点,但用 apache2 却没有实现这一点!
编辑:似乎确实在 nginx 中执行此操作,错误代码为 497,而您的浏览器则执行其余操作: https: //ma.ttias.be/force-redirect-http-https-custom-port-nginx/
对的,这是可能的。2014 年,NodeJS GitHub 上提出了完全相同的问题(由 Zig 名人的 Andrew Kelley 提出):“能够在同一端口上同时提供 HTTP 和 HTTPS 服务” -> https://github.com/nodejs/node/问题/121
响应者推荐了这个非常简单(!)的 NodeJS 包: https: //github.com/mscdex/httpolyglot
粗略地说,它的工作原理是检查新连接的第一个字节。如果是不可打印的字符,则视为 SSL/TLS/HTTPS,否则视为 HTTP。非常令人印象深刻。更多详细信息请参见:https://github.com/mscdex/httpolyglot/issues/3
归档时间: |
|
查看次数: |
8504 次 |
最近记录: |