2014-01-20 11 views
13

Ist es möglich, Nginx $ Schema Wert auf "https" zu erzwingen, wenn nxinx hinter Load Balancer ausgeführt wird?

In meinem Szenario kümmert sich Load Balancer um HTTPS-Kommunikation mit Client und leitet Anfragen an Nginx als Raw http. Ich weiß, ich kann so etwas tun https zu erkennen

set $my_scheme "http"; 
if ($http_x_forwarded_proto = "https") { 
    set $my_scheme "https"; 
} 

aber ich bin nur neugierig, ob es so etwas wie real_ip_header Funktion für IPs ist.

Gibt es auch einige Header, die ich bei der Erkennung von https manuell aktualisieren muss?

Antwort

18

Unser Setup ist das gleiche wie Sie, nur map statt if/set mit (wie vom nginx devs empfohlen).

# Sets a $real_scheme variable whose value is the scheme passed by the load 
# balancer in X-Forwarded-Proto (if any), defaulting to $scheme. 
# Similar to how the HttpRealIp module treats X-Forwarded-For. 
map $http_x_forwarded_proto $real_scheme { 
    default $http_x_forwarded_proto; 
    ''  $scheme; 
} 

P.S. Ich stimme zu, ein real_scheme Modul wäre nett!

0

versuchen, etwas wie folgt aus:

location/{ 
    ... 
    proxy_set_header X-Real-IP   $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $my_scheme; 
    proxy_set_header X-Forwarded-Ssl $my_ssl 
    ... 
} 
Verwandte Themen