web-dev-qa-db-ja.com

Nginxでは、特定のサブドメインをポートにマッピングし、他のすべてをリダイレクトします

私は3つのことを達成しようとしています:

  1. トラフィックをサブドメインごとに、異なるポート上のいくつかのアプリケーションの1つにマッピングします。
  2. サブドメインが認識されない場合は、wwwにリダイレクトします。
  3. すべてのサブドメインでHTTPSが必要です。

これまでのnginx構成は次のとおりです。

map $subdomain $subdomain_port {
  default    8000;
  www        8000;
  subdomain1 8001;
  subdomain2 8002;
  subdomain3 8003;
}

server {
    listen 80;
    listen [::]:80;
    server_name _;
    return 301 https://$Host$request_uri;
}

server {
    listen              443 ssl;
    server_name         ~^(?P<subdomain>.+?)\.mydomain\.com$;

    ssl_certificate     <cert>;
    ssl_certificate_key <key>;

    location / {
      # ... various proxy headers, then ...
      proxy_pass http://127.0.0.1:$subdomain_port;
      proxy_redirect off;
    }
}

これはほぼで機能します(#1と#3を実行します)が、foo.mydomain.comwww.mydomain.comにリダイレクトする代わりに、リダイレクトせずにwwwコンテンツを提供するだけです。すべてを個別のserverブロックに分割せずに、マッピングされていないサブドメインをリダイレクトする方法がわかりません。

マップで明示的に言及されていないすべてのサブドメインをwwwにリダイレクトする方法はありますか?

7
Don McCurdy

AWSでは、Route53に同じEC2インスタンスIPを指すAレコード "* .staging.mydomain.com"を追加する必要があると言っただけです( "staging.mydomain.com"のレコードのように)

1
shadi

デフォルトのサーバーを実装するだけです。ここにあります

server {
  listen      80 default_server;
  server_name _;
  return 302 https://www.example.com;
}

あなたは好きな行動をすることができます。

1
Tim

次は私のために働きます...

  1. デフォルトのポートをwwwのポートとは異なるものにします。
  2. Nginxがデフォルトのポートでリッスンし、すべてのトラフィックがwwwにリダイレクトされるようにします。

これを機能させるためのNginx構成の変更点は次のとおりです...

map $subdomain $subdomain_port {
  default    8888;
  www        8000;
  subdomain1 8001;
  subdomain2 8002;
  subdomain3 8003;
}

server {
    listen 8888;
    server_name _;
    return 301 https://www.domainname.com/$request_uri;
}

# other configs remain the same

デフォルトのポートとして8888を使用しました。未使用のポートはすべて機能するはずです。

0
Pothi Kalimuthu