nginx upstream_http_ değişkeninde koşullu başlık ekle


19

Ben oldukça birkaç site vekilleri nginx üzerinde ters proxy var. Kısa süre önce SSL özellikli tüm web siteleri için HTTP Sıkı Aktarım Güvenliği'ni etkinleştirdim. Şimdi bunun etkinleştirilmesini istemeyen bir sitem var.

Yukarı Strict-Transport-Securityakışımın bana zaten bir başlık gönderirse basit bir kontrol yapacağımı düşündüm ve eğer değilse, sadece bir tane ekleyin. Bu şekilde, yukarı max-age=0akışım, proxy tarafından HSTS'nin etkinleştirilmesini önlemek için içeren bir STS başlığı gönderebilir .

Yapılandırmamı aşağıdaki gibi değiştireceğimi düşündüm:

location / {
        proxy_pass http://webservers;

        proxy_redirect off;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto "https";

        if ($upstream_http_strict_transport_security = "") {
                add_header Strict-Transport-Security "max-age=15552000";
        }
}

Ancak, muhtemelen kötüyse , bu işe yaramaz. Değişken aslında var olduğundan emin olmak için bir sürü farklı şey denedim (bu durumda), ama hiçbir şey yardımcı gibi görünüyor.

Bunu nasıl yapabilirim?

Yanıtlar:


22

Bu istek çalışmaz, istek arka uca geçirilmeden önce değerlendirildiğinden, $ upstream_http_ değişkenlerinin henüz değeri yok. boş bir değere sahip add_header yok sayılır, böylece üstbilgiyi koşullu olarak şu şekilde eklemek için bir harita kullanabilirsiniz :

map $upstream_http_strict_transport_security $sts {
  '' max-age=15552000;
}

server {
  location / {
    add_header Strict-Transport-Security $sts;
  }
}

1
Akıllı harita kullanımı!
Alexey Ten

Tamam biraz farklı bir şey yapmaya çalışıyorum ama nginx anlayamadım. Nginx'i resmi olarak nereden öğrenebileceğimi söyleyebilir misiniz? Ve burada da bana yardım edebilirsin: serverfault.com/questions/678521/…
Muhammed Umer

5

Çünkü ifproxy gerçekleşmeden önce yürütülür ve şu anda değişken yoktur $upstream_http_strict_transport_security.

header_filter_by_luaLua modülünün direktifini kullanabilirsiniz . Örneğin

header_filter_by_lua 'if not ngx.header["X-Test"] then ngx.header["X-Test"] = "blah" end';

1
Bu çalışıyor. Debian 7'de backport'lardan Nginx'i kullanarak LUA desteği alabilirsiniz apt-get -t wheezy-backports install nginx-extras.
Pieter Ennes
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.