我正在运行 nginx (0.7.67) 作为反向代理和 golang 应用程序。nginx服务器配置如下:
...
location /bar/ {
proxy_pass http://localhost:8088/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
...
我的golang应用的源码(没有意义,只是一个例子):
func root(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "You reached root")
}
func foo(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/", http.StatusFound)
}
func main() {
http.HandleFunc("/", root)
http.HandleFunc("/foo", foo)
http.ListenAndServe("localhost:8088", nil)
}
问题:当我将浏览器定向到应用程序的 URL ( https://domain.tld/bar/ ) 时,我可以看到文本“您已到达根目录”。但是,如果我尝试打开https://domain.tld/bar/foo,我会被重定向到https://domain.tld而不是https://domain.tld/bar。似乎我的应用程序正在重定向到 nginx 服务器的根目录,而不是应用程序。
问题:如何从应用程序内部(在 nginx 反向代理后面运行)重定向到应用程序的根目录,而不是服务器的根目录?