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

Nginx не загружает css / js / images в https - заблокирована загрузка смешанного активного содержимого

Я запускаю ubuntu 14.04 с Nginx 1.8.0. При открытии веб-страниц в https страницы кажутся неработающими, так как css / js / images не загружаются. Я получаю эту ошибку "Blocked loading mixed active content"

Это мое nginx.conf: https://github.com/adithyakhamithkar/ansible/blob/master/roles/nginx/templates/nginx.j2

Это мой файл виртуального хоста: https://github.com/adithyakhamithkar/ansible/blob/master/roles/nginx/templates/virtualhost_ssl.j2

Может ли кто-нибудь посоветовать мне, как это исправить.

Смешанное активное содержимое теперь по умолчанию заблокировано в Firefox 23 и выше. Не уверен насчет других браузеров

Что такое смешанный контент?

Когда пользователь посещает страницу, обслуживаемую через HTTP, его соединение открыто для перехвата и атак типа «злоумышленник в середине» (MITM). Когда пользователь посещает страницу, обслуживаемую по HTTPS, его соединение с веб-сервером аутентифицируется и шифруется с помощью SSL и, следовательно, защищается от перехватчиков и атак MITM.

Однако, если страница HTTPS включает содержимое HTTP, часть HTTP может быть прочитана или изменена злоумышленниками, даже если главная страница обслуживается по HTTPS. Если на странице HTTPS есть содержимое HTTP, мы называем это содержимое «смешанным». Веб-страница, которую посещает пользователь, зашифрована только частично, поскольку часть содержимого извлекается в незашифрованном виде по HTTP. Блокировщик смешанного содержимого блокирует определенные HTTP-запросы на HTTPS-страницах.

Похоже, вы связываете статический контент без SSL. Вы должны связать свой контент, например

<a href='//host.com/file.png>

Если вам нужна ссылка с другого хоста.

Не исправить с помощью конфигурации nginx

Рассмотрим следующий html-файл:

  <html>
    <head>
    </head>
    <body>
      <img src="http://example.com/some/image.png">
    </body>
  </html>

Если этот html-файл обслуживается через https - он будет всегда генерировать предупреждение о смешанном содержании. Попытка исправить последующий запрос на /some/image.png не будет работать, запрос заблокирован браузером и не доходит до сервера.

Исправьте HTML

Единственное эффективное решение - исправить исходный код html для основного запроса, чтобы он запрашивал все ресурсы из https:// также т.е. измените html на это:

  <html>
    <head>
    </head>
    <body>
      <img 
        src="/some/image.png" 
        alt="same domain and port as this html page please"
      />
    </body>
  </html>

Или это:

  <html>
    <head>
    </head>
    <body>
      <img 
        src="https://example.com/some/image.png" 
        alt="explicit https" 
      />
    </body>
  </html>

В комментариях вы упомянули wordpress в качестве примера; для установки Wordpress единственное, что требуется (в принципе, на практике можно ожидать некоторого возни), - это изменить URL сайта так что wordpress считает https://example.com как корневой URL для установки.