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

nginx / ssl: всегда перенаправлять на один из двух субдоменов https

Мой веб-сервер поддерживает следующие два поддомена:

Я хочу создать свою конфигурацию nginx так, чтобы:

  1. http://en.example.com$ request_uri => https://en.example.com$ request_uri
  2. http://www.example.com$ request_uri => https://www.example.com$ request_uri
  3. Все остальные субдомены, не зависящие от http или https => https://www.example.com$ request_uri

Я не смог найти в Интернете никакого решения, решающего эту проблему. Может ли кто-нибудь помочь мне с правильной конфигурацией nginx.

Прежде всего, вы должны понимать, что вы не можете сделать «прозрачное» перенаправление https с https://something.example.com к https://www.example.com если ваш сертификат SSL не поддерживает something.example.com домен. Это покажет Your connection is not secure ошибка или подобное, при доступе. Однако вы должны иметь возможность перенаправлять с http://*.example.com к https://www.example.com без проблем. Для этого добавьте следующее поверх своего nginx.conf:

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

Он должен перенаправлять любой запрос на ваш IP-адрес на https://www.example.com

Затем мы добавляем конфигурации для определенных перенаправлений. Этот для http://en.example.com -> https://en.example.com:

server {
    listen 80;
    server_name en.example.com;
    return 301 https://en.example.com$request_uri;
}

Этот для http://www.example.com -> https://www.example.com:

server {
    listen 80;
    server_name www.example.com;
    return 301 https://www.example.com$request_uri;
}

И, наконец, мы добавляем конфигурацию для «реальных» доменов, которые должны обслуживать желаемый контент через SSL. Этот для http://www.example.com:

server {
    listen 443 ssl;
    ssl_certificate /etc/ssl/www.example.com.crt;
    ssl_certificate_key  /etc/ssl/www.example.com.key;
    server_name www.example.com;
    <your www.example.com server config here>
    ...
    </your www.example.com server config here>
}

Этот для http://en.example.com:

server {
    listen 443 ssl;
    ssl_certificate /etc/ssl/en.example.com.crt;
    ssl_certificate_key  /etc/ssl/en.example.com.key;
    server_name en.example.com;
    <your en.example.com server config here>
    ...
    </your en.example.com server config here>
}