在nginx反向代理上的应用程序重定向错误

时间:2013-02-05 18:26:37

标签: http redirect nginx go reverse-proxy

我正在运行一个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)
}

问题:当我将浏览器定向到我的应用程序的网址(https://domain.tld/bar/)时,我可以看到文本“你到了root”。但是,如果我尝试打开https://domain.tld/bar/foo,我会被重定向到https://domain.tld而不是https://domain.tld/bar。似乎我的应用程序正在重定向到nginx服务器的根目录而不是应用程序。

问题:如何从我的应用程序内部(在nginx反向代理后面运行)重定向到我的应用程序的根目录,而不是服务器的根目录?

1 个答案:

答案 0 :(得分:2)

这是一个无法用任何语言自动解决的问题,甚至是PHP。诸如wordpress do之类的应用程序具有指定根的设置。某些应用程序需要完整的URL(https://domain.tld/bar)或者只能有一个路径(/ bar)。

无论哪种方式,您都需要创建一个设置,然后手动配置所有重定向。您可以创建自己的重定向功能,这样每次重定向时都不需要实现它。