1 Востаннє редагувалося Q-bart (11.11.2017 12:52:22)

Тема: http to https

Така проблема. З http треба редіректити все на з'єднання по ssl.

Гуглиться таке:

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

Але в мене це рішення видає рекурсію і в браузері пише, що сайт зробив редірект забагато разів.

+ В мене є кілька доменів. Тобто server_name виглядає так:

www.example.com example.com www.example.net example.net;

Що порадите? Чи може зробити це все на рівні django?

Сервер: nginx

Подякували: Monolith1

2

Re: http to https

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

Переадресація з www.domain.com і domain.com на https://domain.com

Подякували: NaharD, Q-bart, leofun013

3 Востаннє редагувалося iovchynnikov (11.11.2017 14:03:06)

Re: http to https

Q-bart написав:

видає рекурсію і в браузері пише, що сайт зробив редірект забагато разів.

Мабуть тому що Ви редиректите на http знову :)

return       301 httpS://www.example.org$request_uri

Подякували: NaharD, Monolith, Q-bart, leofun014

4 Востаннє редагувалося Q-bart (11.11.2017 15:52:57)

Re: http to https

О, дякую! Я ж ось тільки що зрозумів що може бути більше ніж одна директива server :)

Тож мені треба щоб працювала наступна схема:

1. HTTPS і всі домени без www - з'єднуємо з django додатком;
2. HTTPS і всі домени з www - редірект на домен HTTPS без www;
3. HTTP і всі домени з і без www - редірект на HTTPS без www.


Ось таке в мене вийшло:

# Redirect all HTTPS with www to HTTPS without www
server {
    listen 443;
    server_name www.domain.net;
    return 301 https://domain.net$request_uri;
    ssl_certificate         /etc/...;
    ssl_certificate_key     /etc/...;
}

server {
    listen 443 ssl;
    server_name www.domain.com;
    return 301 https://domain.com$request_uri;
    ssl_certificate         /etc/...;
    ssl_certificate_key     /etc/...;
}

# Redirect all HTTP (www and non www) to HTTPS without www
server {
    listen 80;
    server_name www.domain.net domain.net;
    return 301 https://domain.co.uk$request_uri;
}

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


# Handle all HTTPS without www
server {
    charset  utf-8;

    listen 443 ssl;
    server_name domain.com domain.net;

    # SSL Config
    ssl_certificate         /etc/...;
    ssl_certificate_key     /etc/...;

    location / {
            proxy_set_header    Host                    $http_host;
            proxy_set_header    User-Agent              $http_user_agent;
            ....
    }
    ...
}

Робоче. Все працює, як треба.
Але, як на мене, трохи не ОК, бо там деякі налаштування повторюються.))

Як вважаєте, підхід нормальний отакий? Чи щось можна оптимізувати?

Подякували: NaharD1

5 Востаннє редагувалося Q-bart (11.11.2017 20:24:24)

Re: http to https

І ще питання: може сертифікати треба для доменів з www, або запити на домени без www редіректити на www? Як там правильно? Стандарт якийсь, або-що?

6

Re: http to https

Здається для www теж робиться сертифікат. Хоча чисто логічно, він не потрібен, якщо ми перенаправляємо з www. теж цікаве це питання.

7 Востаннє редагувалося Q-bart (12.11.2017 13:28:11)

Re: http to https

Тада, робиться. Але якщо робити редірект, то що краще не ясно)) Поки здається нагуглив, що взагалі без різниці. Головне, щоб в gogle search console один раз вибрати один варіант і не міняти