nginx redirecionar com base no nome de domínio

3

Eu tenho um aplicativo web do django que é executado no servidor com o endereço IP 23.xxx.105.49 e domínio como www.example1.com

Abaixo está minha configuração 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/;
  }
}

quando digito www.example1.com ou example1.com do navegador, ele me leva a https://www.example1.com como esperado, mas agora configurei outro domínio ( example2.ford.com ) para rotear para o mesmo servidor (23.xxx.105.49) e o problema real é

sempre que eu digito https://example2.ford.com (seguro), o servidor estava me servindo o aplicativo da Web com o mesmo domínio example2.ford.com

Mas quando eu uso http://example2.ford.com , meu servidor estava redirecionando para www.example1.com que não era o que eu queria, então como fazer algumas alterações no arquivo de configuração nginx acima de tal forma que alguém tente acessar example2.ford.com usando http ou https deve redirecionar para https://example2.ford.com como abaixo

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;
  }
}
    
por shiva krishna 14.02.2017 / 11:38

1 resposta

5

Você precisa configurar um novo vhost para example2.xyz.com. Nginx irá ler o nome do domínio primeiro e depois chamar respectivamente o arquivo conf conf padrão.

Em nginx conf de vhost, escute a porta 80 separadamente para o exemplo1 e o exemplo2, ou adicione 80 em conf padrão também para redirecionar para https.

Use o módulo de mapa para mapear vários redirecionamentos, como no exemplo abaixo.

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;
  }
}

Para criar vhosts no nginx, consulte este link link

    
por 14.02.2017 / 13:47