web-dev-qa-db-ja.com

Nginxはリダイレクトなしでサブドメインをパスコンポーネントに変換します

アイデアは、着信リクエストをhttp://abc.example.com/...に取り、http://example.com/abc/...に書き換えることです。

これは、301/302リダイレクトを行うのに十分簡単です。

# rewrite via 301 Moved Permanently
server {
  listen 80;
  server_name abc.example.com;
  rewrite ^ $scheme://example.com/abc$request_uri permanent;
}

トリックは、abc.example.comexample.comが同じNginxインスタンスを指している場合に、このURLの変更透過的にをクライアントに行うことです。

別の言い方をすれば、example.com/abc/...がリクエストされ、別のクライアントラウンドトリップなしの場合、Nginxはabc.example.com/...からコンテンツを提供できますか?

開始ポイント構成

301でタスクを実行するNginx構成:

# abc.example.com
server {
  listen 80;
  server_name abc.example.com;
  rewrite ^ $scheme://example.com/abc$request_uri permanent;
}

# example.com
server {
  listen 80;
  server_name example.com;
  location / { 
    # ...
  }
}
31
# abc.example.com
server {
  listen 80;
  server_name abc.example.com;
  location / {
    proxy_pass http://127.0.0.1/abc$request_uri;
    proxy_set_header Host example.com;
  }
}
36
KSARN