让 Nginx 重写后端响应

让 Nginx 重写后端响应

我在其他服务器上运行了一些服务,它们提供了 Web 应用程序http://someLocalIp:80无需 SSL。我想将其包装在 SSL 中,然后公开https://nginx服务器-globalIp/deliver/

我可以像这样看到后端服务,但这显然会破坏所有链接和引用,因为现在“/deliver/”必须是前缀。我不明白如何使用重写,因为重写似乎(在我看来)主要用于更改请求而不是后端的回复。这可能吗?:)

当前配置:

server {
    listen 443;
    ssl on;
    ssl_certificate /etc/ssl/some.crt;
    ssl_certificate_key /etc/some.key;
    location /deliver {
            proxy_pass http://someLocalIp;
    }
}

我曾尝试在 proxy_pass 末尾添加 /(正如许多答案所建议的那样),但这会产生一个空白响应,就好像后端服务没有向 nginx 提供任何东西一样。

此外,更改后端以匹配“/deliver”前缀并不像听起来那么容易,所以我希望可以不这样做就做到这一点。

答案1

反向代理有其局限性。无论如何,重写每个嵌入的 URL(超链接、图像、资源链接)的成本都很高。

正如您所猜测的,nginx代理模块可以重写请求,并可以重写location重定向响应中的字段。但除此之外,它不会对所附的 HTML 文档进行任何改动。

然而,我读到过Apache 模块如果您确实需要走这条路,那就会起作用。

相关内容