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

Как я могу разрешить http на определенном поддомене с nginx? (HSTS)

Я пытаюсь протестировать свой сайт на этапе разработки, прежде чем запустить его. Очевидно, у него нет такого же сертификата. Когда я пытаюсь зайти с поддоменом testing.domain.com, в firefox я получаю эту ошибку:

SSL_ERROR_BAD_CERT_DOMAIN

testing.website.com has a security policy called HTTP Strict Transport Security (HSTS), which means that Firefox can only connect to it securely. You can’t add an exception to visit this site.
upstream website {
    server 127.0.0.1:3000;
}

#prevent www
server {
  server_name www.website.com;
  return 301 $scheme://website.com$request_uri; 
}

#redirect http to https
server {
    listen 80;
    listen [::]:80;
    server_name website.com;

    return 301 https://$host$request_uri;
}

#https
server
{
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name website.com;

    include /etc/nginx/config/sites/headers.conf;

    include /etc/nginx/config/ssl/resolver.conf;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/website.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/website.com/privkey.pem;

    include /etc/nginx/config/ssl/ssl.conf;

    location /
    {
        proxy_pass http://website;

        include /etc/nginx/config/proxy/proxy.conf;
    }

    #include /etc/nginx/config/cache/static.conf;
}

Я добавил в этот серверный блок в надежде, что он будет обрабатывать HTTP-запросы, поступающие из тестового поддомена:

#allow http through testing subdomain
server {
    listen 80;
    listen [::]:80;
    server_name testing.website.com;

    location /
    {
        proxy_pass http://website;
        include /etc/nginx/config/proxy/proxy.conf; 
    }
}

И я обнаружил, что в headers.conf есть строка, в которой говорится

   add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";

поэтому я удалил includeSubDomains часть в надежде, что это отключит HSTS.

Даже после этих изменений он по-прежнему выполняет перенаправление с http://testing.website.com к https://testing.website.com а затем выдал мне ошибку HSTS.

Каждый раз, когда я вношу изменения, я делаю либо nginx -s reload или перезагрузите весь сервер, но это не имеет значения.

У вас есть 2 проблемы с HSTS, потенциально 3.

Сначала вы выбрали includeSubDomains, что означает, что ваш NGINX сообщает браузерам, что каждый субдомен, включая корень, example.com использует только HTTPS. Более того, он сказал браузерам кэшировать это значение на 63072000 секунд, иначе. 730 дней, а точнее 2 года. Это означает, что любой браузер, который посетил любую страницу example.com, принудительно перенаправит на HTTPS, если увидит example.com в адресе.

Единственный способ обойти это - удалить IncludeSubDomainsи используйте только что установленный браузер или разверните сертификат на сайте testing.example.com. Это может работать даже с самоподписанным сертификатом, я никогда не пробовал лично.

Однако здесь может быть еще большая проблема. В вашей конфигурации также указывается preload параметр, который указывает, что страница готова к добавлению в список предварительной загрузки HSTS. Список предварительной загрузки HSTS - это список сайтов, использующих HSTS, жестко запрограммированный в браузерах. Это означает, что невозможно обойти HSTS даже при недавно установленном браузере, поскольку браузер заранее знает, какие сайты используют HSTS. Вам нужно вручную добавить свой сайт в этот список, поэтому маловероятно, что ваш домен находится в этом списке, но если вы не настраивали этот конкретный сайт, вы никогда не узнаете, что кто-то сделал до вас. В этом случае единственный способ обойти это - просто включить HSTS на каждом поддомене example.com.