Backend uygulaması mutlak URL'lerde http:// üretiyor; nasıl düzeltirim?
Kısa cevap
Uygulama TLS'in TR7'de sonlandırıldığını bilmediği için bağlantıları ve yönlendirmeleri http:// ile üretir; TR7 bu bilgiyi kendiliğinden iletmez. Kalıcı çözüm, Set HTTP Header aksiyonuyla (Execution Level = On request, Conditions = If SSL is terminated) X-Forwarded-Proto: https başlığını eklemek ve uygulamayı bu başlığa güvenecek şekilde ayarlamaktır. Uygulama değiştirilemiyorsa yönlendirmelerdeki Location başlığı Replace HTTP Header Content aksiyonuyla https:// olarak yeniden yazılır, sayfa içindeki bağlantılar Modify Response Content ile değiştirilir. Kurum Servisi TLS destekliyorsa SSL Service açılarak uygulamanın isteği doğrudan HTTPS olarak görmesi de sağlanabilir. Aksiyonlar ancak vService'e eklendiğinde çalışır.
Sorun: Uygulama HTTPS Sitede http:// Bağlantılar Üretiyor
TLS TR7'de sonlandırıldığından Kurum Servisine giden istek varsayılan olarak şifresizdir; uygulama isteği HTTP sanıp yönlendirmelerde ve sayfalarda http:// adresler üretir. Bu durum karışık içerik (mixed content) uyarılarına, yönlendirme döngülerine (Sonsuz yönlendirme döngüsü (redirect loop) oluştu; neden?) ve Secure çerezlerin gönderilmemesi yüzünden oturum kaybına (Uygulamam kullanıcıyı sürekli login ekranına atıyor (oturum kayboluyor); neden?) yol açar. TR7, isteğin özgün protokolünü Kurum Servisine kendiliğinden bildiren bir başlık eklemez.
Çözüm: Dört Yöntem
Yöntemler birbirinin alternatifidir; uygulama proxy başlığını okuyabiliyorsa Yöntem 1 tek başına yeterlidir. Uygulama değiştirilemiyorsa Yöntem 2 ve Yöntem 3 birlikte kullanılabilir.
| Durumunuz | Uygun yöntem |
|---|---|
| Uygulama proxy başlığını okuyabiliyor | Yöntem 1: X-Forwarded-Proto |
| Uygulama değiştirilemiyor, sorun yönlendirmelerde | Yöntem 2: Location'ı yeniden yazmak |
| Uygulama değiştirilemiyor, sorun sayfa içindeki bağlantılarda | Yöntem 3: Modify Response Content |
| Kurum Servisi TLS ile dinleyebiliyor | Yöntem 4: SSL service |
Yöntem 1: X-Forwarded-Proto Önerilen
- Nasıl çalışır TR7, HTTPS ile gelen isteklere
X-Forwarded-Proto: httpsbaşlığını ekler; uygulama bu başlığa görehttps://adres üretir. - Nerede açılırLoad Balancer → Actions → Set HTTP Header; ardından vService → Actions
- Gereksinim Uygulamanın ya da web sunucusunun proxy başlıklarına güvenecek şekilde ayarlanması
- vService tipi HTTP
- Kurum Servisi tarafı Uygulamada "forwarded headers" ya da "trusted proxy" ayarı açılır ve TR7'nin adresi güvenilir proxy olarak tanımlanır.
Adım adım yapılandırma
Load Balancer → Actions ekranında Add butonuna tıklanır.
Action Type = Set HTTP header, Execution Level = On request, Header to Edit = X-Forwarded-Proto, Header Content = https girilir.
Conditions alanında hazır If SSL is terminated koşulu seçilir; böylece başlık yalnızca HTTPS ile gelen isteklere eklenir.
Add butonuna tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilir ve Edit butonuna tıklanır.
Details açılır; Actions kutusu işaretlenir ve açılan alanda oluşturulan aksiyon seçilir. Aksiyon vService'e eklenmedikçe çalışmaz.
Save butonuna tıklanır. Ardından uygulamada proxy başlıklarına güvenme ayarı açılır; bu ayar TR7 dışındadır.
Aynı vService'te 80 portu HTTP → HTTPS yönlendirmesi yapmıyor ve şifresiz isteklere de yanıt veriyorsa, istemcinin kendisi gönderdiği bir X-Forwarded-Proto: https başlığı uygulamaya ulaşabilir. Bunu önlemek için aynı adımlarla If SSL is NOT terminated koşullu ikinci bir Set HTTP Header aksiyonu X-Forwarded-Proto değerini http yapar.
Doğrulama
Yönlendirme yapan bir adres istenir: curl -sI https://www.example.com/giris
Location: https://…vService Debug mode'dayken Debug Mode Logs → Request sekmesinde kaydın başlıklarına bakılır.
X-Forwarded-Proto: https · eklenen başlık işaretiyleYöntem 2: Location'ı Yeniden Yazmak
- Nasıl çalışır Yanıt aşamasında Location başlığındaki
http://adres düzenli ifadeylehttps://olarak yeniden yazılır. - Nerede açılırLoad Balancer → Actions → Replace HTTP Header Content; ardından vService → Actions
- Gereksinim Uygulamada değişiklik gerekmez.
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Actions ekranında Add butonuna tıklanır.
Action Type = Replace HTTP Header Content, Execution Level = On response, Header to Replace = Location, Regex to Match = ^http://(.*)$, Match Type = Replace whole header, Replacement Content = https://\1 girilir. Uygulama iç ad ve port üretiyorsa desen buna göre yazılır: Regex to match = ^http://ic-sunucu:8080/(.*)$, Replacement Content = https://www.example.com/\1. Replacement content Smart Variable desteklemez; yakalanan grup \1 biçiminde yazılır.
Add butonuna tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilir ve Edit butonuna tıklanır.
Details açılır; Actions kutusu işaretlenir ve açılan alanda oluşturulan aksiyon seçilir.
Save butonuna tıklanır.
Doğrulama
Yönlendirme yapan adres istenir: curl -sI https://www.example.com/giris
Location: https://…Yöntem 3: Modify Response Content
- Nasıl çalışır Yanıt gövdesindeki
http://bağlantılar Replace moduylahttps://olarak değiştirilir. - Nerede açılırLoad Balancer → Actions → Modify Response Content; ardından vService → Actions
- Gereksinim Uygulamada değişiklik gerekmez.
- vService tipi HTTP
- Etkisi Aksiyon vService'te olduğu sürece Kurum Servisinden yanıtlar sıkıştırılmamış istenir.
Adım adım yapılandırma
Load Balancer → Actions ekranında Add butonuna tıklanır.
Action Type = Modify Response Content, Modify Type = Replace, Query Type = String, Mask Query = http://, New Content = https:// girilir. Query type varsayılanı RegEx'tir.
Conditions alanında yalnızca HTML yanıtlarını seçen bir koşul (Content-Type başlığı text/html içerir) seçilir; koşul seçilmezse aksiyon bütün yanıtlara uygulanır.
Add butonuna tıklanır.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilir ve Edit butonuna tıklanır.
Details açılır; Actions kutusu işaretlenir ve açılan alanda oluşturulan aksiyon seçilir.
Save butonuna tıklanır. Sayfa içi kaynaklar için ayrıntılı seçenekler: HTTPS'e geçtikten sonra sayfalarda "mixed content" uyarısı çıkıyor; nasıl çözerim?
Doğrulama
Tarayıcıda sayfa kaynağındaki bağlantılara bakılır.
https:// bağlantılarYöntem 4: SSL Service
- Nasıl çalışır TR7 Kurum Servisine TLS ile bağlanır; uygulama isteği doğrudan HTTPS olarak görür.
- Nerede açılırLoad Balancer → Backend Services → SSL Service
- Gereksinim Kurum Servisinin TLS ile dinlemesi (ör. 443 portunda sertifikayla)
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Backend Services ekranında Kurum Servisi seçilir ve Edit butonuna tıklanır.
SSL Service işaretlenir; Kurum Servisi TLS'i başka bir portta dinliyorsa Port alanı o port yapılır (ör. 443). Seçeneğin ayrıntıları: SSL Service seçeneği ne yapar; backend'e şifreli bağlanmak için ne gerekir?
Formun altındaki Edit butonuna tıklanır.
Doğrulama
Yönlendirme yapan adres istenir: curl -sI https://www.example.com/giris
Location: https://…Sık Yapılan Hatalar
- Başlığı ekleyip uygulamayı ayarlamamak. Uygulama başlığa güvenmedikçe davranış değişmez.
- Replacement content'e
$1ya da Smart Variable yazmak. Replacement content yalnızca sabit metin ve\1biçiminde grup başvurusu alır. - Modify response content'te
\1kullanmak. New content düz metindir; RegEx modunda da geri başvuru yazıldığı gibi çıktıya geçer. - CSP upgrade-insecure-requests'in yönlendirmeleri düzelteceğini sanmak. Bu yöntem yalnızca sayfa içi kaynakları yükseltir; Location başlığını değiştirmez.
- Location'ı düzeltmeden yalnızca TR7'nin HTTP → HTTPS yönlendirmesine güvenmek.
https → http → httpszinciri oluşur (Sonsuz yönlendirme döngüsü (redirect loop) oluştu; neden?). - Aksiyonu vService'e eklemeyi unutmak. Actions ekranında oluşturulan aksiyon vService'in Actions alanına eklenmedikçe çalışmaz (Action'ım neden tetiklenmiyor?).
Dokümantasyonda nasıl yapılır
