Mam odwrotne proxy na nginx, które pośredniczy w wielu witrynach. Niedawno włączyłem HTTP Strict Transport Security dla wszystkich stron internetowych obsługujących SSL. Mam teraz jedną witrynę, która nie chce, aby ta funkcja była włączona.
Pomyślałem, że po prostu sprawdzę, czy mój poprzedni Strict-Transport-Security
kanał wysłał mi nagłówek, a jeśli nie, po prostu dodaj go. W ten sposób mój max-age=0
serwer nadrzędny może wysłać nagłówek STS zawierający, aby uniknąć włączenia HSTS przez serwer proxy.
Pomyślałem, że po prostu zmienię konfigurację w następujący sposób:
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";
}
}
Ale prawdopodobnie dlatego, że jeśli jest zły , to nie działa. Próbowałem wielu różnych rzeczy, aby upewnić się, że zmienna faktycznie istnieje (tak jest w rzeczywistości), ale wydaje się, że nic nie pomaga.
Jak mogę sprawić, żeby to działało?
źródło
Jest tak, ponieważ
if
jest wykonywany przed wystąpieniem proxy i w tej chwili nie ma żadnej zmiennej$upstream_http_strict_transport_security
.Możesz użyć
header_filter_by_lua
dyrektywy z modułu Lua. Na przykładźródło
apt-get -t wheezy-backports install nginx-extras
.