PHP HTTPS isteklerini algılama

3 Cevap php

Ben yaşıyorum sorun HTTPS ve dinlenme HTTP tekmeledi tarafından korunan bir web sitesinin bazı adresler tutmak için ihtiyacı ile ilgisi yoktur.

Normalde, sahip $_SERVER['HTTP_HTTPS'] veya $_SERVER['HTTPS'] (Apache sizin lezzet bağlı olarak). Ayrıca bağlantı noktasını kontrol edebilirsiniz - HTTPS için normal trafik ve 443 80 bulunuyor.

Benim sorunum certificate sits on the loadbalancer, ve tüm bu değişkenler kullanılamaz olmasıdır, ve web sunucusu http://www.foo.com noktası 80 üzerinde görür., Bu düzeltmenin bir yolu üzerindeki trafik göndermek için LoadBalancer anlatmak için farklı bir port, ama ben yük dengeleyici gelen HTTPS algılamak için başka yollar vardır acaba?

3 Cevap

Yük dengeleyici SSL bağlantısı diğer ucu ise, yük dengeleyici açıkça sağlayan herhangi bir daha fazla bilgi alınamıyor. Ben tüm HTTP başlıklarını dökümü ve bakmak, bir http başlık ekleyerek zaten yapıyor olabilir için giderdim.

Başka bir çözüm olarak, URL tabanlı yük dengeleyici üzerinde yeniden yönlendirme yapabilirsiniz.

Herkes bir Amazon AWS Elastik yük dengeleyici arkasında aynı sorunu varsa $_SERVER değişken içerir çünkü, çözüm basit:

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

Yani, protokol almak için, kullanabilirsiniz:

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

Lütfen LoadBalancer rediretion yapar ve 1 veya 2 ayarını force_ssl ayarlarsanız joomla zaman http görüyor çünkü $ _SERVER ['HTTP_X_FORWARDED_PROTO'] joomla kullanıcıları için iyi bir çözüm gibi görünüyor, çünkü o zaman sonsuz bir döngü içinde sona erecek: