2016-12-02 21 views
5

Arka uçuma ulaşmadan önce SSL'yi sonlandırmak için AWS CloudFront kullanıyorum ve Nginx'te proxy_set_header değerini ayarlamak için bu trafiği CloudFront dışı trafikten ayırt etmeniz gerekiyor.Nginx set proxy_set_header başlık mevcutsa

Bunu yapmanın en iyi yolunun, X-Amz-Cf-Id (added by CloudFront) üstbilgisini (added by CloudFront) kontrol etmek ve mevcut olduğunda proxy_set_header değerini ayarlamak olduğuna inanıyorum. Ancak, bir Nginx if deyiminde proxy_set_header değerini ayarlamak mümkün olmadığının farkındayım. Bu başlık varken kullanılabilir

nasıl proxy_set_header değer ayarlayabilirsiniz?

+0

Eğer Amazon bulut önünde bu başlığı ayarlamak değil mi? – Seb

+0

Teşekkürler @seb, özel üstbilgileri header name = 'proxy_set_header' ve value =' X-Forwarded-Proto https' olarak ayarlamayı denedim ancak beklendiği gibi çalışmıyor. Bunu Nginx yapılandırmamın belirli bir satırına eklemem gerekiyor, bu yüzden yaklaşımın işe yaramadığını düşünmeyin. Nihai amacım, CF bağlantılarının HTTPS üzerinden yapıldığını söylemektir. – Manonthemoon

+0

Bulut ön kullanmayın, ama hızlı arama bana bu sonucu verdi: bulut ön ayarlamak yapabiliyor Yani http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html başlıkları. Bulutun ön tarafı başlığını ayarlayabilirse, üstbilgiyi nginx'e göre ayarlamak daha mantıklı olacaktır. Veya bu çözümü arayabilir ve bulabilirsiniz: http://serverfault.com/questions/506972/nginx-why-i-cant-put-proxy-set-header-inside-an-if-clause – Seb

cevap

2

genel cevabı, if değişkenleri ayarlayın ve sonra değişken kullanabilirsiniz olmasıdır. Şunun gibi:

set $variable ""; 
if ($http_X_Amz_Cf_Id) { 
    set $variable "somevalue"; 
} 
proxy_set_header someheader $variable; 
4

if ifadeleri özel başlıkları çünkü onlar may cause statements outside the if block to be ignored ayarı için iyi bir yol değildir.

Aynı sorunlarına yatkın olmadığı bunun yerine bir map directive kullanabilirsiniz.

# outside server blocks 
map $http_X_Amz_Cf_Id is_cloudfront { 
    default "No"; 
    ~. "Yes"; # Regular expression to match any value 
} 

Ardından: o SSL sonlandırıldığında

# inside location block 
proxy_set_header X_Custom_Header $is_cloudfront; 
+0

Harita önermek için kabul edilebilir bir cevap olmalı. Test etmedim. "Evet" olsa da. – Shrey

+0

En azından şu anki nginx sürümünde bir '$' eksik görünüyor: 'harita $ http_X_Amz_Cf_Id $ is_cloudfront' – Julien