php apache https

Detección de solicitudes HTTPS en PHP



apache (3)

El problema que estoy teniendo tiene que ver con la necesidad de mantener algunas direcciones URL de un sitio web protegido por HTTPS y el resto pateado a HTTP.

Normalmente, tiene $_SERVER[''HTTP_HTTPS''] o $_SERVER[''HTTPS''] (dependiendo de su sabor de Apache). También puede verificar el puerto: 80 para el tráfico normal y 443 para HTTPS.

Mi problema es que el certificado se encuentra en el loadbalancer , y todas estas variables no están disponibles, y el servidor web ve http://www.foo.com en el puerto 80. Una forma de solucionar esto es decirle al loadbalancer que envíe el tráfico. un puerto diferente, pero me pregunto si hay otras formas de detectar HTTPS provenientes del equilibrador de carga.


Si alguien tiene el mismo problema detrás de Amazon AWS Elastic Load Balancer, la solución es simple porque la variable $_SERVER incluirá:

[HTTP_X_FORWARDED_PORT] => 443 [HTTP_X_FORWARDED_PROTO] => https

Entonces, para obtener el protocolo, podrías usar:

function getRequestProtocol() { if(!empty($_SERVER[''HTTP_X_FORWARDED_PROTO''])) return $_SERVER[''HTTP_X_FORWARDED_PROTO'']; else return !empty($_SERVER[''HTTPS'']) ? "https" : "http"; }


Si el equilibrador de carga es el otro extremo de la conexión SSL, no puede obtener más información de la que proporciona explícitamente el equilibrador de carga. Me gustaría agregar un encabezado http, ya puede estar haciendo eso, volcar todos los encabezados HTTP y mirar.

Como otra solución, puede hacer la redirección en el equilibrador de carga en función de la URL.


el $ _SERVER [''HTTP_X_FORWARDED_PROTO''] parece ser una buena solución para los usuarios de joomla porque si su loadbalancer hace la redirección y establece el ajuste force_ssl en 1 o 2, terminará en un bucle infinito porque joomla siempre ve http: