Nginx всегда переписывает на ssl даже на сайтах без ssl

У меня есть страница 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;
    }
}
1
задан 13 November 2015 в 18:57
1 ответ

Иногда что-то бросается в глаза, но вы их не видите ... Решение состоит в том, чтобы удалить выделенный флаг заголовка 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;
2
ответ дан 3 December 2019 в 20:45

Теги

Похожие вопросы