Am de rezolvat o problemă interesantă de rezolvare a stării și încă nu am avut noroc cu căutarea online și prin documentația pentru lighttpd. Multe dintre aceste căutări au condus la întrebări similare adresate aici și răspunsuri utile (pentru acele întrebări, așa că haideți să vedem cum funcționează aceasta:
Am lighttpd care rulează pe un router gateway (OpenWRT, sau Turris OS, dacă preferați, deoarece este un Turris Omnia) și are o serie de domenii care le indică drumul pe care le găzduiește, ca un proxy invers pentru serverele din partea LAN a acestuia. poarta de acces.
Configurația generală fiind, în proforma, ca:
$HTTP[„gazdă”] =~ „(a.com|b.com|c.com)$” {
proxy.server = ( "" => ( ( "gazdă" => "..." ) ) )
...
} else $HTTP["gazdă"] =~ "(d.org|e.org)$" {
proxy.server = ( "" => ( ( "gazdă" => "..." ) ) )
...
} else $HTTP["gazdă"] =~ "(f.net|g.net)$" {
proxy.server = ( "" => ( ( "gazdă" => "..." ) ) )
...
}
Asta a fost un vis de secole.
Acum aș dori o cale anume, comună tuturor acestor site-uri să fie deservită direct de acest router.
Din nou pro forma:
$HTTP[„url”] =~ „^/topdir/subir/” {
server.document-root = "/www/sharedstuff"
}
Și pot combina acest lucru admirabil după cum urmează (și funcționează):
$HTTP[„url”] =~ „^/topdir/subir/” {
server.document-root = "/www/sharedstuff"
} altfel {
$HTTP[„gazdă”] =~ „(a.com|b.com|c.com)$” {
proxy.server = ( "" => ( ( "gazdă" => "..." ) ) )
...
} else $HTTP["gazdă"] =~ "(d.org|e.org)$" {
proxy.server = ( "" => ( ( "gazdă" => "..." ) ) )
...
} else $HTTP["gazdă"] =~ "(f.net|g.net)$" {
proxy.server = ( "" => ( ( "gazdă" => "..." ) ) )
...
}
}
Dulce.
DAR, iată problema pe care încerc să o rezolv. Aș dori în mod ideal să încapsulez $HTTP[„url”]
stare într-un fișier inclus și $HTTP[„gazdă”]
condiție într-o altă astfel încât să pot:
include "/etc/lighttpd/conf.d/shared.conf" # conține constrângerea `$HTTP["url"]`
include „/etc/lighttpd/conf.d/distributed.conf” # conține constrângerea `$HTTP["gazdă"]`
Mă întreb dacă sper la prea multe aici. Pentru că nu mă pot gândi sau nu găsesc o modalitate de a o face.
Îmi imaginez dacă partajat.conf
conținea o declarație astfel încât să existe o declarație de configurare precum:
$HTTP[„url”] =~ „^/topdir/subir/” {
server.document-root = "/www/sharedstuff"
ignora-toate-condițiile-ulterioare-de-potrivire-gazdă
}
O altă idee creativă, dacă naivă și imposibilă, este dacă am putea rescrie $HTTP[„gazdă”]
asemănător cu:
$HTTP[„gazdă”] = „null.net”
Deci meciurile ulterioare ca $HTTP[„gazdă”] =~ „(a.com|b.com|c.com)$”
toate eșuează, iar cererea rămâne locală.
Iată câteva opțiuni explorate până acum:
Variabilele serverului
Nu merge, deoarece acestea sunt evaluate atunci când configurația este încărcată, nu atunci când cererile sunt procesate.
https://redmine.lighttpd.net/projects/1/wiki/docs_configuration#Using-variables
Antete de solicitare
setenv.add-request-header
arata atractiv:
https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModSetEnv
Dacă în partajat.conf
setăm un antet de solicitare personalizat, poate îl putem testa cu a $REQUEST_HEADER[„header”]
în distribuit.conf
:
https://redmine.lighttpd.net/projects/1/wiki/docs_configuration#Conditional-Configuration
Dar nu am avut niciun succes cu asta. Se pare că un condițional ca acesta:
$REQUEST_HEADER["my_header"] == "value_I_set" {
# Nu acționați ca un proxy invers
} else $HTTP["gazdă"] =~ "(a.com|b.com|c.com)$" {
proxy.server = ( "" => ( ( "gazdă" => "..." ) ) )
...
} else $HTTP["gazdă"] =~ "(d.org|e.org)$" {
proxy.server = ( "" => ( ( "gazdă" => "..." ) ) )
...
} else $HTTP["gazdă"] =~ "(f.net|g.net)$" {
proxy.server = ( "" => ( ( "gazdă" => "..." ) ) )
...
}
Pur și simplu nu funcționează și nu pot să înțeleg cu adevărat de ce.Este greu de văzut ce se întâmplă, dar dacă înregistrez ieșirea pe manipulare condiționată, se pare că $REQUEST_HEADER["my_header"]
este întotdeauna necompletat chiar și pentru o adresă URL în care se află partajat.conf
aceasta s-a potrivit cu:
$HTTP[„url”] =~ „^/topdir/subir/” {
setenv.add-request-header = ("my_header" => "value_I_set")
}
Se pare că condiția nu testează anteturile cererilor stabilite de setenv, atât de mult decât cele livrate.