我在其他服务器上运行了一些服务,它们提供了 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 模块如果您确实需要走这条路,那就会起作用。