Konfigurera Dispatcher configuring-dispatcher
I följande avsnitt beskrivs hur du konfigurerar olika aspekter av Dispatcher.
Stöd för IPv4 och IPv6 support-for-ipv-and-ipv
Alla element i AEM och Dispatcher kan installeras i både IPv4- och IPv6-nätverk. Se IPV4 och IPV6.
Dispatcher konfigurationsfiler dispatcher-configuration-files
Som standard lagras Dispatcher-konfigurationen i textfilen dispatcher.any
, men du kan ändra namn och plats för filen under installationen.
Konfigurationsfilen innehåller en serie egenskaper med ett eller flera värden som styr Dispatcher beteende:
- Egenskapsnamnen har ett snedstreck (
/
) som prefix. - Egenskaper med flera värden omsluter underordnade objekt med klammerparenteser
{ }
.
En exempelkonfiguration är strukturerad på följande sätt:
# name of the dispatcher
/name "internet-server"
# each farm configures a set off (loadbalanced) renders
/farms
{
# first farm entry (label is not important, just for your convenience)
/website
{
/clientheaders
{
# List of headers that are passed on
}
/virtualhosts
{
# List of URLs for this Web site
}
/sessionmanagement
{
# settings for user authentification
}
/renders
{
# List of AEM instances that render the documents
}
/filter
{
# List of filters
}
/vanity_urls
{
# List of vanity URLs
}
/cache
{
# Cache configuration
/rules
{
# List of cachable documents
}
/invalidate
{
# List of auto-invalidated documents
}
}
/statistics
{
/categories
{
# The document categories that are used for load balancing estimates
}
}
/stickyConnectionsFor "/myFolder"
/health_check
{
# Page gets contacted when an instance returns a 500
}
/retryDelay "1"
/numberOfRetries "5"
/unavailablePenalty "1"
/failover "1"
}
}
Du kan inkludera andra filer som bidrar till konfigurationen:
- Om konfigurationsfilen är stor kan du dela upp den i flera mindre filer (som är enklare att hantera) och inkludera alla.
- Inkludera filer som genereras automatiskt.
Om du till exempel vill ta med filen myFarm.any i konfigurationen /farms
använder du följande kod:
/farms
{
$include "myFarm.any"
}
Använd asterisken (*
) som jokertecken om du vill ange ett intervall med filer som ska inkluderas.
Om filerna farm_1.any
till farm_5.any
till exempel innehåller konfigurationen av grupperna ett till fem kan du inkludera dem så här:
/farms
{
$include "farm_*.any"
}
Använda miljövariabler using-environment-variables
Du kan använda miljövariabler i egenskaper med strängvärden i dispatcher.any-filen i stället för att hårdkoda värdena. Använd formatet ${variable_name}
om du vill inkludera värdet för en miljövariabel.
Om till exempel filen dispatcher.any finns i samma katalog som cachekatalogen kan följande värde för egenskapen docroot användas:
/docroot "${PWD}/cache"
Om du till exempel skapar en miljövariabel med namnet PUBLISH_IP
som lagrar värdnamnet för den AEM publiceringsinstansen kan följande konfiguration av egenskapen /renders
användas:
/renders {
/0001 {
/hostname "${PUBLISH_IP}"
/port "8443"
}
}
Namnge Dispatcher-instansen naming-the-dispatcher-instance-name
Använd egenskapen /name
för att ange ett unikt namn som identifierar din Dispatcher-instans. Egenskapen /name
är en egenskap på den översta nivån i konfigurationsstrukturen.
Definiera grupper defining-farms-farms
Egenskapen /farms
definierar en eller flera uppsättningar Dispatcher-beteenden, där varje uppsättning är associerad med olika webbplatser eller URL-adresser. Egenskapen /farms
kan innehålla en eller flera grupper:
- Använd en enda servergrupp när du vill att Dispatcher ska hantera alla dina webbsidor eller webbplatser på samma sätt.
- Skapa flera servergrupper när olika delar av webbplatsen eller olika webbplatser kräver olika Dispatcher-beteenden.
Egenskapen /farms
är en egenskap på den översta nivån i konfigurationsstrukturen. Om du vill definiera en servergrupp lägger du till en underordnad egenskap i egenskapen /farms
. Använd ett egenskapsnamn som unikt identifierar servergruppen i Dispatcher-instansen.
Egenskapen /farmname
har flera värden och innehåller andra egenskaper som definierar Dispatcher-beteendet:
- URL:erna för de sidor som servergruppen gäller för.
- En eller flera tjänst-URL:er (vanligtvis AEM publiceringsinstanser) som används för att återge dokument.
- Statistik som ska användas för belastningsutjämning av flera dokumentåtergivare.
- Flera andra beteenden, till exempel vilka filer som ska cachelagras och var de ska cachelagras.
Värdet kan innehålla alla alfanumeriska tecken (a-z, 0-9). I följande exempel visas skelettdefinitionen för två grupper som heter /daycom
och /docsdaycom
:
#name of dispatcher
/name "day sites"
#farms section defines a list of farms or sites
/farms
{
/daycom
{
...
}
/docdaycom
{
...
}
}
Varje gruppegenskap kan innehålla följande underordnade egenskaper:
Ange en standardsida (endast IIS) - /homepage
specify-a-default-page-iis-only-homepage
/homepage
(endast IIS) fungerar inte längre. Använd i stället IIS URL Rewrite Module.mod_rewrite
. Information om mod_rewrite
finns i dokumentationen för Apache-webbplatsen (till exempel Apache 2.4). När du använder mod_rewrite
bör du använda flaggan genomgång|PT (skicka till nästa hanterare) för att tvinga omskrivningsmotorn att ange uri
-fältet i den interna request_rec
-strukturen till värdet för fältet filename
.Ange vilka HTTP-huvuden som ska passera igenom specifying-the-http-headers-to-pass-through-clientheaders
Egenskapen /clientheaders
definierar en lista med HTTP-huvuden som Dispatcher skickar från klientens HTTP-begäran till återgivaren (AEM instans).
Som standard vidarebefordrar Dispatcher standardrubrikerna för HTTP till AEM. I vissa fall kanske du vill vidarebefordra ytterligare rubriker eller ta bort specifika rubriker:
- Lägg till rubriker, t.ex. anpassade rubriker, som din AEM förväntar sig i HTTP-begäran.
- Ta bort rubriker, t.ex. autentiseringsrubriker som bara är relevanta för webbservern.
Om du anpassar uppsättningen rubriker som ska skickas måste du ange en uttömmande lista över rubriker, inklusive de rubriker som normalt inkluderas som standard.
En Dispatcher-instans som hanterar sidaktiveringsbegäranden för publiceringsinstanser kräver till exempel rubriken PATH
i avsnittet /clientheaders
. Rubriken PATH
möjliggör kommunikation mellan replikeringsagenten och Dispatcher.
Följande kod är ett exempel på konfiguration för /clientheaders
:
/clientheaders
{
"CSRF-Token"
"X-Forwarded-Proto"
"referer"
"user-agent"
"authorization"
"from"
"content-type"
"content-length"
"accept-charset"
"accept-encoding"
"accept-language"
"accept"
"host"
"max-forwards"
"proxy-authorization"
"proxy-connection"
"range"
"cookie"
"cq-action"
"cq-handle"
"handle"
"action"
"cqstats"
"depth"
"translate"
"expires"
"date"
"dav"
"ms-author-via"
"if"
"lock-token"
"x-expected-entity-length"
"destination"
"PATH"
}
Identifiera virtuella värdar identifying-virtual-hosts-virtualhosts
Egenskapen /virtualhosts
definierar en lista över alla värdnamn och URI-kombinationer som Dispatcher accepterar för den här servergruppen. Du kan använda asterisken (*
) som jokertecken. Värden för egenskapen /virtualhosts
har följande format:
[scheme]host[uri][*]
scheme
: (Valfritt) Antingenhttps://
ellerhttps://.
host
: Värddatorns namn eller IP-adress och portnumret om det behövs. (Se https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23)uri
: (Valfritt) Sökvägen till resurserna.
I följande exempel hanteras begäranden för domänerna .com
och .ch
för myCompany och alla domäner för mySubDivision:
/virtualhosts
{
"www.myCompany.com"
"www.myCompany.ch"
"www.mySubDivison.*"
}
Följande konfiguration hanterar alla-begäranden:
/virtualhosts
{
"*"
}
Matchar den virtuella värden resolving-the-virtual-host
När Dispatcher tar emot en HTTP- eller HTTPS-begäran hittar den det virtuella värdvärdet som bäst matchar begärans host,
uri
- och scheme
-huvuden. Dispatcher utvärderar värdena i egenskaperna virtualhosts
i följande ordning:
- Dispatcher börjar längst ned i servergruppen och fortsätter uppåt i filen dispatcher.any.
- För varje servergrupp börjar Dispatcher med det översta värdet i egenskapen
virtualhosts
och går nedåt i listan över värden.
Dispatcher hittar det mest matchande virtuella värdvärdet på följande sätt:
- Den första påträffade virtuella värden som matchar alla tre av
host
,scheme
ochuri
för begäran används. - Om inga
virtualhosts
-värden harscheme
ochuri
delar som matchar bådescheme
ochuri
i begäran, används den första påträffade virtuella värden som matcharhost
i begäran. - Om inga
virtualhosts
-värden har en värddel som matchar värddatorn för begäran, används den översta virtuella värddatorn för den översta servergruppen.
Därför bör du placera din virtuella standardvärd högst upp i egenskapen virtualhosts
. Lägg till den i den översta servergruppen för din dispatcher.any
-fil.
Exempel på virtuell värdupplösning example-virtual-host-resolution
Följande exempel representerar ett utdrag från en dispatcher.any
-fil som definierar två Dispatcher-grupper, och varje servergrupp definierar en virtualhosts
-egenskap.
/farms
{
/myProducts
{
/virtualhosts
{
"www.mycompany.com/products/*"
}
/renders
{
/hostname "server1.myCompany.com"
/port "80"
}
}
/myCompany
{
/virtualhosts
{
"www.mycompany.com"
}
/renders
{
/hostname "server2.myCompany.com"
/port "80"
}
}
}
I följande tabell visas de virtuella värdarna som matchas för de angivna HTTP-begäranden:
https://www.mycompany.com/products/gloves.html
www.mycompany.com/products/
https://www.mycompany.com/about.html
www.mycompany.com
Aktiverar säkra sessioner - /sessionmanagement
enabling-secure-sessions-sessionmanagement
/allowAuthorized
Ange som "0"
i avsnittet /cache
om du vill aktivera den här funktionen. Så som anges i avsnittet Cachelagring när autentisering används, cachelagras inte när du anger /allowAuthorized 0
begäranden som innehåller autentiseringsinformation. Om behörighetskänslig cachelagring krävs, se sidan Cachelagra skyddat innehåll.Skapa en säker session för åtkomst till renderingsgruppen så att användarna måste logga in för att komma åt alla sidor i gruppen. När användaren har loggat in kan han/hon komma åt sidor i servergruppen. Mer information om hur du använder den här funktionen med CUG:er finns i Skapa en stängd användargrupp. Se även Dispatcher checklista för säkerhet innan du publicerar.
Egenskapen /sessionmanagement
är en underegenskap till /farms
.
/sessionmanagement har flera underparametrar:
/katalog (obligatoriskt)
Katalogen som lagrar sessionsinformationen. Om katalogen inte finns skapas den.
/directory "/"
) eftersom det kan orsaka allvarliga problem. Ange alltid sökvägen till den mapp som lagrar sessionsinformationen. Till exempel:/sessionmanagement
{
/directory "/usr/local/apache/.sessions"
}
/encode (valfritt)
Hur sessionsinformationen kodas. Använd md5
för kryptering med md5-algoritmen eller hex
för hexadecimal kodning. Om du krypterar sessionsdata kan en användare med åtkomst till filsystemet inte läsa sessionsinnehållet. Standardvärdet är md5
.
/header (valfritt)
Namnet på HTTP-huvudet eller cookien som lagrar auktoriseringsinformationen. Om du lagrar informationen i http-huvudet använder du HTTP:<header-name>
. Om du vill lagra informationen i en cookie använder du Cookie:<header-name>
. Om du inte anger något värde används HTTP:authorization
.
/timeout (valfritt)
Antalet sekunder tills sessionen tar slut efter att den har använts sist. Om "800"
inte anges används, så sessionen tar lite tid över 13 minuter efter användarens senaste begäran.
Ett exempel på konfiguration ser ut så här:
/sessionmanagement
{
/directory "/usr/local/apache/.sessions"
/encode "md5"
/header "HTTP:authorization"
/timeout "800"
}
Definiera sidåtergivare defining-page-renderers-renders
Egenskapen /renders
definierar den URL som Dispatcher skickar begäranden till för att återge ett dokument. I följande exempel /renders
identifieras en enda AEM för återgivning:
/renders
{
/myRenderer
{
# hostname or IP of the renderer
/hostname "aem.myCompany.com"
# port of the renderer
/port "4503"
# connection timeout in milliseconds, "0" (default) waits indefinitely
/timeout "0"
}
}
I följande exempelavsnitt /renders
identifieras en AEM som körs på samma dator som Dispatcher:
/renders
{
/myRenderer
{
/hostname "127.0.0.1"
/port "4503"
}
}
I följande exempel /renders
distribueras återgivningsbegäranden lika mellan två AEM instanser:
/renders
{
/myFirstRenderer
{
/hostname "aem.myCompany.com"
/port "4503"
}
/mySecondRenderer
{
/hostname "127.0.0.1"
/port "4503"
}
}
Återgivningsalternativ renders-options
/timeout
Anger timeout för anslutningen som använder AEM i millisekunder. Standardvärdet är "0"
, vilket gör att Dispatcher väntar oändligt.
/receiveTimeout
Anger tiden i millisekunder som ett svar får ta. Standardvärdet är "600000"
, vilket gör att Dispatcher väntar i 10 minuter. En inställning på "0"
tar bort tidsgränsen.
Om tidsgränsen nås när svarshuvuden tolkas returneras HTTP-statusen 504 (Felaktig gateway). Om tidsgränsen nås när svarstexten läses, returnerar Dispatcher det ofullständiga svaret till klienten. Eventuella cachelagrade filer som kan ha skrivits tas också bort.
/ipv4
Anger om Dispatcher använder funktionen getaddrinfo
(för IPv6) eller funktionen gethostbyname
(för IPv4) för att hämta återgivningens IP-adress. Värdet 0 gör att getaddrinfo
används. Värdet 1
gör att gethostbyname
används. Standardvärdet är 0
.
Funktionen getaddrinfo
returnerar en lista med IP-adresser. Dispatcher itererar listan över adresser tills en TCP/IP-anslutning upprättas. Därför är egenskapen ipv4
viktig när återgivningsvärdnamnet är associerat med flera IP-adresser. Värden returnerar dessutom, som svar på funktionen getaddrinfo
, en lista över IP-adresser som alltid finns i samma ordning. I det här fallet bör du använda funktionen gethostbyname
så att IP-adressen som Dispatcher ansluter till är slumpmässig.
Amazon Elastic Load Balancing (ELB) är en tjänst som svarar på getaddrinfo med en lista över IP-adresser som kan vara i samma ordning.
/säker
Om egenskapen /secure
har värdet "1"
använder Dispatcher HTTPS för att kommunicera med AEM. Mer information finns i Konfigurera Dispatcher att använda SSL.
/always-resolve
Med Dispatcher version 4.1.6 kan du konfigurera egenskapen /always-resolve
enligt följande:
- När värdet är
"1"
tolkas värdnamnet på varje begäran (Dispatcher cachelagrar aldrig någon IP-adress). Det kan uppstå en liten prestandapåverkan på grund av det ytterligare anrop som krävs för att få värdinformation för varje begäran. - Om egenskapen inte anges cache-lagras IP-adressen som standard.
Den här egenskapen kan även användas om du stöter på problem med dynamisk IP-upplösning, vilket visas i följande exempel:
/renders {
/0001 {
/hostname "host-name-here"
/port "4502"
/ipv4 "1"
/always-resolve "1"
}
}
Konfigurera åtkomst till innehåll configuring-access-to-content-filter
Använd avsnittet /filter
för att ange de HTTP-begäranden som Dispatcher godkänner. Alla andra begäranden skickas tillbaka till webbservern med felkoden 404 (sidan hittades inte). Om det inte finns något /filter
-avsnitt accepteras alla begäranden.
Obs! Begäranden för statfile nekas alltid.
Avsnittet /filter
består av en serie regler som antingen nekar eller tillåter åtkomst till innehåll enligt mönster i begärandoradsdelen av HTTP-begäran. Använd en tillåtelselista-strategi för ditt /filter
-avsnitt:
- Förhindra åtkomst till allt.
- Tillåt åtkomst till innehåll efter behov.
Definiera ett filter defining-a-filter
Varje objekt i avsnittet /filter
innehåller en typ och ett mönster som matchas med ett visst element i förfrågningsraden eller hela förfrågningsraden. Varje filter kan innehålla följande objekt:
-
Typ:
/type
anger om åtkomst ska beviljas eller nekas för begäranden som matchar mönstret. Värdet kan vara antingenallow
ellerdeny
. -
Element i begäranderaden: Inkludera
/method
,/url
,/query
eller/protocol
. Ta även med ett mönster för filtreringsbegäranden. Filtrera dem efter specifika delar av begärandoradsdelen i HTTP-begäran. Filtrering för element på begärandraden (i stället för på hela begärandraden) är den föredragna filtermetoden. -
Avancerade element i begärandoraden: Från och med Dispatcher 4.2.0 finns fyra nya filterelement att använda. De nya elementen är
/path
,/selectors
,/extension
och/suffix
. Inkludera ett eller flera av dessa objekt för ytterligare kontroll av URL-mönster.
- globegenskapen: Egenskapen
/glob
används för att matcha hela förfrågningsraden i HTTP-begäran.
/filter
-avsnitten eftersom det kan leda till säkerhetsproblem. I stället för:/glob "* *.css *"
/url "*.css"
Begärandelen av HTTP-begäranden the-request-line-part-of-http-requests
HTTP/1.1 definierar request-line enligt följande:
Method Request-URI HTTP-Version<CRLF>
Tecknen <CRLF>
representerar en vagnretur följt av en radmatning. Följande exempel är den frågerad som tas emot när en klient begär sidan amerikansk-engelska på WKND-webbplatsen:
GET /content/wknd/us/en.html HTTP.1.1<CRLF>
Dina mönster måste ta hänsyn till blankstegstecknen på raden med begäran och tecknen <CRLF>
.
Dubbla citattecken jämfört med enkla citattecken double-quotes-vs-single-quotes
När du skapar filterregler använder du citattecken "pattern"
för enkla mönster. Om du använder Dispatcher 4.2.0 eller senare och mönstret innehåller ett reguljärt uttryck, måste du omsluta regex-mönstret '(pattern1|pattern2)'
med enkla citattecken.
Reguljära uttryck regular-expressions
I Dispatcher-versioner senare än 4.2.0 kan du inkludera utökade reguljära uttryck för POSIX i dina filtermönster.
Felsöka filter troubleshooting-filters
Om dina filter inte aktiveras på rätt sätt aktiverar du Trace Logging på Dispatcher så att du kan se vilket filter som fångar upp begäran.
Exempelfilter: Neka alla example-filter-deny-all
Följande exempelfilteravsnitt gör att Dispatcher nekar begäranden för alla filer. Neka åtkomst till alla filer och tillåt sedan åtkomst till specifika områden.
/0001 { /type "deny" /url "*" }
Begäranden till ett explicit nekat område resulterar i att 404-felkoden (sidan hittades inte) returneras.
Exempelfilter: Neka åtkomst till specifika områden example-filter-deny-access-to-specific-areas
Med filter kan du också neka åtkomst till olika element, till exempel ASP-sidor och känsliga områden i en publiceringsinstans. Följande filter nekar åtkomst till ASP-sidor:
/0002 { /type "deny" /url "*.asp" }
Exempelfilter: Aktivera begäranden om POST example-filter-enable-post-requests
Följande exempelfilter tillåter att formulärdata skickas med metoden POST:
/filter {
/0001 { /glob "*" /type "deny" }
/0002 { /type "allow" /method "POST" /url "/content/[.]*.form.html" }
}
Exempelfilter: Tillåt åtkomst till arbetsflödeskonsolen example-filter-allow-access-to-the-workflow-console
I följande exempel visas ett filter som används för att ge extern åtkomst till arbetsflödeskonsolen:
/filter {
/0001 { /glob "*" /type "deny" }
/0002 { /type "allow" /url "/libs/cq/workflow/content/console*" }
}
Om publiceringsinstansen använder en webbprogramkontext (till exempel publicera) kan den också läggas till i filterdefinitionen.
/0003 { /type "deny" /url "/publish/libs/cq/workflow/content/console/archive*" }
Om du måste komma åt enstaka sidor inom det begränsade området kan du tillåta åtkomst till dem. Om du till exempel vill tillåta åtkomst till fliken Arkiv i arbetsflödeskonsolen lägger du till följande avsnitt:
/0004 { /type "allow" /url "/libs/cq/workflow/content/console/archive*" }
Exempelfilter: Använda reguljära uttryck example-filter-using-regular-expressions
Det här filtret aktiverar tillägg i icke-offentliga innehållskataloger med hjälp av ett reguljärt uttryck, som definieras här mellan enkla citattecken:
/005 { /type "allow" /extension '(css|gif|ico|js|png|swf|jpe?g)' }
Exempelfilter: Filtrera extra element för en URL för en begäran example-filter-filter-additional-elements-of-a-request-url
Nedan visas ett regelexempel som blockerar innehåll som hämtas från sökvägen /content
och dess underträd, med filter för sökväg, väljare och tillägg:
/006 {
/type "deny"
/path "/content/*"
/selectors '(feed|rss|pages|languages|blueprint|infinity|tidy|sysview|docview|query|jcr:content|_jcr_content|search|childrenlist|ext|assets|assetsearch|[0-9-]+)'
/extension '(json|xml|html|feed))'
}
Exempel på /filter
-avsnitt example-filter-section
Begränsa den externa åtkomsten så mycket som möjligt när du konfigurerar Dispatcher. Följande exempel ger minimal åtkomst för externa besökare:
-
/content
-
olika innehåll, t.ex. design och klientbibliotek. Till exempel:
/etc/designs/default*
/etc/designs/mydesign*
När du har skapat filter testar du sidåtkomst för att kontrollera att AEM är säker.
Följande /filter
-avsnitt i dispatcher.any
-filen kan användas som bas i din Dispatcher-konfigurationsfil.
Det här exemplet baseras på standardkonfigurationsfilen som medföljer Dispatcher och är avsedd som exempel för användning i en produktionsmiljö. Objekt som föregås av #
inaktiveras (kommenteras bort). Du bör vara försiktig om du bestämmer dig för att aktivera något av dessa objekt (genom att ta bort #
på den raden). Om du gör det kan det påverka säkerheten.
Neka åtkomst till allt och tillåt sedan åtkomst till specifika (begränsade) element:
/filter
{
# Deny everything first and then allow specific entries
/0001 { /type "deny" /url "*" }
# Open consoles
# /0011 { /type "allow" /url "/admin/*" } # allow servlet engine admin
# /0012 { /type "allow" /url "/crx/*" } # allow content repository
# /0013 { /type "allow" /url "/system/*" } # allow OSGi console
# Allow non-public content directories
# /0021 { /type "allow" /url "/apps/*" } # allow apps access
# /0022 { /type "allow" /url "/bin/*" }
/0023 { /type "allow" /url "/content*" } # disable this rule to allow mapped content only
# /0024 { /type "allow" /url "/libs/*" }
# /0025 { /type "deny" /url "/libs/shindig/proxy*" } # if you enable /libs close access to proxy
# /0026 { /type "allow" /url "/home/*" }
# /0027 { /type "allow" /url "/tmp/*" }
# /0028 { /type "allow" /url "/var/*" }
# Enable extensions in non-public content directories, using a regular expression
/0041
{
/type "allow"
/extension '(css|gif|ico|js|png|swf|jpe?g)'
}
# Enable features
/0062 { /type "allow" /url "/libs/cq/personalization/*" } # enable personalization
# Deny content grabbing, on all accessible pages, using regular expressions
/0081
{
/type "deny"
/selectors '((sys|doc)view|query|[0-9-]+)'
/extension '(json|xml)'
}
# Deny content grabbing for /content and its subtree
/0082
{
/type "deny"
/path "/content/*"
/selectors '(feed|rss|pages|languages|blueprint|infinity|tidy)'
/extension '(json|xml|html)'
}
# /0087 { /type "allow" /method "GET" /extension 'json' "*.1.json" } # allow one-level json requests
}
Tänk på följande om du väljer att utöka åtkomsten:
-
Inaktivera extern åtkomst till
/admin
om du använder CQ version 5.4 eller tidigare. -
Du måste vara försiktig när du tillåter åtkomst till filer i
/libs
. Åtkomst bör tillåtas på individuell basis. -
Neka åtkomst till replikeringskonfigurationen så att den inte kan ses:
/etc/replication.xml*
/etc/replication.infinity.json*
-
Neka åtkomst till Google Gadgets omvänd proxy:
/libs/opensocial/proxy*
Beroende på installationen kan det finnas fler resurser under /libs
, /apps
eller någon annanstans som måste göras tillgängliga. Du kan använda filen access.log
som en metod för att avgöra vilka resurser som ska användas externt.
/etc/reports
för externa besökare.Begränsa frågesträngar restricting-query-strings
Sedan Dispatcher version 4.1.5 använder du avsnittet /filter
för att begränsa frågesträngar. Vi rekommenderar att du uttryckligen tillåter frågesträngar och exkluderar generiska reserveringar via allow
filterelement.
En enskild post kan ha antingen glob
eller en kombination av method
, url
, query
och version
, men inte båda. I följande exempel tillåts frågesträngen a=*
och alla andra frågesträngar för URL:er som tolkas till noden /etc
nekas:
/filter {
/0001 { /type "deny" /method "POST" /url "/etc/*" }
/0002 { /type "allow" /method "GET" /url "/etc/*" /query "a=*" }
}
/query
matchar den bara begäranden som innehåller en frågesträng och matchar det angivna frågemönstret./etc
som inte har någon frågesträng också ska tillåtas i ovanstående exempel krävs följande regler:/filter {
>/0001 { /type "deny" /method "*" /url "/path/*" }
>/0002 { /type "allow" /method "GET" /url "/path/*" }
>/0003 { /type "deny" /method "GET" /url "/path/*" /query "*" }
>/0004 { /type "allow" /method "GET" /url "/path/*" /query "a=*" }
}
Testa Dispatcher Security testing-dispatcher-security
Dispatcher-filter bör blockera åtkomst till följande sidor och skript AEM publiceringsinstanser. Använd en webbläsare för att försöka öppna följande sidor som en besökare skulle göra och verifiera att koden 404 returneras. Justera filtren om du får andra resultat.
Du bör se normal sidåtergivning för /content/add_valid_page.html?debug=layout
.
/admin
/system/console
/dav/crx.default
/crx
/bin/crxde/logs
/jcr:system/jcr:versionStorage.json
/_jcr_system/_jcr_versionStorage.json
/libs/wcm/core/content/siteadmin.html
/libs/collab/core/content/admin.html
/libs/cq/ui/content/dumplibs.html
/var/linkchecker.html
/etc/linkchecker.html
/home/users/a/admin/profile.json
/home/users/a/admin/profile.xml
/libs/cq/core/content/login.json
/content/../libs/foundation/components/text/text.jsp
/content/.{.}/libs/foundation/components/text/text.jsp
/apps/sling/config/org.apache.felix.webconsole.internal.servlet.OsgiManager.config/jcr%3acontent/jcr%3adata
/libs/foundation/components/primary/cq/workflow/components/participants/json.GET.servlet
/content.pages.json
/content.languages.json
/content.blueprint.json
/content.-1.json
/content.10.json
/content.infinity.json
/content.tidy.json
/content.tidy.-1.blubber.json
/content/dam.tidy.-100.json
/content/content/geometrixx.sitemap.txt
/content/add_valid_page.query.json?statement=//*
/content/add_valid_page.qu%65ry.js%6Fn?statement=//*
/content/add_valid_page.query.json?statement=//*[@transportPassword]/(@transportPassword%20|%20@transportUri%20|%20@transportUser)
/content/add_valid_path_to_a_page/_jcr_content.json
/content/add_valid_path_to_a_page/jcr:content.json
/content/add_valid_path_to_a_page/_jcr_content.feed
/content/add_valid_path_to_a_page/jcr:content.feed
/content/add_valid_path_to_a_page/pagename._jcr_content.feed
/content/add_valid_path_to_a_page/pagename.jcr:content.feed
/content/add_valid_path_to_a_page/pagename.docview.xml
/content/add_valid_path_to_a_page/pagename.docview.json
/content/add_valid_path_to_a_page/pagename.sysview.xml
/etc.xml
/content.feed.xml
/content.rss.xml
/content.feed.html
/content/add_valid_page.html?debug=layout
/projects
/tagging
/etc/replication.html
/etc/cloudservices.html
/welcome
Om du vill avgöra om anonym skrivåtkomst är aktiverat skickar du följande kommando i en terminal eller kommandotolk. Det går inte att skriva data till noden.
curl -X POST "https://anonymous:anonymous@hostname:port/content/usergenerated/mytestnode"
Om du vill försöka göra Dispatcher-cachen ogiltig och försäkra dig om att du får ett code 403-svar skickar du följande kommando i en terminal eller kommandotolk:
curl -H "CQ-Handle: /content" -H "CQ-Path: /content" https://yourhostname/dispatcher/invalidate.cache
Aktivera åtkomst till Vanity-URL:er enabling-access-to-vanity-urls-vanity-urls
Konfigurera Dispatcher så att du kan få åtkomst till URL:er som är konfigurerade för dina AEM.
När åtkomst till tillfälliga URL:er är aktiverat, anropar Dispatcher regelbundet en tjänst som körs på återgivningsinstansen för att få en lista över tillfälliga URL:er. Dispatcher sparar listan i en lokal fil. När en begäran om en sida nekas på grund av ett filter i avsnittet /filter
, läser Dispatcher igenom listan med användar-URL:er. Om den nekade URL:en finns med i listan, tillåter Dispatcher åtkomst till fågel-URL:en.
Om du vill aktivera åtkomst till mål-URL:er lägger du till ett /vanity_urls
-avsnitt i avsnittet /farms
, som i följande exempel:
/vanity_urls {
/url "/libs/granite/dispatcher/content/vanityUrls.html"
/file "/tmp/vanity_urls"
/delay 300
}
Avsnittet /vanity_urls
innehåller följande egenskaper:
-
/url
: Sökvägen till den överordnade URL-tjänst som körs på återgivningsinstansen. Egenskapens värde måste vara"/libs/granite/dispatcher/content/vanityUrls.html"
. -
/file
: Sökvägen till den lokala filen där Dispatcher lagrar listan över huvud-URL:er. Kontrollera att Dispatcher har skrivbehörighet till den här filen. -
/delay
: (sekunder) Tiden mellan anrop till tjänsten för huvud-URL.
Använd följande procedur för att aktivera åtkomst till mål-URL:er.
- Om din renderingstjänst är en AEM instans installerar du paketet
com.adobe.granite.dispatcher.vanityurl.content
på publiceringsinstansen (se anmärkningen ovan). - Kontrollera att konfigurationen av
/filter
nekar URL:en för varje mål-URL som du har konfigurerat för en AEM- eller CQ-sida. Om det behövs lägger du till ett filter som nekar URL-adressen. - Lägg till avsnittet
/vanity_urls
nedanför/farms
. - Starta om Apache-webbservern.
Vidarebefordrar syndikeringsbegäranden - /propagateSyndPost
forwarding-syndication-requests-propagatesyndpost
Syndikeringsbegäranden är endast avsedda för Dispatcher, så som standard skickas de inte till återgivaren (till exempel en AEM).
Om det behövs ställer du in egenskapen /propagateSyndPost
på "1"
för att vidarebefordra syndikeringsbegäranden till Dispatcher. Om den är inställd måste du se till att begäranden om POST inte nekas i filteravsnittet.
Konfigurerar Dispatcher-cachen - /cache
configuring-the-dispatcher-cache-cache
Avsnittet /cache
styr hur Dispatcher cachelagrar dokument. Konfigurera flera underegenskaper för att implementera dina cachningsstrategier:
/docroot
/statfile
/serveStaleOnError
/allowAuthorized
/rules
/statfileslevel
/invalidate
/invalidateHandler
/allowedClients
/ignoreUrlParams
/headers
/mode
/gracePeriod
/enableTTL
Ett exempel på cacheavsnitt kan se ut så här:
/cache
{
/docroot "/opt/dispatcher/cache"
/statfile "/tmp/dispatcher-website.stat"
/allowAuthorized "0"
/rules
{
# List of files that are cached
}
/invalidate
{
# List of files that are auto-invalidated
}
}
Ange cachekatalogen specifying-the-cache-directory
Egenskapen /docroot
identifierar katalogen där cachelagrade filer lagras.
Webbservern ansvarar för att leverera rätt statuskod när cachefilen för Dispatcher används, det är därför det är viktigt att den också kan hitta den.
Om du använder flera grupper måste varje grupp ha en annan dokumentrot.
Namnge statusfilen naming-the-statfile
Egenskapen /statfile
identifierar den fil som ska användas som statusfil. Dispatcher använder den här filen för att registrera tidpunkten för den senaste innehållsuppdateringen. Statfile kan vara vilken fil som helst på webbservern.
Statusfilen har inget innehåll. När innehållet uppdateras uppdaterar Dispatcher tidsstämpeln. Standardstatusfilen har namnet .stat
och lagras i dokumentroten. Dispatcher blockerar åtkomsten till statfile.
/statfileslevel
har konfigurerats ignorerar Dispatcher egenskapen /statfile
och använder .stat
som namn.Hantera gamla dokument när fel uppstår serving-stale-documents-when-errors-occur
Egenskapen /serveStaleOnError
styr om Dispatcher returnerar ogiltiga dokument när återgivningsservern returnerar ett fel. Som standard tas det cachelagrade innehållet bort när en lägesfil ändras och det cachelagrade innehållet blir ogiltigt. Den här åtgärden utförs nästa gång den begärs.
Om /serveStaleOnError
är inställt på "1"
tar Dispatcher inte bort ogiltigt innehåll från cachen. Det vill säga, om inte återgivningsservern returnerar ett lyckat svar. Ett 5xx-svar från AEM eller en timeout för anslutningen gör att Dispatcher skickar det inaktuella innehållet och svarar med och HTTP-statusen 111 (förnyelsen misslyckades).
Cachelagring när autentisering används caching-when-authentication-is-used
Egenskapen /allowAuthorized
styr om begäranden som innehåller någon av följande autentiseringsinformation cachelagras:
- Rubriken
authorization
- En cookie med namnet
authorization
- En cookie med namnet
login-token
Som standard cachelagras inte begäranden som innehåller den här autentiseringsinformationen eftersom autentiseringen inte utförs när ett cachelagrat dokument returneras till klienten. Den här konfigurationen förhindrar att Dispatcher skickar cachelagrade dokument till användare som inte har nödvändiga rättigheter.
Om dina krav tillåter cachelagring av autentiserade dokument anger du /allowAuthorized
till ett:
/allowAuthorized "1"
/sessionmanagement
) måste egenskapen /allowAuthorized
anges till "0"
.Ange vilka dokument som ska cachelagras specifying-the-documents-to-cache
Egenskapen /rules
styr vilka dokument som cachelagras enligt dokumentsökvägen. Oavsett egenskapen /rules
cachelagrar Dispatcher aldrig ett dokument under följande omständigheter:
-
URI för begäran innehåller ett frågetecken (
?
).- Anger en dynamisk sida, till exempel ett sökresultat som inte behöver cachas.
-
Filtillägget saknas.
- Webbservern behöver tillägget för att kunna avgöra dokumenttypen (MIME-typen).
-
Autentiseringshuvudet är inställt (konfigurerbart).
-
Om AEM svarar med följande rubriker:
no-cache
no-store
must-revalidate
Varje objekt i egenskapen /rules
innehåller ett glob
-mönster och en typ:
- Mönstret
glob
används för att matcha dokumentets sökväg. - Typen anger om de dokument som matchar mönstret
glob
ska cachelagras. Värdet kan varaallow
(cachelagra dokumentet) ellerdeny
(återge dokumentet).
Om du inte har dynamiska sidor (utöver de sidor som redan har undantagits av ovanstående regler) kan du konfigurera Dispatcher att cachelagra allt. Regelavsnittet ser ut så här:
/rules
{
/0000 { /glob "*" /type "allow" }
}
Mer information om Glob-egenskaper finns i Designa mönster för Glob-egenskaper.
Om det finns dynamiska avsnitt på sidan (till exempel ett nyhetsprogram) eller i en sluten användargrupp kan du definiera undantag:
/rules
{
/0000 { /glob "*" /type "allow" }
/0001 { /glob "/en/news/*" /type "deny" }
/0002 { /glob "*/private/*" /type "deny" }
}
Komprimering
På Apache-webbservrar kan du komprimera de cachelagrade dokumenten. Komprimering gör att Apache kan returnera dokumentet i ett komprimerat format om klienten begär det. Komprimering utförs automatiskt genom att Apache-modulen mod_deflate
aktiveras, till exempel:
AddOutputFilterByType DEFLATE text/plain
Modulen installeras som standard med Apache 2.x.
Ogiltiga filer per mappnivå invalidating-files-by-folder-level
Använd egenskapen /statfileslevel
för att göra cachelagrade filer ogiltiga enligt deras sökväg:
-
Dispatcher skapar
.stat
filer i varje mapp från mappen docroot till den nivå du anger. Dokumentmappen är nivå 0. -
Filerna blir ogiltiga genom att filen
.stat
klickas på. Filens senaste ändringsdatum för.stat
jämförs med det senaste ändringsdatumet för ett cachelagrat dokument. Dokumentet uppdateras om filen.stat
är nyare. -
När en fil på en viss nivå är ogiltig, ändras alla
.stat
filer från docroot till på nivån för den ogiltiga filen eller den konfigureradestatsfilevel
(beroende på vilken som är minst).- Om du till exempel anger egenskapen
statfileslevel
som 6 och en fil blir ogiltig på nivå 5, kommer alla.stat
-filer från docroot att ändras till 5. Om du fortsätter med det här exemplet kommer allastat
-filer från docroot till sex att påverkas (sedan/statfileslevel = "6"
) om en fil blir ogiltig på nivå 7.
- Om du till exempel anger egenskapen
Endast resurserna längs sökvägen till den ogiltiga filen påverkas. Titta på följande exempel: en webbplats använder strukturen /content/myWebsite/xx/.
Om du anger statfileslevel
som 3 skapas en .stat
-fil enligt följande:
docroot
/content
/content/myWebsite
/content/myWebsite/*xx*
När en fil i /content/myWebsite/xx
blir ogiltig kommer alla .stat
-filer från docroot ned till /content/myWebsite/xx
att påverkas. Detta scenario är endast fallet för /content/myWebsite/xx
och inte till exempel /content/myWebsite/yy
eller /content/anotherWebSite
.
CQ-Action-Scope:ResourceOnly
skickas. Den här metoden kan användas för att tömma vissa resurser utan att andra delar av cachen blir ogiltiga. Mer information finns på den här sidan och Invalidera Dispatcher-cachen manuellt./statfileslevel
ignoreras egenskapen /statfile
.Automatisk invalidering av cachelagrade filer automatically-invalidating-cached-files
Egenskapen /invalidate
definierar de dokument som automatiskt görs ogiltiga när innehållet uppdateras.
Med automatisk ogiltigförklaring tar Dispatcher inte bort cachelagrade filer efter en innehållsuppdatering, utan kontrollerar deras giltighet nästa gång de begärs. Dokument i cacheminnet som inte ogiltigförklaras automatiskt finns kvar i cacheminnet tills en innehållsuppdatering tar bort dem explicit.
Automatisk ogiltigförklaring används vanligtvis för HTML-sidor. HTML sidor innehåller ofta länkar till andra sidor, vilket gör det svårt att avgöra om en innehållsuppdatering påverkar en sida. Om du vill vara säker på att alla relevanta sidor blir ogiltiga när innehållet uppdateras, gör du alla sidor i HTML automatiskt ogiltiga. Följande konfiguration gör alla HTML sidor ogiltiga:
/invalidate
{
/0000 { /glob "*" /type "deny" }
/0001 { /glob "*.html" /type "allow" }
}
Mer information om Glob-egenskaper finns i Designa mönster för Glob-egenskaper.
Den här konfigurationen orsakar följande aktivitet när /content/wknd/us/en
aktiveras:
- Alla filer med mönstret en.* har tagits bort från mappen
/content/wknd/us
. - Mappen
/content/wknd/us/en./_jcr_content
har tagits bort. - Alla andra filer som matchar konfigurationen för
/invalidate
tas inte bort omedelbart. Dessa filer tas bort när nästa begäran görs. I exemplet tas inte/content/wknd.html
bort, utan tas bort när/content/wknd.html
begärs.
Om du erbjuder automatiskt genererade PDF- och ZIP-filer för nedladdning kan du behöva göra dessa filer ogiltiga automatiskt. Ett konfigurationsexempel ser ut så här:
/invalidate
{
/0000 { /glob "*" /type "deny" }
/0001 { /glob "*.html" /type "allow" }
/0002 { /glob "*.zip" /type "allow" }
/0003 { /glob "*.pdf" /type "allow" }
}
Integreringen AEM Adobe Analytics levererar konfigurationsdata i en analytics.sitecatalyst.js
-fil på din webbplats. Exempelfilen dispatcher.any
som tillhandahålls med Dispatcher innehåller följande ogiltighetsregel för den här filen:
{
/glob "*/analytics.sitecatalyst.js" /type "allow"
}
Använda anpassade ogiltighetsskript using-custom-invalidation-scripts
Med egenskapen /invalidateHandler
kan du definiera ett skript som anropas för varje ogiltigförklaringsbegäran som tas emot av Dispatcher.
Den anropas med följande argument:
- Handtag - Innehållssökvägen som är ogiltig
- Åtgärd - Replikeringsåtgärden (till exempel Aktivera, Inaktivera)
- Åtgärdsomfång - Replikeringsåtgärdens omfång (tomt, om inte en rubrik för
CQ-Action-Scope: ResourceOnly
skickas, se Invalidera cachelagrade sidor från AEM för mer information)
Den här metoden kan användas för att täcka flera olika användningsfall. Om du till exempel gör andra programspecifika cacheminnen ogiltiga eller hanterar fall där den externa URL-adressen för en sida och dess plats i dokumentroten inte matchar innehållssökvägen.
Följande exempelskript loggar varje ogiltig begäran till en fil.
/invalidateHandler "/opt/dispatcher/scripts/invalidate.sh"
Exempel på ogiltighetshanterarskript sample-invalidation-handler-script
#!/bin/bash
printf "%-15s: %s %s" $1 $2 $3>> /opt/dispatcher/logs/invalidate.log
Begränsa de klienter som kan tömma cachen limiting-the-clients-that-can-flush-the-cache
Egenskapen /allowedClients
definierar specifika klienter som tillåts tömma cachen. Globeringsmönstren matchas mot IP.
Följande exempel:
- nekar åtkomst till alla klienter
- explicit tillåter åtkomst till localhost
/allowedClients
{
/0001 { /glob "*.*.*.*" /type "deny" }
/0002 { /glob "127.0.0.1" /type "allow" }
}
Mer information om Glob-egenskaper finns i Designa mönster för Glob-egenskaper.
/allowedClients
.Ignorerar URL-parametrar ignoring-url-parameters
Avsnittet ignoreUrlParams
definierar vilka URL-parametrar som ska ignoreras när du avgör om en sida cachelagras eller levereras från cache:
- När en begärande URL innehåller parametrar som alla ignoreras, cachelagras sidan.
- När en begärande URL innehåller en eller flera parametrar som inte ignoreras, cachelagras inte sidan.
När en parameter ignoreras för en sida cachelagras sidan första gången som sidan begärs. Efterföljande begäranden för sidan skickas till den cachelagrade sidan, oavsett värdet på parametern i begäran.
ignoreUrlParams
på ett sätt som tillåtslista. Därför ignoreras alla frågeparametrar och endast kända eller förväntade frågeparametrar undantas ("nekas") från att ignoreras. Mer information och exempel finns på den här sidan.Om du vill ange vilka parametrar som ska ignoreras lägger du till glob-regler i egenskapen ignoreUrlParams
:
- Om du vill cachelagra en sida oavsett vilken begäran som innehåller en URL-parameter, skapar du en glob-egenskap som tillåter parametern (att ignoreras).
- Om du vill förhindra att sidan cachas skapar du en globegenskap som nekar parametern (som ignoreras).
http://example.com/path/test.html?p1=test&p2=v2
, ska egenskapen glob vara:/0002 { /glob "p1" /type "allow" }
I följande exempel ignoreras alla parametrar, förutom parametern nocache
. Därför cachelagrar Dispatcher aldrig URL-adresser som innehåller parametern nocache
:
/ignoreUrlParams
{
# ignore-all-url-parameters-by-dispatcher-and-requests-are-cached
/0001 { /glob "*" /type "allow" }
# allow-the-url-parameter-nocache-to-bypass-dispatcher-on-every-request
/0002 { /glob "nocache" /type "deny" }
}
I kontexten för konfigurationsexemplet ignoreUrlParams
ovan gör följande HTTP-begäran att sidan cachas eftersom parametern willbecached
ignoreras:
GET /mypage.html?willbecached=true
I kontexten för konfigurationsexemplet ignoreUrlParams
gör följande HTTP-begäran att sidan not cachelagras eftersom parametern nocache
inte ignoreras:
GET /mypage.html?nocache=true
GET /mypage.html?nocache=true&willbecached=true
Mer information om Glob-egenskaper finns i Designa mönster för Glob-egenskaper.
Cachelagra HTTP-svarshuvuden caching-http-response-headers
Med egenskapen /headers
kan du definiera de HTTP-huvudtyper som Dispatcher ska cachelagra. Vid den första begäran till en icke cachelagrad resurs lagras alla huvuden som matchar ett av de konfigurerade värdena (se konfigurationsexemplet nedan) i en separat fil bredvid cachefilen. Vid efterföljande begäranden till den cachelagrade resursen läggs de lagrade rubrikerna till i svaret.
Nedan visas ett exempel från standardkonfigurationen:
/cache {
...
/headers {
"Cache-Control"
"Content-Disposition"
"Content-Type"
"Expires"
"Last-Modified"
"X-Content-Type-Options"
"Last-Modified"
}
}
- Lägg till rubriknamnet i avsnittet
/cache/headers
. - Lägg till följande Apache-direktiv i det Dispatcher-relaterade avsnittet:
code language-xml |
---|
|
Filbehörigheter för Dispatcher-cache dispatcher-cache-file-permissions
Egenskapen mode
anger vilka filbehörigheter som ska gälla för nya kataloger och filer i cachen. umask
i anropsprocessen begränsar den här inställningen. Det är ett oktalt tal som konstruerats av summan av ett eller flera av följande värden:
0400
Tillåt läsning av ägare.0200
Tillåt skrivning efter ägare.0100
Tillåt ägaren att söka i kataloger.0040
Tillåt läsning av gruppmedlemmar.0020
Tillåt skrivning av gruppmedlemmar.0010
Tillåt gruppmedlemmar att söka i katalogen.0004
Tillåt läsning av andra.0002
Tillåt andra att skriva.0001
Tillåt andra att söka i katalogen.
Standardvärdet är 0755
, vilket gör att ägaren kan läsa, skriva eller söka i och att gruppen och andra kan läsa eller söka i.
Begränsar .stat-filberöring throttling-stat-file-touching
Med standardegenskapen /invalidate
gör varje aktivering alla .html
-filer ogiltiga (när deras sökväg matchar avsnittet /invalidate
). På en webbplats med stor trafik ökar multipla aktiveringar processorbelastningen på backend-sidan. I ett sådant scenario är det önskvärt att strypa filberöringen .stat
så att webbplatsen förblir responsiv. Du kan utföra den här åtgärden med egenskapen /gracePeriod
.
Egenskapen /gracePeriod
definierar hur många sekunder en inaktuell, automatiskt ogiltigförklarad resurs fortfarande kan hanteras från cacheminnet efter den senaste aktiveringen. Egenskapen kan användas i en inställning där en grupp av aktiveringar annars skulle göra hela cachen ogiltig upprepade gånger. Det rekommenderade värdet är 2 sekunder.
Mer information finns i /invalidate
och /statfileslevel
tidigare.
Konfigurerar tidsbaserad cacheinvalidering - /enableTTL
configuring-time-based-cache-invalidation-enablettl
Tidsbaserad cacheogiltigförklaring beror på egenskapen /enableTTL
och förekomsten av vanliga förfallorubriker från HTTP-standarden. Om du ställer in egenskapen på 1 (/enableTTL "1"
) utvärderas svarshuvuden från serverdelen. Om rubrikerna innehåller ett Cache-Control
-, max-age
- eller Expires
-datum skapas en tom hjälpfil bredvid den cachelagrade filen, med en ändringstid som är lika med förfallodatumet. När den cachelagrade filen har begärts efter ändringstiden återbegärs den automatiskt från serverdelen.
Före Dispatcher 4.3.5 baserades logiken för TTL-ogiltigförklaring endast på det konfigurerade TTL-värdet. I Dispatcher 4.3.5 beaktas både de angivna TTL-värdena och, Dispatcher-cacheminnets ogiltighetsregler. För en cachelagrad fil:
- Om
/enableTTL
är inställt på 1 kontrolleras filens förfallodatum. Om filen har gått ut enligt angiven TTL utförs inga andra kontroller och den cachelagrade filen efterfrågas igen från serverdelen. - Om filen inte har gått ut eller om
/enableTTL
inte har konfigurerats, tillämpas standardreglerna för ogiltigförklaring av cachen, till exempel de regler som/statfileslevel
och/invalidate
har angetts. Det här flödet innebär att Dispatcher kan göra filer som TTL-värdet inte har upphört att gälla för ogiltiga.
Den nya implementeringen stöder användning där filerna har längre TTL-värden (till exempel CDN). Men filen kan fortfarande ogiltigförklaras även om TTL-värdet inte har gått ut. Det prioriterar innehållets aktualitet framför cache-träffkvoten på Dispatcher.
Om du däremot behöver endast anger du förfallologiken som används för en fil till /enableTTL
till 1 och exkluderar den filen från standardcacheminnets invalideringsmekanism. Du kan till exempel:
- Om du vill ignorera filen konfigurerar du invalideringsreglerna i cacheavsnittet. I kodutdraget nedan ignoreras alla filer som slutar på
.example.html
och upphör att gälla först när den angivna TTL:en har passerats.
/invalidate
{
/0000 { /glob "*" /type "deny" }
/0001 { /glob "*.html" /type "allow" }
/0002 { /glob "*.example.html" /type "deny" }
}
- Utforma innehållsstrukturen på ett sådant sätt att du kan ange ett högt
/statfilelevel
så att filen inte automatiskt blir ogiltig.
Om du gör det ser du till att .stat
-filogiltigförklaring inte används och att bara TTL-förfallotiden är aktiv för de angivna filerna.
/enableTTL
till 1 aktiveras endast TTL-cachelagring på Dispatcher-sidan. TTL-informationen i den kompletterande filen (se ovan) tillhandahålls inte till någon annan användaragent som begär en sådan filtyp från Dispatcher. Om du vill ge cachelagringshuvuden till underordnade system som ett CDN eller en webbläsare, bör du konfigurera avsnittet /cache/headers
i enlighet med detta.Konfigurerar belastningsutjämning - /statistics
configuring-load-balancing-statistics
Avsnittet /statistics
definierar de filkategorier för vilka Dispatcher bedömer svarstiden för varje återgivning. Dispatcher använder poängen för att avgöra vilken rendering som ska skickas.
Varje kategori som du skapar definierar ett globmönster. Dispatcher jämför URI:n för det begärda innehållet med dessa mönster för att fastställa kategorin för det begärda innehållet:
- Kategoriernas ordning avgör i vilken ordning de jämförs med URI:n.
- Det första kategorimönstret som matchar URI:n är filens kategori. Inga fler kategorimönster utvärderas.
Dispatcher har stöd för högst åtta statistikkategorier. Om du definierar fler än åtta kategorier används bara de första 8.
Återge markering
Varje gång Dispatcher kräver en återgiven sida används följande algoritm för att välja återgivning:
-
Om begäran innehåller återgivningsnamnet i en
renderid
-cookie använder Dispatcher den återgivningen. -
Om begäran inte innehåller någon
renderid
-cookie jämför Dispatcher renderingsstatistiken:- Dispatcher bestämmer kategorin för begärande-URI.
- Dispatcher avgör vilken rendering som har lägst svarspoäng för den kategorin och väljer vilken rendering som ska användas.
-
Om ingen rendering är markerad än använder du den första renderingen i listan.
Poängen för en återgivnings kategori baseras på tidigare svarstider och tidigare misslyckade och lyckade anslutningar som Dispatcher försöker genomföra. För varje försök uppdateras poängen för kategorin för den begärda URI:n.
Definiera statistikkategorier defining-statistics-categories
Definiera en kategori för varje dokumenttyp som du vill behålla statistik för för återgivningsmarkering. Avsnittet /statistics
innehåller ett /categories
-avsnitt. Om du vill definiera en kategori lägger du till en rad under avsnittet /categories
som har följande format:
/name { /glob "pattern"}
Kategorin name
måste vara unik för servergruppen. pattern
beskrivs i avsnittet Designa mönster för globegenskaper.
För att fastställa kategorin för en URI jämför Dispatcher URI:n med varje kategorimönster tills en matchning hittas. Dispatcher börjar med den första kategorin i listan och fortsätter i rätt ordning. Därför bör du placera kategorier med mer specifika mönster först.
Dispatcher-standardfilen dispatcher.any
definierar till exempel en HTML-kategori och en annan kategori. Kategorin HTML är mer specifik och visas därför först:
/statistics
{
/categories
{
/html { /glob "*.html" }
/others { /glob "*" }
}
}
I följande exempel finns även en kategori för söksidor:
/statistics
{
/categories
{
/search { /glob "*search.html" }
/html { /glob "*.html" }
/others { /glob "*" }
}
}
Speglar om att servern inte är tillgänglig i Dispatcher-statistik reflecting-server-unavailability-in-dispatcher-statistics
Egenskapen /unavailablePenalty
anger den tid (i tiondelar av en sekund) som används för återgivningsstatistiken när en anslutning till återgivningen misslyckas. Dispatcher lägger till tiden i statistikkategorin som matchar den begärda URI:n.
Straffet tillämpas till exempel när TCP/IP-anslutningen till det angivna värdnamnet/porten inte kan upprättas. Orsaken är antingen att AEM inte körs (och inte lyssnar) eller på grund av ett nätverksrelaterat problem.
Egenskapen /unavailablePenalty
är direkt underordnad avsnittet /farm
(en jämställd del i avsnittet /statistics
).
Om det inte finns någon /unavailablePenalty
-egenskap används värdet "1"
.
/unavailablePenalty "1"
Identifierar en mapp för fästig anslutning - /stickyConnectionsFor
identifying-a-sticky-connection-folder-stickyconnectionsfor
Egenskapen /stickyConnectionsFor
definierar en mapp som innehåller klisterlappande dokument. Den här egenskapen används med URL:en. Dispatcher skickar alla begäranden från en enskild användare som finns i den här mappen till samma återgivningsinstans. Anteckningar säkerställer att sessionsdata finns och är konsekventa för alla dokument. Den här mekanismen använder cookien renderid
.
I följande exempel definieras en fast anslutning till mappen /products:
/stickyConnectionsFor "/products"
När en sida består av innehåll från flera innehållsnoder inkluderar du egenskapen /paths
som listar sökvägarna till innehållet. En sida innehåller till exempel innehåll från /content/image
, /content/video
och /var/files/pdfs
. Med följande konfiguration aktiveras häftiga anslutningar för allt innehåll på sidan:
/stickyConnections {
/paths {
"/content/image"
"/content/video"
"/var/files/pdfs"
}
}
httpOnly
httponly
När klisterlappande anslutningar är aktiverade ställer Dispatcher-modulen in cookien renderid
. Den här cookien har inte flaggan httponly
, som bör läggas till för att öka säkerheten. Du lägger till flaggan httponly
genom att ange egenskapen httpOnly
i noden /stickyConnections
i konfigurationsfilen dispatcher.any
. Egenskapens värde (antingen 0
eller 1
) definierar om renderid
-cookien har attributet HttpOnly
tillagt. Standardvärdet är 0
, vilket innebär att attributet inte läggs till.
Mer information om flaggan httponly
finns på den här sidan.
secure
secure
När klisterlappande anslutningar är aktiverade ställer Dispatcher-modulen in cookien renderid
. Den här cookien har inte flaggan secure
, som bör läggas till för att öka säkerheten. Du lägger till flaggan secure
som anger egenskapen secure
i noden /stickyConnections
i konfigurationsfilen dispatcher.any
. Egenskapens värde (antingen 0
eller 1
) definierar om renderid
-cookien har attributet secure
tillagt. Standardvärdet är 0
, vilket innebär att attributet läggs till om den inkommande begäran är säker. Om värdet är 1
läggs flaggan secure till oavsett om den inkommande begäran är säker eller inte.
Hantera återgivningsanslutningsfel handling-render-connection-errors
Konfigurera Dispatcher när återgivningsservern returnerar ett 500-fel eller inte är tillgänglig.
Ange en hälsokontrollsida specifying-a-health-check-page
Använd egenskapen /health_check
för att ange en URL som kontrolleras när en 500-statuskod inträffar. Om den här sidan även returnerar en 500-statuskod anses instansen vara otillgänglig och en konfigurerbar tidsåtgång ( /unavailablePenalty
) tillämpas på återgivningen innan du försöker igen.
/health_check
{
# Page gets contacted when an instance returns a 500
/url "/health_check.html"
}
Ange fördröjning för sidåterförsök specifying-the-page-retry-delay
Egenskapen /retryDelay
anger den tid (i sekunder) som Dispatcher väntar mellan anslutningsförsök med servergruppens återgivningar. För varje rund är det högsta antalet gånger Dispatcher försöker ansluta till en rendering antalet renderingar i servergruppen.
Dispatcher använder värdet "1"
om /retryDelay
inte uttryckligen har definierats. Standardvärdet är vanligtvis lämpligt.
/retryDelay "1"
Konfigurera antalet återförsök configuring-the-number-of-retries
Egenskapen /numberOfRetries
anger det maximala antalet anslutningsförsök som Dispatcher utför med återgivningarna. Om Dispatcher inte kan ansluta till en rendering efter detta antal försök returnerar Dispatcher ett misslyckat svar.
För varje rund är det högsta antalet gånger Dispatcher försöker ansluta till en rendering antalet renderingar i servergruppen. Det högsta antalet gånger som Dispatcher försöker ansluta är därför ( /numberOfRetries
) x (antalet återgivningar).
Om värdet inte definieras explicit är standardvärdet 5
.
/numberOfRetries "5"
Använda mekanismen för växling vid fel using-the-failover-mechanism
Om du vill skicka om begäranden till olika återgivningar när den ursprungliga begäran misslyckas, aktiverar du redundansfunktionen i Dispatcher-servergruppen. När redundans är aktiverat fungerar Dispatcher på följande sätt:
-
När en begäran om en återgivning returnerar HTTP-status 503 (UNAVAILABLE), skickar Dispatcher begäran till en annan återgivning.
-
När en begäran till en återgivning returnerar HTTP-status 50x (annan än 503), skickar Dispatcher en begäran om sidan som är konfigurerad för egenskapen
health_check
.- Om hälsokontrollen returnerar 500 (INTERNAL_SERVER_ERROR) skickar Dispatcher den ursprungliga begäran till en annan rendering.
- Om hälsokontrollen returnerar HTTP-status 200 returnerar Dispatcher det ursprungliga HTTP 500-felet till klienten.
Om du vill aktivera redundans lägger du till följande rad i servergruppen (eller webbplatsen):
/failover "1"
Expect: 100-continue
-begäranderubrik till återgivningen innan det faktiska innehållet mellanlagras. CQ 5.5 med CQSE besvarar sedan omedelbart med antingen 100 (CONTINUE) eller en felkod. Andra serverletsbehållare stöds också.Ignorerar avbrott - /ignoreEINTR
ignoring-interruption-errors-ignoreeintr
Error while reading response: Interrupted system call
Alla filsystemorienterade systemanrop kan avbrytas EINTR
om objektet för systemanropet finns på ett fjärrsystem som nås via NFS. Huruvida dessa systemanrop kan ta slut eller avbrytas baseras på hur det underliggande filsystemet monterades på den lokala datorn.
Använd parametern /ignoreEINTR
om instansen har en sådan konfiguration och loggen innehåller följande meddelande:
Error while reading response: Interrupted system call
Internt läser Dispatcher svaret från fjärrservern (d.v.s. AEM) med en slinga som kan representeras som:
while (response not finished) {
read more data
}
Sådana meddelanden kan genereras när EINTR
inträffar i avsnittet read more data
. Och det är orsaken till att en signal tas emot innan data tas emot.
Om du vill ignorera sådana avbrott kan du lägga till följande parameter i dispatcher.any
(före /farms
):
/ignoreEINTR "1"
Om /ignoreEINTR
anges till "1"
fortsätter Dispatcher att försöka läsa data tills det fullständiga svaret har lästs. Standardvärdet är 0
och alternativet inaktiveras.
Designa mönster för globala egenskaper designing-patterns-for-glob-properties
I flera avsnitt i Dispatcher konfigurationsfil används egenskaperna glob
som urvalskriterier för klientbegäranden. Värdena för glob
-egenskaperna är mönster som Dispatcher jämför med en aspekt av begäran, till exempel sökvägen till den begärda resursen eller klientens IP-adress. Objekten i avsnittet /filter
använder till exempel glob
mönster för att identifiera sökvägarna till de sidor som Dispatcher agerar på eller avvisar.
Värdena för glob
kan innehålla jokertecken och alfanumeriska tecken för att definiera mönstret.
*
Matchar noll eller flera intilliggande förekomster av ett tecken i strängen. Något av följande avgör det sista tecknet i matchningen:
Ett tecken i strängen matchar nästa tecken i mönstret och mönstertecknet har följande egenskaper:
- Inte en
*
- Inte en
?
- Ett literalt tecken (inklusive ett blanksteg) eller en teckenklass.
- Slutet på mönstret nås.
I en teckenklass tolkas tecknet bokstavligen.
*/geo*
Matchar alla sidor under noden /content/geometrixx
och noden /content/geometrixx-outdoors
. Följande HTTP-begäranden matchar mönstret:
"GET /content/geometrixx/en.html"
"GET /content/geometrixx-outdoors/en.html"
*outdoors/*
Matchar alla sidor under noden /content/geometrixx-outdoors
. Följande HTTP-begäran matchar till exempel globmönstret:
"GET /content/geometrixx-outdoors/en.html"
?
*outdoors/??/*
Matchar sidorna för alla språk i den externa geometrixx-webbplatsen. Följande HTTP-begäran matchar till exempel globmönstret:
"GET /content/geometrixx-outdoors/en/men.html"
Följande begäran matchar inte mönstret:
- "GET /content/geometrixx-outdoors/en.html"
[ and ]
En matchning inträffar om måltecknet matchar något av tecknen i teckenklassen, eller inom ett definierat intervall.
Om den avslutande parentesen inte inkluderas skapas inga matchningar i mönstret.
*[o]men.html*
Matchar följande HTTP-begäran:
"GET /content/geometrixx-outdoors/en/women.html"
Den matchar inte följande HTTP-begäran:
"GET /content/geometrixx-outdoors/en/men.html"
*[o/]men.html*
Matchar följande HTTP-begäranden:
"GET /content/geometrixx-outdoors/en/women.html"
"GET /content/geometrixx-outdoors/en/men.html"
-
*[m-p]men.html*
Matchar följande HTTP-begäran:
"GET /content/geometrixx-outdoors/en/women.html"
Den matchar inte följande HTTP-begäran:
"GET /content/geometrixx-outdoors/en/men.html"
!
^ wildcard
.Utanför en teckenklass tolkas det här tecknet bokstavligen.
*[ !o]men.html*
Matchar följande HTTP-begäran:
"GET /content/geometrixx-outdoors/en/men.html"
Den matchar inte följande HTTP-begäran:
"GET /content/geometrixx-outdoors/en/women.html"
*[ !o!/]men.html*
Den matchar inte följande HTTP-begäran:
"GET /content/geometrixx-outdoors/en/women.html"
eller"GET /content/geometrixx-outdoors/en/men. html"
^
!
.Utanför en teckenklass tolkas det här tecknet bokstavligen.
!
används och !
-tecknen i exempelmönstret ersätts med ^
-tecken.Loggning logging
I webbserverkonfigurationen kan du ange:
- Platsen för Dispatcher-loggfilen.
- Loggnivån.
Mer information finns i webbserverdokumentationen och filen Viktigt för din Dispatcher-instans.
Apache-loggar som roterats eller pipats
Om du använder en Apache-webbserver kan du använda standardfunktionerna för Loggrotation, Pipe-loggar eller båda. Använd till exempel pipade loggar:
DispatcherLog "| /usr/apache/bin/rotatelogs logs/dispatcher.log%Y%m%d 604800"
Den här funktionen roterar automatiskt:
- Dispatcher-loggfilen med en tidsstämpel i tillägget (
logs/dispatcher.log%Y%m%d
). - varje vecka (60 x 60 x 24 x 7 = 604800 sekunder).
Se dokumentationen för Apache Web Server om loggrotation och Pipe-loggar. Exempel: Apache 2.4.
Spårningsloggning trace-logging
Bland andra förbättringar för Dispatcher finns även version 4.2.0 med Trace Logging.
Den här möjligheten är högre än felsökningsloggning som visar ytterligare information i loggarna. Loggning läggs till för:
- Värdena för de vidarebefordrade rubrikerna.
- Regeln som tillämpas för en viss åtgärd.
Du kan aktivera spårningsloggning genom att ange loggnivån till 4
på webbservern.
Nedan visas ett exempel på loggar med spårning aktiverat:
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Host] = "localhost:8443"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[User-Agent] = "curl/7.43.0"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Accept] = "*/*"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL-Client-Cert] = "(null)"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Via] = "1.1 localhost:8443 (dispatcher)"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-For] = "::1"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL] = "on"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL-Cipher] = "DHE-RSA-AES256-SHA"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-SSL-Session-ID] = "ba931f5e4925c2dde572d766fdd436375e15a0fd24577b91f4a4d51232a934ae"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[X-Forwarded-Port] = "8443"
[Thu Mar 03 16:05:38 2016] [T] [17183] request.headers[Server-Agent] = "Communique-Dispatcher"
Och en händelse loggas när en fil som matchar en blockeringsregel begärs:
[Thu Mar 03 14:42:45 2016] [T] [11831] 'GET /content.infinity.json HTTP/1.1' was blocked because of /0082
Bekräfta grundläggande åtgärd confirming-basic-operation
Så här bekräftar du grundläggande åtgärder och interaktion för webbservern, Dispatcher och AEM:
-
Ange
loglevel
som3
. -
Starta webbservern. När du gör det startar även Dispatcher.
-
Starta AEM.
-
Kontrollera loggen och felfilerna för webbservern och Dispatcher.
-
Beroende på webbservern bör du se meddelanden som:
[Thu May 30 05:16:36 2002] [notice] Apache/2.0.50 (Unix) configured
och[Fri Jan 19 17:22:16 2001] [I] [19096] Dispatcher initialized (build XXXX)
-
-
Surfa på webbplatsen via webbservern. Bekräfta att innehållet visas som det ska.
På en lokal installation där AEM körs på port4502
och webbservern på80
får du åtkomst till webbplatskonsolen med båda:https://localhost:4502/libs/wcm/core/content/siteadmin.html
https://localhost:80/libs/wcm/core/content/siteadmin.html
- Resultaten ska vara identiska. Bekräfta åtkomst till andra sidor med samma mekanism.
-
Kontrollera att cachekatalogen fylls.
-
Aktivera en sida om du vill kontrollera att cacheminnet rensas korrekt.
-
Om allt fungerar som det ska kan du minska antalet
loglevel
till0
.
Använda flera utskickare using-multiple-dispatchers
I komplexa inställningar kan du använda flera Dispatcher. Du kan till exempel använda:
- en Dispatcher för att publicera en webbplats på intranätet
- en andra Dispatcher, med en annan adress och olika säkerhetsinställningar, för att publicera samma innehåll på Internet.
I så fall måste du se till att varje begäran endast går igenom en Dispatcher. En Dispatcher hanterar inte begäranden som kommer från andra Dispatcher. Kontrollera därför att båda utskickarna har direktåtkomst till den AEM webbplatsen.
Felsökning debugging
När du lägger till rubriken X-Dispatcher-Info
i en begäran, besvarar Dispatcher om målet har cachelagrats, returnerats från cachelagrat eller inte kunnat cachelagras alls. Svarshuvudet X-Cache-Info
innehåller den här informationen i ett läsbart format. Du kan använda dessa svarshuvuden för att felsöka problem som rör svar som cachelagrats av Dispatcher.
Den här funktionen är inte aktiverad som standard, så för att svarsrubriken X-Cache-Info
ska inkluderas måste servergruppen innehålla följande post:
/info "1"
Exempel:
/farm
{
/mywebsite
{
# Include X-Cache-Info response header if X-Dispatcher-Info is in request header
/info "1"
}
}
Dessutom behöver rubriken X-Dispatcher-Info
inte något värde, men om du använder curl
för testning måste du ange ett värde som ska skickas till rubriken, till exempel:
curl -v -H "X-Dispatcher-Info: true" https://localhost/content/wknd/us/en.html
Nedan finns en lista med de svarshuvuden som X-Dispatcher-Info
returnerar:
- målfilen cache-lagrad
Målfilen finns i cachen och Dispatcher har fastställt att den kan levereras. - cachelagring
Målfilen finns inte i cacheminnet och Dispatcher har fastställt att det går att cachelagra utdata och leverera dem. - cachelagring: statusfilen är nyare
Målfilen finns i cachen. En senare statusfil kan dock göra den ogiltig. Dispatcher tar bort målfilen, återskapar den från utdata och levererar den. - kan inte nås: dokumentroten finns inte
Servergruppens konfiguration innehåller inte någon dokumentrot (konfigurationselementcache.docroot
). - går inte att komma åt: Sökvägen till cachefilen är för lång
Målfilen - sammanfogningen av dokumentroten och URL-filen - överskrider det längsta möjliga filnamnet på systemet. - går inte att komma åt: den tillfälliga filsökvägen är för lång
Mallen för tillfälligt filnamn överskrider det längsta möjliga filnamnet på systemet. Dispatcher skapar först en temporär fil innan den cachelagrade filen faktiskt skapas eller skrivs över. Det tillfälliga filnamnet är målfilens namn med tecknen_YYYYXXXXXX
tillagda, därY
ochX
ersätts för att skapa ett unikt namn. - kan inte nås: URL för begäran saknar tillägg
Begär-URL:en har inget tillägg, eller så finns det en sökväg som följer filtillägget, till exempel:/test.html/a/path
. - kan inte nås: begäran måste vara GET eller HEAD
HTTP-metoden är inte GET eller HEAD. Dispatcher förutsätter att utdata innehåller dynamiska data som inte ska cachelagras. - kunde inte nås: begäran innehöll en frågesträng
Begäran innehöll en frågesträng. Dispatcher förutsätter att utdata är beroende av den frågesträng som har angetts och därför inte cachelagras. - kan inte nås: sessionshanteraren måste autentisera
En sessionshanterare (konfigurationen innehåller ensessionmanagement
-nod) styr servergruppens cache och begäran innehöll inte rätt autentiseringsinformation. - kan inte nås: begäran innehåller auktorisering
Servergruppen kan inte cachelagra utdata (allowAuthorized 0
) och begäran innehåller autentiseringsinformation. - kan inte nås: målet är en katalog
Målfilen är en katalog. Platsen kan peka på ett konceptuellt fel, där både en URL och en delwebbadress innehåller cachelagrade utdata. Om en begäran till/test.html/a/file.ext
till exempel kommer först och innehåller cachelagrade utdata, kan Dispatcher inte cachelagra utdata från en efterföljande begäran till/test.html
. - kan inte nås: URL för begäran har ett avslutande snedstreck
Begärans URL har ett avslutande snedstreck. - går inte att komma åt: URL för begäran saknas i cachereglerna
Servergruppens cacheregler tillåter explicit cachelagring av utdata från en begäran-URL. - inte tillgänglig: åtkomstkontroll nekade åtkomst
Gruppens behörighetskontroll nekade åtkomst till den cachelagrade filen. - kan inte nås: sessionen är ogiltig
En sessionshanterare (konfigurationen innehåller ensessionmanagement
-nod) styr servergruppens cache och användarens session är ogiltig eller inte längre giltig. - kan inte nås: svaret innehåller
no_cache
Fjärrservern returnerade ettDispatcher: no_cache
-huvud och förbjuder Dispatcher att cachelagra utdata. - kan inte nås: längden på svarsinnehållet är noll
Svarets innehållslängd är noll. Dispatcher skapar inte en fil med längden noll.