Я пытаюсь протестировать свой сайт на этапе разработки, прежде чем запустить его. Очевидно, у него нет такого же сертификата. Когда я пытаюсь зайти с поддоменом 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.