具有URL重写的HTTPS反向代理

时间:2019-04-05 09:01:20

标签: url-rewriting reverse-proxy nextcloud

我想在我的家庭服务器上安装Nextcloud。 Nextcloud快照将始终将Nextcloud实例置于/,例如https://myserver.ddns.com。但是我也想从我的服务器https://myserver.ddns.com/otherstuff/提供其他网页,因此我想将Nextcloud移到https://myserver.ddns.com/nextcloud/

对于使用URL重写的反向代理的HTTP服务器来说,似乎可以完成此操作,即我在端口81上运行Nextcloud快照,并且反向代理透明地路由https://myserver.ddns.com/nextcloud/-> https://myserver.ddns.com:81/。 / p>

但是我不想将未加密的Nextcloud实例公开给互联网。是否可以为HTTPS实例重写此URL?它将要求代理读取HTTPS请求,但是透明的反向代理不应该能够解密通信吗?

另一种选择当然是手动安装Nextcloud,但是由比我更了解这些知识的人写的保证更轻松的维护和配置的承诺引人入胜。

1 个答案:

答案 0 :(得分:0)

此问题通过使反向代理终止SSL连接并将未加密的内容转发到Nextcloud服务器来解决。然后,代理可以重写URL。还必须告知Nextcloud它是在URL重写反向代理之后。

对于nextcloud快照,您可以使用以下命令(来自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是用于存储静态/其他文件的Web服务器。 由于某些我不了解的原因,斜杠很重要:如果添加斜杠:

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,这显然不起作用。