Nginx HTTP_X_FORWARDED_PROTO üstbilgisini nasıl iletir?


18

Kurulumumu şuradan takip ediyorum

nginx > apache/php

için

haproxy > nginx > apache/php

(derlenmiş ssl desteği ile 1.5-dev18 haproxy kullanarak)

HTTP_X_FORWARDED_PROTO üstbilgisini ayarlamak için hem nginx hem de haproxy doğru şekilde ayarlanmıştır. Ancak, nginx ssl trafiğini haproksiden aldığında, bağlantıyı http olarak görür ve üstbilgiyi böyle ayarlar.

Nginx'i varsa HTTP_X_FORWARDED_PROTO üstbilgisini iletmek için nasıl ayarlayabilirim, ancak aksi takdirde bağlantıya göre ayarlamaya devam edebilirim?

Yanıtlar:


36

Bunu nasıl çözeceğimi anladım. Sorun nginx benim yapılandırma bu satırında haproxy tarafından ayarlanan üstbilgi üzerine yazıyordu oldu:

proxy_set_header X-Forwarded-Proto $scheme;

Bu ekleyerek düzeltildi:

map $http_x_forwarded_proto $thescheme {
     default $scheme;
     https https;
 }   

ve yeni şemayı kullanmak için proxy_set_header satırını değiştirmek:

proxy_set_header X-Forwarded-Proto $thescheme;

Bir şey kaçırmadıkça, önceki ve sonraki proxy_set_headersatırlarınız aynıdır.
Wilfred Hughes

1
$schemevs $thescheme.
Arlen Beiler

Bazı nadir durumlarda bu güvensiz değil mi? Bir web tarayıcı HAProxy bir HTTP isteği gönderir ve HAProxy sonra Nginx için HTTPS isteği gönderirse - o zaman default $schemedurum ayarı, olacak $theschemeaslında (HAProxy için) isteği güvensiz HTTP olmasına rağmen HTTPS. - Bundan kaçınmak için ne olacak: default $http_x_forwarded_proto; '' $scheme;eğer haproxy HTTP diyorsa buna saygı duyulur.
KajMagnus

Burada önerilmektedir: stackoverflow.com/a/21911864/694469 (ie default $http_x_forwarded_proto;).
KajMagnus


1

Sadece yorum yapamam, bu yüzden bunu bir cevap olarak gönderirim: Nginx yapılandırmanızın bir kısmını veya tamamını bize verebilir misiniz, böylece neyin yanlış olduğunu görebilir miyiz? Muhtemelen HAProxy yapılandırmanız da?

Aklıma gelen ilk sorun HAProxy'nizin SSL sonlandırması yapıyor olması. Özetlemek gerekirse, arka uç sunucularınızı boşaltmak için bir yük dengeleyici tüm ssl işini yapacak şekilde yapılandırılabilir ve daha sonra HTTP'de arka uç sunucularınızla iletişim kurabilir. Buradaki şema gibi: http://blog.exceliance.fr/2012/09/10/how-to-get-ssl-with-haproxy-getting-rid-of-stunnel-stud-nginx-or-pound/

Sorunuza iyi bir cevap vermek için, http <> https yapılandırmanızda geri döngü sorununuz olup olmadığını kontrol edebilir misiniz? Belki http'yi http'ye, https'yi https'ye yönlendirebilir ve sonra http'yi https'ye yönlendirmeye zorlayabilirsiniz.

HAProxy yapılandırmanızda ssl düz geçişini etkinleştirip etkinleştirmediğinizi de kontrol edebilir misiniz?


Sorununuzu çözdünüz mü?
Yannovitch

1
Bunu anladım. Cevabınız doğrudan yardımcı olmadı, ancak bu ikinci bağlantı onu çözmenin bir yolunu bulmama yardımcı oldu. Teşekkürler.
Echo, Reinstate Monica'ya
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.