Nginx 301 Перенаправить http (голый и www) на https www, а также субдомен подстановочного знака на https - PullRequest
0 голосов
/ 01 июля 2018

Я пытаюсь настроить прокси-сервер Nginx для мультитенантного Saas с большим количеством пользовательских доменных имен. Я хочу создать блок сервера, который может обрабатывать следующие запросы, все как 301 постоянный:

  1. http://custom -domain.com до https://www.custom -domain.com (custom-domain.com может быть любым заданным пользователем именем домена)

  2. http://www.custom -domain.com до https://www.custom -domain.com (опять же, любое доменное имя)

  3. http://.saas -domain.com to https://.saas-domain.com (saas-domain, com - это одно доменное имя для моей услуги)

В настоящее время я решаю эту проблему с помощью нескольких операторов If, но это выглядит странно, и я надеюсь на некоторую помощь более эффективным способом:

server {
    listen 80 default_server;

    location / {

      # if 'www' redirect to https
      if ($host ~* ^(www)) {
        return 301 https://$host$request_uri;
      }
      # if '*.saas-domain.com' redirect to https://*.saas-domain.com
      if ($host ~* ^(.*)\.saas-domain\.com) {
        return 301 https://$host$request_uri;
      }
      # if not 'www' redirect to https and add 'www'
      if ($host !~* ^(www)) {
        return 301 https://www.$host$1 permanent;
      }
    }
}

Это лучший способ справиться со всеми моими сценариями? Я думаю, что сложность заключается в подстановке пользовательских доменов. Я обеспокоен накладными расходами в заявлении If. ТИА!

1 Ответ

0 голосов
/ 01 июля 2018

Nginx рекомендует не использовать операторы «Если», если у вас нет другого способа решить вашу проблему. Я бы предложил добавить отдельные блоки для ваших доменных имен, так как это даст вам больше гибкости.

Попробуйте следующее, чтобы увидеть, помогает ли это.

# Capture requests that already have www and redirect to https

server {

    listen 80;
    server_name www.*;
    return 301 https://$server_name$request_uri;

}

# Captures the saas-domain.com requests and redirects them

server {

    listen 80 ;
    server_name *.saas-domain.com;
    return 301 https://$server_name$request_uri;

}

# Default capture everything else and redirect to https://www.

server {

    listen 80 default_server;
    server_name _;
    return 301 https://www.$host$request_uri;

}

Сначала проверьте это перед внедрением в производство.

Имена серверов Nginx

Nginx, если это зло

переменные Nginx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...