带有 url 重写的 HTTPS 反向代理
Posted
技术标签:
【中文标题】带有 url 重写的 HTTPS 反向代理【英文标题】:HTTPS reverse proxy with url rewrite 【发布时间】:2019-08-27 03:26:44 【问题描述】:我想在我的家庭服务器上安装 Nextcloud。 Nextcloud 快照将始终将 Nextcloud 实例放在 /,假设为 https://myserver.ddns.com。但我也想从我的服务器https://myserver.ddns.com/otherstuff/ 提供其他网页,所以我想将 Nextcloud 移动到https://myserver.ddns.com/nextcloud/。
似乎这可以通过使用带有 URL 重写的反向代理的 HTTP 服务器来完成,即我在端口 81 上运行 Nextcloud snap,反向代理透明地路由 https://myserver.ddns.com/nextcloud/ -> https://myserver.ddns.com:81/。
但我不想将未加密的 Nextcloud 实例暴露给互联网。是否可以为 HTTPS 实例执行此 URL 重写?它需要代理读取 HTTPS 请求,但透明的反向代理不应该能够解密通信?
替代方案当然是手动安装 Nextcloud,但 snap 承诺更容易维护和配置,由比我更了解这些东西的人编写。
【问题讨论】:
【参考方案1】:通过让反向代理终止 SSL 连接并将未加密的转发到 Nextcloud 服务器来解决此问题。然后代理可以重写 URL。 Nextcloud 也必须被告知它在一个 url-rewriting 反向代理后面。
对于 nextcloud snap,您可以使用以下命令(来自https://github.com/nextcloud/nextcloud-snap/wiki/Putting-the-snap-behind-a-reverse-proxy#nginx-optional-custom-path-location-for-reverse-proxy):
$ nextcloud.occ config:system:set overwritehost --value="myserver.ddns.com"
$ nextcloud.occ config:system:set overwriteprotocol --value="https"
$ nextcloud.occ config:system:set overwritewebroot --value="/nextcloud"
$ nextcloud.occ config:system:set overwrite.cli.url --value="https://myserver.ddns.com/nextcloud"
或者您可以直接在 Nextcloud config.php
中编辑这些值。
上面的链接没有解释 Apache 的设置,但下面的工作:
ProxyPass "/nextcloud" "http://127.0.0.1:8000"
ProxyPassReverse "/nextcloud" "http://127.0.0.1:8000"
ProxyPass "/" "http://127.0.0.1:8001/"
ProxyPassReverse "/" "http://127.0.0.1:8001/"
其中 8001 端口是静态/其他文件的网络服务器。 出于某种我不明白的原因,尾部斜杠很重要:如果我添加尾部斜杠:
ProxyPass "/nextcloud" "http://127.0.0.1:8000/"
然后我被重定向了,但 Nextcloud 无法正常工作,如果我将其从静态重定向中删除:
ProxyPass "/" "http://127.0.0.1:8001"
然后myserver.ddns.com/foo
在内部被重定向到http://127.0.0.1:8001foo
,这显然不起作用。
【讨论】:
以上是关于带有 url 重写的 HTTPS 反向代理的主要内容,如果未能解决你的问题,请参考以下文章
所有站点的“/api/”文件夹的 IIS 反向代理/全局 URL 重写
使用反向代理的 IIS URL 重写规则 - HTTP 错误 500.52