2015-05-12 12 views
11

Sto testando un nuovo sito di gestione temporanea con bilanciamento del carico e https è impostato a livello di bilanciamento del carico, non a livello di sito. Inoltre, questo sito sarà sempre https quindi non ho bisogno di remote richiede attributi https ecc. L'url mostra https ma non è disponibile nel mio codice. Ho alcuni problemi a causa di questo motivoRequest.Url.Scheme fornisce http invece di https sul sito con bilanciamento del carico

Request.Url.Scheme è sempre http:

public static string GetProtocol() 
     { 
      var protocol = "http"; 
      if (HttpContext.Current != null && HttpContext.Current.Request != null) 
      { 
       protocol = HttpContext.Current.Request.Url.Scheme; 
      } 
      return protocol; 
     } 

Stessa cosa con questo URL di base, il protocollo è http

public static string GetBaseUrl() 
     { 
      var baseUrl = String.Empty; 

      if (HttpContext.Current == null || HttpContext.Current.Request == null || String.IsNullOrWhiteSpace(HttpRuntime.AppDomainAppPath)) return baseUrl; 

      var request = HttpContext.Current.Request; 
      var appUrl = HttpRuntime.AppDomainAppVirtualPath; 

      baseUrl = string.Format("{0}://{1}{2}", request.Url.Scheme, request.Url.Authority, appUrl); 

      if (!string.IsNullOrWhiteSpace(baseUrl) && !baseUrl.EndsWith("/")) 
       baseUrl = String.Format("{0}/", baseUrl); 

      return baseUrl; 
     } 

Ora il problema più grande fa riferimento ai file js e ai caratteri google a cui si fa riferimento nei fogli di stile. Sto usando // qui senza http o https ma questi sono trattati come http e vedo il messaggio bloccato di contenuto misto in FireBug.

Come posso risolvere questo problema?

+2

È bilanciamento del carico che chiude la connessione HTTPS e connettersi ai singoli server Web con http? Alcuni load balancer lo fanno per scaricare l'elaborazione https. –

+0

Sì. È un bilanciatore del carico Barracuda. –

risposta

8

Come hai detto, la terminazione HTTPS viene eseguita a livello di bilanciamento del carico ("https è impostato a livello di bilanciamento del carico"), il che significa che lo schema originale non può raggiungere in base alla configurazione di loadbalancer.

Sembra che nel tuo caso LB sia configurato per parlare continuamente al sito tramite HTTP. Pertanto, il tuo sito non vedrà mai lo schema originale su HttpContext.Request.RawUrl (o proprietà simili).

Fix: di solito quando LB, proxy o CDN configurato in modo tale ci sono ulteriori intestazioni che specificano schema originale e probabilmente altri parametri della richiesta in entrata come URL completo, IP del client, che sarà non direttamente visibile al sito dietro tale dispositivo proxy.

+0

X-FORWARDED-FOR dovrebbe conservare l'IP del client originale se il bilanciamento del carico è configurato correttamente. –

+1

'Absolute Uri' mi dà l'URL con https ' HttpContext.Request.Headers ["X-Forwarded-Proto"] 'è vuoto ' HttpContext.Request.Headers ["X-Forwarded-For"] 'mi dà un solo ip, senza https –

+0

@learning ... Se vuoi che gente di SO parli con il tuo team di networking/operazioni e trovi come sono configurati i bilanciatori di carico e quali (se esistono) intestazioni inviate al tuo sito assicurati di fornire le informazioni di contatto nel tuo post (probabilmente non sarebbe utile per la maggior parte dei visitatori). In alternativa puoi parlare direttamente con loro. –

0

So che questa è una vecchia questione, ma dopo aver incontrato lo stesso problema, mi ha scoperto che se guardo al UrlReferrer proprietà dell'oggetto HttpRequest, i valori riflettono ciò che è stato effettivamente nella barra degli indirizzi del browser client.

Così, per esempio, con UrlReferrer ho ottenuto:

Request.UrlReferrer.Scheme == "https" 
Request.UrlReferrer.Port == 443 

Ma per la stessa richiesta, con la proprietà Url ho ottenuto il seguente:

Request.UrlReferrer.Scheme == "http" 
Request.UrlReferrer.Port == 80 
+1

Ricordare che l'URL referrer non è sempre affidabile/non può essere sempre considerato attendibile: https://stackoverflow.com/questions/6023941/how-reliable-is-http-referer – keithl8041

+0

Sì, sfortunatamente mi sono imbattuto in questo problema molto tempo dopo aver postato la mia risposta ... – Alejo

Problemi correlati