因此,我尝试通过 nginx https 反向代理后面的 docker 镜像运行 OwnCloud 实例,并且需要通过反向代理重写路径,这样就不必转到https://我的服务器/要访问 OwnCloud,您可以使用https://我的服务器/cloud去得到它。
我当前的反向代理位置块如下所示:
location /cloud {
rewrite /cloud/(.*) /$1 break;
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_set_header Host $host;
}
但这只起到了一半的作用。当我导航到 htts://my-server/cloud 时,我收到 OwnCloud 生成的 404 错误,然后如果我点击“带我回到 OwnCloud”,它会将我重定向到https://我的服务器/index.php这会导致 nginx 级别 404,因为重定向应该转到https://我的服务器/cloud/index.php。
我想我可能被骗了,需要修改 OwnCloud 配置,以便它返回带有 /cloud 附加的链接,但我不知道如何通过 docker 镜像做到这一点。非常感谢任何帮助。
答案1
我可能会做这样的事情:
location /cloud/ {
proxy_pass http://localhost:8080/;
}
注意末尾的斜杠/在......的最后地点和代理密码指令[1]。这类似于 rsync 的工作方式,即如果尾部斜杠存在,它将替换后面的所有内容。在您的例子中:
http://proxy/cloud
将向上游发出请求http://upstream:8080/
,而 OwnCloud 正在使用的任何子目录(例如示例)将被请求为:
http://proxy/cloud/example
并被请求为http://upstream:8080/example
你不需要改写如果您在代理到上游之前捕获了 /cloud 目录。
并删除其他设置,因为它们不是您想要的,除非您正在使用标题,否则我认为重定向对您的情况下没有任何区别。
[1] 来源: https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/