node.js - 使用 Apache 和反向代理将 domain.com/api 路由到特定端口

标签 node.js apache api ssl reverse-proxy

我有一个使用 Express.js 的 Node.js 应用程序,它在端口 1399 上运行,为用户提供了一个休息 API。可以使用 http://example.com:1399 访问 API .我正在使用 Let's Encrypt for SSL。

问题是只有没有 SSL 的请求才能工作,因为 Let's Encrypt 只允许在默认端口(例如端口 443)上使用 HTTPS。使用https://example.com:1399/ (使用 https)在 Firefox 上给我一个安全连接失败错误。

为了能够在端口 443 之外的其他端口上也提供 SSL,我想路由来自 https://example.com/api 的所有请求至 https://example.com:1399/api .如何使用 Apache 和反向代理来做到这一点?

我已经尝试了 this 中建议的解决方案通过在/etc/apache2/sites-available/000-default-le-ssl.conf 中添加以下内容来回答:

<Virtual Host *:443>
    ...
    ProxyPass /api/ https://127.0.0.1:1399/api/
    ProxyPassReverse /api/ https://127.0.0.1:1399/api/
</VirtualHost>

但是,当调用 https://example.com/api/ 时它给我一个内部服务器错误。使用 http://调用它没有任何响应,并且会在 10 秒后使加载选项卡超时。

最佳答案

解决方案:

  1. 将这两行添加到 /etc/apache2/sites-available/000-default-le-ssl.conf 就在 </VirtualHost> 之前:
ProxyPass        "/api"  "http://example.com:1399/"
ProxyPassReverse "/api"  "http://example.com:1399/"
  1. 启用mod_proxymod_proxy_http:
sudo a2enmod proxy
sudo a2enmod proxy_http
  1. 重启apache2:
sudo /etc/init.d/apache2 restart

关于node.js - 使用 Apache 和反向代理将 domain.com/api 路由到特定端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54734880/

相关文章:

ajax - Apache 使一些 AJAX 请求同步运行

python - 通过 SSL 托管的 Flask 网站无法在任何微软浏览器(Edge 或 IE)中运行,但可在任何其他浏览器中运行

php - 手动安装Apache/MySQL和PHP的优点

带有 SOAP 的 PHP Web 服务

api - 在不使用 Instagram API 的情况下访问 Instagram 媒体

node.js - 检索多个元素后的链式操作

node.js - ENOENT 错误 - 没有这样的文件或目录,打开 'package.json' ,当从 Electron Builder/Packager 打包时

javascript - Twitter Feed API 停止工作

javascript - 如何模板化动态生成的 react 代码?

javascript - node.js + for 循环 + 查询执行