NGINX ssl + isp manager + $_SERVER['HTTPS']

Тема в разделе "Mod Rewrite / htaccess / ЧПУ", создана пользователем ZiX, 12 ноя 2014.

Статус темы:
Закрыта.
  1. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.378
    Симпатии:
    562
    Всем привет! Стоит isp 4 и 5. ssl в них через nginx. Обе панели настроены как nginx + apache + fastCGI.
    Внимание вопрос... $_SERVER['https'] отсутствует...а мне она нужна для определения типа соединения. Именно она.(Для PrestaShop)
    Подозреваю что для корректной работы ssl надо ещё и в apache будет прописать.
    Например на vesta cp всё работает норм. там ssl и в apache и в nginx
    Заранее спасибо за помощь!
     
  2. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    Убедился, что за nginx эта переменная не определяется корректно.
    У самого вставала такая проблема, но не решилась, задавал на другом форуме:
    http://www.html.by/threads/33461-Kak-uznat-po-kakomu-protokolu-obratilis-k-sajtu-iznutri-PHP
    В другом месте дают другой, вроде дельный, совет, который не проверял:
    http://stackoverflow.com/questions/11650640/why-isnt-serverhttps-set-to-1
    //UPD А чего переменная маленькими буквами? Это ж не винда, где «без разницы»? Д.б. $_SERVER['HTTPS']
     
    Последнее редактирование: 12 ноя 2014
  3. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    А что на таком сервере вернёт код:
    PHP:
    var_dump($_SERVER);
    Я не из праздного любопытства спрашиваю.
    Можешь критичные данные, к примеру, имя домена заменить и приложить var_dump($_SERVER);
     
    Последнее редактирование: 6 июн 2015
  4. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.378
    Симпатии:
    562
    вот
     

    Вложения:

  5. kanaps

    kanaps Создатель

    Регистр.:
    19 ноя 2013
    Сообщения:
    17
    Симпатии:
    9
    Сам 2 недели назад с этим мучался..
    подобная хрень встретилась на одном из ру хостингов.
    искал по форумам и проблема не популярная и ответов небыло.
    есть старая версия престашопа (2008-2010 года) где похожая проблема решалась, когда не учли $_SERVER['https'] и на гите баг этот изменяли...

    решил вопрос:
    отредактировал функцию (не помню в каком файле) которая дополнительно проверяет по $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'

    ребята с друпала пишут, что
    https://www.drupal.org/node/313145 ошибка не в хосте, а из за reverse proxy для балансировки нагрузки. они и перекрывают виденье серввера о https / http запросе.

    вот тут последним постом рекомендуют добавить вот это чтоб prestashop распознал https
    http://forge.prestashop.com/browse/PSCFI-1575

    config/config.inc.php
    if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) AND $_SERVER['HTTP_X_FORWARDED_PROTO']== 'https')
    { $_SERVER['HTTPS'] = 'on'; }


    если помог - поставь лайк ;-)
     
  6. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.404
    Симпатии:
    1.185
    Это первое, что приходит на ум, но решением проблемы не является, скорее затычкой.
    Если скрипт требует захода по https, то наверное не просто так, а заголовок, начинающийся с HTTP_, очень легко подменить...

    Надо менять конфиг nginx
    Но если в случае обработки php скриптов nginx`ом через fastcgi_pass достаточно добавить
    Код:
    fastcgi_param HTTPS on;
    в разделе
    Код:
    server {
      listen *:443;
    то как быть в случае с proxy_pass я так и не понял. Возможно вот этот плагин поможет http://wiki.nginx.org/HttpHeadersMoreModule надо проверять...
     
    ZiX нравится это.
  7. ZiX

    ZiX Коддинг, Парсинг

    Moderator
    Регистр.:
    9 июл 2011
    Сообщения:
    1.378
    Симпатии:
    562
    я сделал универсальнее и не трогая престу)
    в nginx
    PHP:
                   set $ssl_state 'Off';
            if (
    $scheme ~* https) {
                
    set $ssl_state 'On';
            }
            
    proxy_set_header SSL $ssl_state;
     
    kanaps и latteo нравится это.
Статус темы:
Закрыта.