リバース プロキシおよび golang アプリケーションとして nginx (0.7.67) を実行しています。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/barではなくhttps ://domain.tldにリダイレクトされます。私のアプリケーションは、アプリケーションではなく、nginx サーバーのルートにリダイレクトしているようです。
質問:アプリケーションの内部 (nginx リバース プロキシの背後で実行) から、サーバーのルートではなく、アプリケーションのルートにリダイレクトするにはどうすればよいですか?