Назад | Перейти на главную страницу

перенаправление nginx на основе доменного имени

У меня есть веб-приложение django, которое работает на сервере с IP-адресом 23.xxx.105.49 и домен как www.example1.com

Ниже моя конфигурация 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(безопасно), сервер обслуживал мне веб-приложение с тем же доменом example2.ford.com

Но когда я использую http://example2.ford.com, мой сервер перенаправлялся на www.example1.com чего я не хотел, так как можно внести некоторые изменения в указанный выше файл конфигурации nginx таким образом, чтобы, если кто-то попытается получить доступ example2.ford.com используя http или https, он должен перенаправить на 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.

В nginx conf vhost слушайте порт 80 отдельно для example1 и example2, или вы также можете добавить listen 80 в conf по умолчанию для перенаправления на https.

Используйте модуль карты для сопоставления множественных перенаправлений, как в примере ниже.

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 перейдите по этой ссылке https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-virtual-hosts-server-blocks-on-ubuntu-12-04-lts--3