web-dev-qa-db-ja.com

ドメイン名に基づくnginxリダイレクト

Django IPアドレス23.xxx.105.49およびドメインをwww.example1.comとしてサーバー上で実行するWebアプリがあります。

以下は私のnginx設定です

server {
  listen 80;
  server_name  example1.com  www.example1.com ;

  location / { 
    return 301    https://www.example1.com$request_uri;
  }
}

server {
    listen 443 ssl;
    server_name  example1.com  www.example1.com;

    ssl_certificate      /etc/ssl/ford/ford.com.chained.crt;
    ssl_certificate_key  /etc/ssl/ford/www.ford.com.key;
    ssl_session_timeout  20m;
    ssl_session_cache    shared:SSL:10m;  # ~ 40,000 sessions
    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2; # SSLv2
#    ssl_ciphers          ALL:!aNull:!eNull:!SSLv2:!kEDH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+EXP:@STRENGTH;
    ssl_ciphers          HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    client_max_body_size 20M;

    location / {
        proxy_pass http://127.0.0.1:8001;
        proxy_connect_timeout 300s;
        proxy_read_timeout 300s;
    }

  location /static/ {
    alias /home/apps/webapp/ford/new_media/;
  }

  location /media/ {
    alias  /home/apps/webapp/ford/media/;
  }
}

ブラウザーでwww.example1.comまたはexample1.comと入力すると、期待どおりにhttps://www.example1.comに移動しますが、同じサーバーexample2.ford.comにルーティングするように別のドメイン((23.xxx.105.49))を構成したので、実際の問題は

https://example2.ford.com(secure)と入力すると、サーバーは同じドメインexample2.ford.comでWebアプリケーションを提供してくれました

しかし、http://example2.ford.comを使用すると、私のサーバーは不要なwww.example1.comにリダイレクトされていたため、httpまたはhttpsを使用してexample2.ford.comにアクセスしようとした場合にリダイレクトされるように、上記のnginx構成ファイルにいくつかの変更を加えることができます以下のようなhttps://example2.ford.com

server {
  listen 80;
  server_name  example1.com  www.example1.com ;

  location / { 
    return 301    https://www.example1.com$request_uri;
  }
}

server {
  listen 80;
  server_name  example2.ford.com  www.example2.ford.com ;

  location / { 
    return 301    https://www.example2.ford.com$request_uri;
  }
}

Example2.xyz.comの新しい仮想ホストをセットアップする必要があります。 Nginxは最初にドメイン名を読み取り、次にそれぞれのconfファイルを呼び出します。それ以外の場合はデフォルトのconfです。

Vhostのnginx confでは、example1とexample2の両方に対して別々にポート80をリッスンするか、httpsへのリダイレクトのためにデフォルトのconfにlisten 80を追加することもできます。

以下の例のように、mapモジュールを使用して複数のリダイレクトをマッピングします。

map $http_Host $new {
  'exp1.xyz.com' '1';
  'exp2.xyz.com' '2';
}

server {
  listen 80;
  if ($new = '1') {
    rewrite ^(.*) https://exp1.xyz.com$1 redirect;
  }
  if ($new = '2') {
    rewrite ^(.*) https://exp2.xyz.com$1 redirect;
  }
}

Nginxでvhostsを作成するには、このリンクを参照してください https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-virtual-hosts-server-blocks-on-ubuntu-12- 04-lts--

6
Ashish Gupta