У меня есть страница example.com, на которой установлены сертификаты ssl, и все работает нормально. Вот ssl-часть конфигурации:
server {
listen 80 default_server;
server_name www.example.com example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 default_server;
server_name example.com www.example.com;
# strenghen ssl security
ssl_certificate /some/ssl/files.crt;
ssl_certificate_key /some/ssl/files.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Add headers to serve security related headers
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
Когда я просматриваю example.com все, я получаю страницу с ssl, поэтому все работает, как ожидалось.
Затем, когда я просматриваю " http://dl.example.com " со следующей конфигурацией сервера, nginx всегда переписывает ее на https://dl.example.com , что возвращает меня к https://example.com (так как dl.example.com не настроен на использование ssl, а https://example.com является сервером по умолчанию ). Но почему? Эта страница даже не настроена для использования какого-либо ssl, но она есть? Я предполагаю, что перезапись ssl с example.com каким-то образом кэшируется и также действительна для dl.example.com. Можно ли каким-то образом указать nginx, чтобы он избегал кеширования и даже не рассматривал использование какого-либо ssl для одного конкретного виртуального хоста?
server {
listen 80;
server_name dl.example.com;
root /var/www/dl.example.com/files/;
location / {
autoindex on;
}
}
Иногда что-то бросается в глаза, но вы их не видите ... Решение состоит в том, чтобы удалить выделенный флаг заголовка http с моего корневого веб-сайта vhost ниже:
[...] ** add_header Strict-Transport-Security "max-age = 15768000; includeSubDomains; preload;"; ** [...]
В основном это достаточно очевидно,как только вы посетите основной веб-сайт example.com, ваш браузер будет кэшировать заголовки http для этого домена, и, поскольку мы строго заставили использовать строгую транспортную безопасность, включая поддомены, мы столкнулись с этой проблемой (когда вы посетили основную сторону, все поддомены независимо от их конфигурация была вынуждена использовать ssl). После удаления этого флага заголовка и перезапуска nginx все снова работает нормально!
Надеюсь, этот ответ когда-нибудь поможет кому-нибудь там.
server {
listen 80 default_server;
server_name www.example.com example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 default_server;
server_name example.com www.example.com;
# strenghen ssl security
ssl_certificate /some/ssl/files.crt;
ssl_certificate_key /some/ssl/files.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_dhparam /etc/ssl/certs/dhparam.pem;
# Add headers to serve security related headers
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;