unset in Vernice - errore di sintassi
Domanda
Sto cercando di nascondere l'intestazione "Server" restituito da Apache a ogni richiesta, dalla vernice.
Utilizzo in sub vcl_fetch:
unset obj.http.Server;
sulle unghie inizio ottengo:
Expected action, 'if' or '}'
(/etc/varnish/default.vcl Line 43 Pos 9)
unset obj.http.Server;
--------#####-----------------
Tutte le idee?
Soluzione
fissi alla fine.
Ho avuto un ritorno (tubo) in vcl_recv che fatto vernice mai andare in vcl_fetch dove stavo disinserimento l'intestazione.
Altri suggerimenti
Nelle versioni più recenti (2.1 serie) l'oggetto di risposta si chiama beresp, e qualcosa di simile in vcl_fetch ha di lavoro (ho appena provato su Vernice 2.1.0):
unset beresp.http.Server;
ho installato la versione che si sta utilizzando (1.1.2) ed ha ottenuto lo stesso comportamento esatto si parla; sembrerebbe la parola chiave impostata non funziona, almeno non nella funzione vcl_fetch. Questo è strano, come almeno un esempio che ho trovato menzioni usando unset per quella esatto scopo .
Se possibile, io suggerirei l'aggiornamento alla più recente per unghie, come penso che sia improbabile che, se il comportamento non impostato si osserva è un bug, la squadra sarà disposta a risolvere il problema.
A parte ciò, si potrebbe desiderare di provare a impostare Server a qualcosa d'altro:
set obj.http.Server = "";
set obj.http.Server = "BogoServer Whatever";
Supponendo che il vostro obiettivo è quello di nascondere la firma del server. Se quello che vuoi è quello di eliminare l'intestazione del tutto, mi permetto di dire che non può essere fatto con la versione di vernice.
sto usando vernice 1.1.2 testato anche con beresp e si verifica lo stesso errore.
E 'come se fosse qualcosa di sbagliato con disinserito. Ecco la piena fetch:
sub vcl_fetch {
unset obj.http.Server;
# force minimum ttl of 6 hours
if (obj.ttl < 6h) {
set obj.ttl = 6h;
}
}
ho avuto intorno installare Varnish 2.1.2, che è la versione più recente fino ad oggi. Non ho più ottenere eventuali errori di sintassi, ma l'effetto desiderato non viene applicato. Questa intestazione resiliente è ancora lì.
sub vcl_fetch {
unset beresp.http.Server;
set beresp.http.Server = "Apache";
}
Io uso Firebug per sbirciare le intestazioni, ecco cosa vedo:
Server Apache/2.2.9 (Debian)
Ho provato alcune variazioni come solo disinserimento e non l'impostazione, non funziona nulla.
Può essere un problema di logica? Forse le esigenze non impostate ad essere messi in un diverso sub . Ho provato mettendolo in entrambi vcl_miss e vcl_deliver. Got "Variabile 'beresp.http.Server' non è accessibile in modo .." entrambe le volte.
Inoltre ho provato a installare un header personalizzato e la rimozione. Che non ha funzionato neanche.