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

Http nginx за https ELB и автоматическое перенаправление индекса

У меня есть Amazon ELB, который прослушивает трафик http и https. В экземплярах за ним есть nginx на 80-м порту. Только http. Таким образом, ELB перенаправляет и https, и http на http nginx.

Когда я делаю https-запрос к папке вроде https://example.com/folder он автоматически перенаправляется на версию с косой чертой http://example.com/folder/ но протокол становится http. Папка содержит файл index.html. Я предполагаю, что это заставляет его работать.

Есть ли способ исправить это? Т.е. сделайте перенаправление на https вместо http. Я не могу использовать https во всем мире.

Моя конфигурация:

http {
map $http_x_forwarded_proto $thescheme {
    default $scheme;
    https https;
}

server {
    listen 80;
    server_name example.com;
    location / {
        root /var/www/html;
        add_header X1 $scheme;
        add_header X2 $thescheme;
        index index.html;
    }
}
}

Я добавил заголовки X1 и X2, чтобы проверить, какой протокол, по мнению nginx, используется, и добавлен ли заголовок X-Forwarded-Proto с помощью ELB. X1 - это http, X2 - это https для примера запроса.

Я обнаружил, что добавление

if (-d $request_filename) {
    rewrite [^/]$ $thescheme://$http_host$uri/ permanent;
}

внутреннее расположение помогает, но интересно, есть ли лучшее решение.

  • Вместо того, чтобы использовать rewrite, Я бы порекомендовал следовать лучшим практикам и использовать возвращение вместо этого директива. Использование этого может выглядеть следующим образом:

    if ($http_x_forwarded_proto = 'http') {
        return 301 https://example.com$request_uri;
    }
    
  • Кроме того, для принудительного использования HTTPS для всех клиентов, которые сделали HTTPS запросов один раз, подумайте о добавлении Строгая безопасность транспорта HTTP (HSTS) заголовок. HSTS является

    механизм политики веб-безопасности, который помогает защитить веб-сайты от атак, связанных с понижением версии протокола и перехвата файлов cookie.

    Чтобы использовать его, директива может выглядеть следующим образом:

     add_header Strict-Transport-Security max-age=31536000;