Иконка ресурса

Использование HTTPS (SSL) соединения с помощью .htaccess и mod_rewrite для XenForo

Практически все работает через "костыль", интересует как пофиксить это:
Код:
Mixed Content: The page at 'https://site.com/' was loaded over HTTPS, but requested an insecure stylesheet 'http://fonts.googleapis.com/css?family=Source+Sans+Pro:400,700'. This request has been blocked; the content must be served over HTTPS.
Искал искал, так и не нашел этого чуда в шаблонах...
 
https приходит на клоуд, https уходит на сервер, сервер правильно поднимает флаг и выставляет переменную https
А вот XenForo все равно запрашивает контент с http. Для этого и редирект.

mms, настройки стиля, модификации какие-то.
 
что XenForo достаточно плохо работает в ситуации с двойным доступом, когда доступ через https является приоритетным.
Да все хорошо работает. Первоначально я протупил когда вынес переменную без условий, да, признаю, это неправильно и костыли (в свое оправдание, я только пару дней двиг поставил, он для меня нов). С условием все работает прекрасно - обратились в http - получили http. Обратились в https - получили https. Все замечательно.

настроить редирект с обычной версии на защищенную
Наша песня хороша, начинай сначала (с). Настроил человек редирект, дальше что. Движок то этого не понял и выдал http. Все что нужно - нужно научить движок понимать схему как и научить его понимать другие заголовки с ip, Это штатная задача, которая решается штатными средствами конфигурации движка. Более того, этот способ описан разработчиками cloudflare в рекомендациях к адаптации движков под этот сервис.

А вот XenForo все равно запрашивает контент с http. Для этого и редирект.
Не только запрашивает, а и отдает. Хочу посмотреть, как редиректом можно заставить движок отдавать в https. О_о.
 
Последнее редактирование:
А вот XenForo все равно запрашивает контент с http. Для этого и редирект.

mms, настройки стиля, модификации какие-то.
Это я понял. Поиск по шаблонам нечего не дал. По какому принципу это найти можно?
p.s. было около 5 таких трабл, все они нашлись, и легко устранились, а это ...

Разобрался, оказалось в настройках стиля: ef139865493c82aa50ec698530f48f96[1].png
 
Последнее редактирование:
Про какие условия идет речь, пропустил мысль?
В какой-то теме за https я влез с выставлением флага https и в принципе был заслуженно послан, дескать костыльно, а я в то время настраивал двиг под A+, если это кому-то о чем-то говорит, причем впереди стоит балансировщик, который протягивает по хостнейму на нужную ноду, разумеется по http. Чуть позднее при разборе полетов другого сервиса, вспомнил, что забыл за детект https. Дополнительно можно проверять HTTP_SCHEME, но конкретно для клоуда это излишне.
А вообще можно и порт проверять:
PHP:
$scheme = isset($_SERVER['HTTP_SCHEME']) ? $_SERVER['HTTP_SCHEME'] : (
     (
  (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ||
   443 == $_SERVER['SERVER_PORT']
     ) ? 'https' : 'http'
);
Суть в том, что нужно понять, по какому протоколу обращается клиент и ответить ему тем же. А вот на ответы сервера все наши редиректы до фонаря. Отсюда и разговор о теплом и мягком.

Разобрался, оказалось в настройках стиля:
Желательно указать не

http://fonts.googleapis.com/css***

а
//fonts.googleapis.com/css***
А еще лучше залить шрифт себе и поставить не абсолютную, а относительную ссылку.
 
  • Мне нравится
Реакции: mms
а я в то время настраивал двиг под A+
У меня тоже настроено на A+, на бесплатном тарифе клауда, без всяких костылей с суперглобальными переменными в php. Давайте теперь длиной члена начнем меряться?

Еще раз и я этот наитупейший холивар заканчиваю - не надо перекладывать задачи, которые должен выполнять фронтенд (nginx) на бэкэнд (php). Настройте нормально сервер, и вы сотню сайтов создадите проходящих тест SSL на А+, но конечно никто вам не мешает и дальше ходить со своей все растущей пачкой костылей, постоянно дописывая их в движки и возлагаю работу сервера на php.
 
Настройте нормально сервер
Прошу. Не словом, а делом
Ждем решение поставленной задачи от Exile, как нам нужно настраивать сервер.

Исходные условия:

2015.03.25_00h35m13s_016_.png

mms, разве не так стоит настройка в cloudflare ?

И никакого холивара, ни капли. Есть проблема и ни один редирект в мире не способен ее решить (кстати, редирект - это самый настоящий костыль, который рекомендуется всячески избегать, это +1 запрос и время на выполнение операции).
 
Последнее редактирование:
Smalesh, пример конфига от xenforomen выше, у меня примерно так же реализовано:
Код:
#user 'main' virtual host 'site.me' configuration file
server {
    server_name site.me;
    return 301 https://$server_name$request_uri;
    listen 11.11.11.11:80;
    listen [2000:b000:2:d0::200:8000]:80;
}
server {
    server_name site.me;
    charset UTF-8;
    disable_symlinks if_not_owner from=$root_path;
    index index.php index.html;
    root $root_path;
    set $root_path /var/www/main/data/www/site.me;
    ssi on;
    access_log /var/www/httpd-logs/site.me.access.log;
    error_log /var/www/httpd-logs/site.me.error.log notice;
    include /etc/nginx/vhosts-includes/*.conf;
    location / {
        try_files $uri $uri/ /index.php?$uri&$args;
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }
    location ^~ /library/ {
        internal;
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }
    location ^~ /internal_data/ {
        internal;
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }
    location @php {
        fastcgi_index index.php;
        fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]";
        fastcgi_pass unix:/var/www/php-fpm/main.sock;
        fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
        try_files $uri =404;
        include fastcgi_params;
    }
    listen 11.11.11.11:443;
    listen [2000:b000:2:d0::200:8000]:443;
    ssl on;
    ssl_certificate "/var/www/httpd-cert/main/site.me.crt";
    ssl_certificate_key "/var/www/httpd-cert/main/site.me.key";
}
Что еще требуется? Зайти к вам на сервер и настроить? Через ссылку в подписи, пожалуйста. Я уже отписал достаточно, в том числе и примеров конфигов, в рамках поддержки на форуме.

Конфиг в клауде и итог в приложенных скринах.
кстати, редирект - это самый настоящий костыль, который рекомендуется всячески избегать, это +1 запрос и время на выполнение операции
HSTS, у вас же A+. Ни единого запроса, браузер сразу грузит https. Да и откуда взяться ссылкам на http, если доступна будет только 1 версия - https? Поисковики по 301 за месяц базы обновят.
 

Вложения

  • 2015-03-25 01-42-07 Скриншот экрана.png
    2015-03-25 01-42-07 Скриншот экрана.png
    40.3 KB · Просмотры: 46
  • 2015-03-25 01-43-11 Скриншот экрана.png
    2015-03-25 01-43-11 Скриншот экрана.png
    38.1 KB · Просмотры: 43
меня примерно так же реализовано:
Стесняюсь спросить, где в этом конфиге обработка заголовка http_x_forwarded_proto?
Это конечно не костыли, ну ни капли ;)
Код:
  set $my_https "off";
  if ($http_x_forwarded_proto = "https") {
    set $my_https "on";
  }
  location ~ ^(.+\.php)(.*)$ {
    [...]
    fastcgi_param  HTTPS    $my_https;
  }
Но реально костыли. Через map делается красивее и правильней.
Да, не помню, как в fastcgi, а при проксировании https в http выставляю
Код:
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Ssl on;
Ну и на бекэнде ловлю и делаю что мне нужно. И cloudflarе, следуя стандартам, выставляет этот заголовок X-Forwarded-Proto, что бы клиент мог принять и обработать.

PS: с таким конфигом выше A не будет, для сравнения/примера свой, и то не оптимален, у меня wildcard и свои забабахи. Ключевое:
Код:
server {
    listen 443 ssl spdy;
    server_name hostname;
    resolver 127.0.0.1;
    ssl_stapling on;
    ssl on;
    ssl_certificate /usr/local/etc/nginx/ssl/hostname.pem;
    ssl_certificate_key /usr/local/etc/nginx/ssl/hostname.key;
    ssl_dhparam /usr/local/etc/nginx/ssl/dhparam.pem;
    ssl_session_timeout 24h;
    ssl_session_cache shared:SSL:2m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2;
    ssl_prefer_server_ciphers on;
    add_header Strict-Transport-Security "max-age=31536000;";
    add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:; report-uri /csp-report";
}
Вот как-то так.

Да и откуда взяться ссылкам на http, если доступна будет только 1 версия - https?
От старых браузеров.

А вот решение на map для nginx: ловим заголовок
Код:
map $http_x_forwarded_proto $https {
    default off;
    https on;
}
И передаем его php
Код:
fastcgi_param HTTPS $https;
И это и будет решением со стороны сервера. Этого я на конфигах, простите, но не увидел, и не у каждого есть возможность и знания ковырять конфиг (виртуальный хостинг или VDS c предустановленной панелью).
 
Последнее редактирование:
с таким конфигом выше A не будет
Выше приведен реальный пример рабочего сайта (моего) в связке с клаудом, получающего А+. С панелькой как вы выразились (ISPmanager), потому что на момент настройки сервера не было возможности все настраивать самому и "по канону" с учетом возможного съезда с хостинга сразу. Не все заголовки нужные есть, согласен - все остальные компенсируются клаудом, поэтому особого внимания им уделено не было. Но все работает как положено и получает А+. Может теперь и это оспорить попробуете?
 
Выше приведен реальный пример рабочего сайта (моего) в связке с клаудом, получающего А+.
Извините, но практически все ключевые настройки SSL висят на клауде. Связь между клаудом и хостом может идти в как в https, так и http - это пользователя как-то не волнует, даже если там самоподписные сертификаты на 10 лет.

Может теперь и это оспорить попробуете?
С чем спорить? Вот когда тестируемый IP будет совпадать с IP в listen nginx, тогда и будем говорить, вот, вот эта конфигурация оценивается так то и так то. А так да, в cloudflare специалисты сидят, у них все хорошо, даже если свои сертификаты ставишь (доступно на коммерческих тарифах). А так, с клоудом и такой конфиг прокатит.
Код:
server {
    listen     1.1.1.1:80;
    // кусь
}

Так cloudflare кто-то пользуется, кто-то не пользуется, дело то житейское. Но ваш конфиг как самостоятельная единица, мягко говоря, не дотягивает.

На базе вышеприведенного без всяких сторонних сервисов:
2015.03.25_02h33m33s_017_.png
Хотя тема ssl-тестов очень актуальна при настройке https - она покажет основные ошибки и даже методы их устранения. Так что будет в тему, ответит на многие вопросы "а почему у меня ругается на сертификат".
И не забывайте, если стоит бесплатный годовой сертификат, ставить бандл с промежуточным сертификатом, иначе некоторые браузеры будут ругаться. Это частая ошибка.
 
Последнее редактирование:
Простите что апаю данную тему, тут вроде бы все описали что нужно.
Просто я хотел добавить к тем, кто будет гуглить и найдет эту статью по запросам "cloudflare проблемы ssl", что даже на pro тарифных планах ssl может не "обновляться" (если это можно так выразить), до нескольких часов (хотя у них написано что все мгновенно). Для этого очень быстрым и простым способом будет (опять же относительно) просто отлючить домен, удалить домен и заного подключить к CloudFlare. И вам не придется ждать часы для активации \ подтверждения или что они там еще делают с SSL.

Не ради "по умничать" или как-то выделиться, а просто ради информации оставлю пару ссылок которые очень хорошо помогут.

  • выдающий А+ на различных сайтах для проверки сертификатов.
  • В гугле нет няшной зеленой иконки? gogle.png Тогда включите проксирование изображение и ссылок в админке XenForo
  • не переписывайте переменные PHP указанные тут в конфиг xenforo (мое субъективное мнение, и мне кажется Exile прав в этом вопросе, т.к. глобальная переменная может множество проблем спровоцировать)
  • Протестировать SSL / TLS может или
  • Пользователей желательно заставлять загружать все изображение во вложения.
  • Раз начали пользоваться SSL то редиректите весь трафик с http:// на https://
  • если вы пользуетесь cloudflare то вы можете настроить принудительный редирект на https в ЦП (page rules)
  • redirect-cloudflare.png
  • Если у вас NGINX, то можно сделать вот так:
    Код:
    server {
           listen         80;
           server_name    my.domain.com;
           return         301 https://$server_name$request_uri;
    }
    
    server {
           listen         443 ssl;
           server_name    my.domain.com;
    
           [....]
    }
 
neqste, Можете объяснить, что делает проксирование ссылок?
 
neqste, Можете объяснить, что делает проксирование ссылок?
Проксирование ссылок делает две вещи:

1. Вы сможете смотреть в админке сколько было переходов по ссылке;

2.Такие ссылки не индексируют поисковики...
 
При таком содержимом:
ErrorDocument 401 default
ErrorDocument 403 default
ErrorDocument 404 default
ErrorDocument 500 default
<IfModule mod_rewrite.c>
RewriteEngine On
# If you are having problems with the rewrite rules, remove the "#" from the
# line that begins "RewriteBase" below. You will also have to change the path
# of the rewrite to reflect the path to your XenForo installation.
#RewriteBase /xenforo
# This line may be needed to enable WebDAV editing with PHP as a CGI.
#RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(data/|js/|styles/|install/|favicon\.ico|crossdomain\.xml|robots\.txt) - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ [R=301]
</IfModule>

будут дубли:


site.ru/index.php
site.ru



Как их убрать? Чтобы доступно было только
 
valekor, ну может так
Код:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
 
Последнее редактирование:
Reborns, не работает. Или апач нужно ребутить?
 
А у меня такая беда. Взял сертификат на startssl.com Поставил на сервер. Поставил и в настройках чтоб форум открывался по https и в файле .htaccess Прописал. У меня с компа норма открывается с зелёным замочком, а вот с планшета говорит сначало что соединение не защищено и потом красый адрес!
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу