2

リバース プロキシおよび 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 リバース プロキシの背後で実行) から、サーバーのルートではなく、アプリケーションのルートにリダイレクトするにはどうすればよいですか?

4

1 に答える 1

2

これはどの言語でも、たとえ PHP であっても、自動的に解決できない問題です。ワードプレスなどのアプリケーションで行うのは、ルートを指定する設定です。一部のアプリケーションでは、完全な URL ( https://domain.tld/bar ) が必要な場合や、パス (/bar) のみを使用する場合があります。

いずれにせよ、設定を作成してから、そこに基づいてすべてのリダイレクトを手動で構成する必要があります。リダイレクトを行うたびに実装する必要がないように、独自のリダイレクト関数を作成できます。

于 2013-02-05T19:34:38.533 に答える