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

时间:2019-02-17 15:47:10

标签: node.js apache api ssl reverse-proxy

我有一个使用Express.js的Node.js应用程序,该应用程序在端口1399上运行,为用户提供了其他API。可以使用http://example.com:1399访问该API。我正在使用“让我们加密SSL”。

问题在于,只有没有SSL 的请求才能正常工作,因为“加密”仅允许默认端口(例如端口443)上的HTTPS。使用https://example.com:1399/(带有https)会给我一个在Firefox上的安全连接失败错误。

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

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

<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 个答案:

答案 0 :(得分:0)

解决方案:

  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_proxy mod_proxy_http
sudo a2enmod proxy
sudo a2enmod proxy_http
  1. 重新启动apache2:
sudo /etc/init.d/apache2 restart