Обнаружение HTTPS по сравнению с HTTP на сервере, передающем ничто полезное обратно

Возможно, что-то подобное? Испытано.

plaintext;
}, $dom->find('div')));

echo $result['body'];

    
Header
this is a paragraph
this is another paragraph

enter image description here

5
задан Community 23 May 2017 в 12:19
поделиться

2 ответа

Ключевое слово - подсистема балансировки нагрузки

Проблема сводится к тому, что подсистема балансировки нагрузки обрабатывает шифрование SSL / дешифрование, и это абсолютно очевидно для веб-сервера.

Request:  Client -> 443or80 -> loadbalancer -> 80 -> php
Response: PHP -> 80 -> loadbalancer -> 443or80 -> Client

Реальный вопрос здесь, "Вы управляете конфигурацией подсистемы балансировки нагрузки?"


Если Вы делаете, существует пара способов обработать его. Настройте подсистему балансировки нагрузки, чтобы иметь отдельные сервисные определения для HTTP и HTTPS. Затем отправьте Трафик HTTP для портирования 80 из веб-серверов и Трафика HTTPS для портирования 81 из веб-серверов. (порт 81 не используется ничем больше).

В апаче настройте два различных виртуальных хоста:

<VirtualHost 1.2.3.4:80>
   ServerName foo.com
   SetEnv USING_HTTPS 0
   ...
</VirtualHost>

<VirtualHost 1.2.3.4:81>
   ServerName foo.com
   SetEnv USING_HTTPS 1
   ...
</VirtualHost>

Затем переменная среды USING_HTTPS будет также 1|0, В зависимости от которого виртуальный хост взял его. Это будет доступно в $_SERVER массив в PHP. Разве это не прохладно?


Если у Вас нет доступа к конфигурации Подсистемы балансировки нагрузки, то вещи немного более хитры. Не будет способа окончательно знать, используете ли Вы HTTP или HTTPS, потому что HTTP и HTTPS являются протоколами. Они указывают, как соединиться и через какой формат отправить информацию, но в любом случае, Вы используете HTTP 1.1 для выполнения запроса. Нет никакой информации в фактическом запросе, чтобы сказать, является ли это HTTP или HTTPS.

Но не падайте духом. Существует несколько идей.

6-й параметр к PHP's setcookie() функция может дать клиенту команду отправлять cookie ТОЛЬКО по Подключениям HTTPS (http://www.php.net/setcookie). Возможно, Вы могли установить cookie с этим параметром и затем проверить на него по последующим запросам?

Другая возможность состояла бы в том, чтобы использовать JavaScript для обновления ссылок на каждой странице в зависимости от протокола (добавляющий ПОЛУЧИТЬ параметр).

(ни одно из вышеупомянутого не было бы пуленепробиваемо),

Другая прагматическая опция состояла бы в том, чтобы получить Ваш SSL на другом домене, такой как secure.foo.com. Затем Вы могли обратиться к приему VirtualHost выше.


Я знаю, что это не самая легкая проблема, потому что я имею дело с нею в течение дня (загрузка сбалансировала веб-кластер позади подсистемы балансировки нагрузки Cisco CSS с модулем SSL).

Наконец, можно всегда брать перспективу, которую веб-приложение должно переключить на режим SSL при необходимости, и доверять пользователям для НЕ положения обратно его (в конце концов, это - их данные по строке (обычно)).

Надежда это помогает немного.

23
ответ дан 18 December 2019 в 06:04
поделиться
$ _SERVER ["HTTPS"] не там, включен или нет, неважно, при рассмотрении сайта через SSL или не-SSL. По некоторым причинам хостинг принял решение обслуживать все зашифрованные Запросы HTTPS, но вниз порт 80. И таким образом, $ _SERVER ["HTTPS"] никогда не включен, не там, просто никакая полезная обратная связь на той точке сервера. Так, чтобы параметр был всегда быть пустым.

Необходимо удостовериться, что у поставщика есть следующая строка в записи VHOST для сайта: SSLOptions +StdEnvVars. Та строка говорит Apache включать переменные SSL в среду для Ваших сценариев (PHP).

4
ответ дан 18 December 2019 в 06:04
поделиться
Другие вопросы по тегам:

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