Dispatcher gebruiken met meerdere domeinen using-dispatcher-with-multiple-domains
Met de Dispatcher kunt u paginaaanvragen in meerdere webdomeinen verwerken en tegelijkertijd de volgende voorwaarden ondersteunen:
- De inhoud van het Web voor beide domeinen wordt opgeslagen in één enkele AEM bewaarplaats.
- De bestanden in de Dispatcher-cache kunnen voor elk domein afzonderlijk ongeldig worden gemaakt.
Een bedrijf publiceert bijvoorbeeld websites voor twee van hun merken: merk A en merk B. De inhoud van de websitepagina's wordt in AEM geschreven en in dezelfde werkruimte van de opslagplaats opgeslagen:
/
| - content
| - sitea
| - content nodes
| - siteb
| - content nodes
Pagina's voor BrandA.com
worden onder /content/sitea
opgeslagen. Clientverzoeken voor de URL https://BrandA.com/en.html
worden geretourneerd op de weergegeven pagina voor het knooppunt /content/sitea/en
. Pagina's voor BrandB.com
worden ook onder /content/siteb
opgeslagen.
Wanneer u Dispatcher gebruikt om inhoud in cache te plaatsen, moet u koppelingen maken tussen de pagina-URL in de HTTP-client-aanvraag, het pad van het corresponderende cachebestand en het pad van het corresponderende bestand in de opslagplaats.
Clientverzoeken
Wanneer clients HTTP-aanvragen naar de webserver verzenden, moet de URL van de aangevraagde pagina worden omgezet naar de inhoud in de Dispatcher-cache en uiteindelijk naar de inhoud in de opslagplaats.
- Het systeem van de domeinnaam ontdekt het IP adres van de server van het Web die voor de domeinnaam in het HTTP- verzoek wordt geregistreerd.
- De HTTP-aanvraag wordt naar de webserver verzonden.
- De HTTP-aanvraag wordt doorgegeven aan de Dispatcher.
- Dispatcher bepaalt of de cachebestanden geldig zijn. Indien geldig, worden de in de cache opgeslagen bestanden naar de client verzonden.
- Als bestanden in de cache niet geldig zijn, vraagt Dispatcher om nieuw weergegeven pagina's van de AEM-publicatie-instantie.
Cache-validatie
Wanneer Dispatcher Flush-replicators vragen dat Dispatcher cachebestanden ongeldig maakt, moet het pad van de inhoud in de opslagplaats worden omgezet naar de inhoud in de cache.
- a - Een pagina wordt geactiveerd op de AEM auteur en de inhoud wordt gerepliceerd naar de publicatie-instantie.
- b - De Dispatcher Flush Agent roept Dispatcher op om de cache voor de gerepliceerde inhoud ongeldig te maken.
- c - Dispatcher tikt een of meer .stat-bestanden aan om de cachebestanden ongeldig te maken.
Als u Dispatcher met meerdere domeinen wilt gebruiken, moet u AEM, Dispatcher en uw webserver configureren. De oplossingen die op deze pagina worden beschreven zijn algemeen en zijn op de meeste milieu's van toepassing. Wegens de ingewikkeldheid van sommige AEM topologieën, kan uw oplossing verdere douaneconfiguraties vereisen om bepaalde kwesties op te lossen. U moet waarschijnlijk de voorbeelden aanpassen om aan uw bestaande IT-infrastructuur en beheerbeleid te voldoen.
URL-toewijzing url-mapping
Als u wilt dat domein-URL's en inhoudspaden worden omgezet in bestanden in de cache, moet tijdens het proces een bestandspad of pagina-URL worden vertaald. Er worden beschrijvingen gegeven van de volgende gemeenschappelijke strategieën, waarbij pad- of URL-vertalingen op verschillende punten in het proces plaatsvinden:
- (Aanbevolen) De AEM publicatie-instantie gebruikt de toewijzing Sling voor resourceresolutie om interne URL-herschrijfregels te implementeren. Domein-URL's worden vertaald naar paden in de inhoudsopslagplaats. Zie AEM herschrijft Binnenkomende URLs.
- De webserver gebruikt interne URL-herschrijfregels die domein-URL's omzetten in cachepaden. Zie de Server van het Web binnen URLsherschrijft.
Het is raadzaam korte URL's te gebruiken voor webpagina's. Pagina-URL's weerspiegelen doorgaans de structuur van de opslagmap die de webinhoud bevat. De URL's geven echter niet de bovenste knooppunten in de opslagplaats weer, zoals /content
. De client is niet noodzakelijkerwijs op de hoogte van de structuur van de AEM opslagplaats.
Algemene vereisten general-requirements
Uw omgeving moet de volgende configuraties implementeren om Dispatcher te ondersteunen bij het werken met meerdere domeinen:
- Inhoud voor elk domein bevindt zich in afzonderlijke vertakkingen van de repository (zie de voorbeeldomgeving hieronder).
- De Dispatcher Flush-replicatieagent is geconfigureerd op de AEM publish-instantie. (Zie het Invalideren van het Geheime voorgeheugen van Dispatcher van een het Publiceren Instantie.)
- Het domeinnaamsysteem lost de domeinnamen op naar het IP-adres van de webserver.
- Het Dispatcher-cachegeheugen weerspiegelt de mapstructuur van de opslagplaats voor AEM inhoud. De bestandspaden onder de hoofdmap van het document van de webserver zijn gelijk aan de paden van de bestanden in de opslagplaats.
Omgeving voor de opgegeven voorbeelden environment-for-the-provided-examples
De voorbeeldoplossingen die worden verstrekt zijn op een milieu met de volgende kenmerken van toepassing:
-
De AEM auteur- en publicatie-instanties worden geïmplementeerd op Linux®-systemen.
-
Apache HTTPD is de webserver die wordt geïmplementeerd op een Linux®-systeem.
-
De opslagplaats van de AEM inhoud en de documentwortel van de Webserver gebruiken de volgende dossierstructuren (de documentwortel van de Apache Webserver is /
usr/lib/apache/httpd-2.4.3/htdocs)
:Bewaarplaats
| - /content
| - sitea
| | - content nodes
| - siteb
| - content nodes
de wortel van het Document van de Webserver
| - /usr
| - lib
| - apache
| - httpd-2.4.3
| - htdocs
| - content
| - sitea
| - content nodes
| - siteb
| - content nodes
Inkomende URL's AEM herschrijven aem-rewrites-incoming-urls
Door toewijzing van elementen voor resourceresolutie kunt u inkomende URL's aan AEM inhoudspaden koppelen. Maak toewijzingen op de AEM publicatieinstantie, zodat aanvragen van Dispatcher worden gerenderd naar de juiste inhoud in de opslagplaats.
Dispatcher-aanvragen voor het renderen van pagina's identificeren de pagina met behulp van de URL die door de webserver wordt doorgegeven. Wanneer de URL een domeinnaam bevat, wordt de URL met behulp van de splitsingstoewijzingen omgezet in de inhoud. In de volgende afbeelding ziet u een toewijzing van de branda.com/en.html
URL aan het knooppunt /content/sitea/en
.
Het Dispatcher-cachegeheugen weerspiegelt de structuur van de gegevensopslagknooppunten. Wanneer paginaberichten optreden, vereisen de resulterende verzoeken om de pagina in de cache ongeldig te maken daarom geen URL- of padvertalingen.
Virtuele hosts op de webserver definiëren define-virtual-hosts-on-the-web-server
Virtuele hosts op de webserver definiëren, zodat een andere hoofdmap van het document kan worden toegewezen aan elk webdomein:
- De webserver moet een virtueel domein definiëren voor elk van uw webdomeinen.
- Configureer voor elk domein de hoofdmap van het document zo dat deze overeenkomt met de map in de opslagplaats die de webinhoud van het domein bevat.
- Elk virtueel domein moet op Dispatcher betrekking hebbende configuraties ook omvatten, zoals die op worden beschreven Installing Dispatcherpagina.
In het volgende voorbeeld httpd.conf
-bestand worden twee virtuele domeinen geconfigureerd voor een Apache-webserver:
- De servernamen (die samenvallen met de domeinnamen) zijn branda.com (regel 16) en brandb.com (regel 30).
- De documenthoofdmap van elk virtueel domein is de map in de Dispatcher-cache die de pagina's van de site bevat. (lijnen 17 en 31)
Met deze configuratie voert de webserver de volgende handelingen uit wanneer deze een aanvraag voor https://branda.com/en/products.html
ontvangt:
-
Koppelt de URL aan de virtuele host met de waarde
ServerName
vanbranda.com.
-
Hiermee stuurt u de URL door naar Dispatcher.
httpd.conf httpd-conf
# load the Dispatcher module
LoadModule dispatcher_module modules/mod_dispatcher.so
# configure the Dispatcher module
<IfModule disp_apache2.c>
DispatcherConfig conf/dispatcher.any
DispatcherLog logs/dispatcher.log
DispatcherLogLevel 3
DispatcherNoServerHeader 0
DispatcherDeclineRoot 0
DispatcherUseProcessedURL 0
DispatcherPassError 0
</IfModule>
# Define virtual host for brandA.com
<VirtualHost *:80>
ServerName branda.com
DocumentRoot /usr/lib/apache/httpd-2.4.3/htdocs/content/sitea
<Directory /usr/lib/apache/httpd-2.4.3/htdocs/content/sitea>
<IfModule disp_apache2.c>
SetHandler dispatcher-handler
ModMimeUsePathInfo On
</IfModule>
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>
# define virtual host for brandB.com
<VirtualHost *:80>
ServerName brandB.com
DocumentRoot /usr/lib/apache/httpd-2.4.3/htdocs/content/siteb
<Directory /usr/lib/apache/httpd-2.4.3/htdocs/content/siteb>
<IfModule disp_apache2.c>
SetHandler dispatcher-handler
ModMimeUsePathInfo On
</IfModule>
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>
# document root for web server
DocumentRoot "/usr/lib/apache/httpd-2.4.3/htdocs"
De virtuele gastheren erven de 🔗 bezitswaarde 0} DispatcherConfig {die in de belangrijkste serversectie wordt gevormd. Virtuele hosts kunnen hun eigen eigenschap DispatcherConfig opnemen om de hoofdserverconfiguratie te overschrijven.
Dispatcher configureren om meerdere domeinen af te handelen configure-dispatcher-to-handle-multiple-domains
Als u URL's wilt ondersteunen die domeinnamen en de bijbehorende virtuele hosts bevatten, definieert u de volgende Dispatcher-farm:
- Vorm een landbouwbedrijf van Dispatcher voor elke virtuele gastheer. Deze landbouwbedrijven verwerken verzoeken van de Webserver voor elk domein, controleren caching dossiers, en verzoeken pagina's van renders.
- Vorm een landbouwbedrijf van Dispatcher dat voor het ongeldig maken van inhoud in het geheime voorgeheugen wordt gebruikt, ongeacht tot welk domein de inhoud behoort. Dit landbouwbedrijf behandelt de verzoeken van de dossierongeldigverklaring van de de replicatieagenten van Dispatcher van de Duw.
Dispatcher-boerderijen maken voor virtuele hosts
De landbouwbedrijven voor virtuele gastheren moeten de volgende configuraties hebben zodat URLs in cliëntHTTP- verzoeken aan de correcte dossiers in het geheime voorgeheugen van Dispatcher wordt opgelost:
-
De eigenschap
/virtualhosts
wordt ingesteld op de domeinnaam. Met deze eigenschap kan de Dispatcher het landbouwbedrijf aan het domein koppelen. -
Met de eigenschap
/filter
krijgt u toegang tot het pad van de aanvraag-URL die wordt afgekapt na het domeinnaamdeel. Voor de URLhttps://branda.com/en.html
wordt het pad bijvoorbeeld geïnterpreteerd als/en.html
, zodat het filter toegang tot dit pad moet toestaan. -
De eigenschap
/docroot
wordt ingesteld op het pad van de hoofdmap. Dat wil zeggen, de hoofdmap van de site-inhoud van het domein in de Dispatcher-cache. Dit pad wordt gebruikt als voorvoegsel voor de samengevoegde URL van de oorspronkelijke aanvraag. De hoofdmap van/usr/lib/apache/httpd-2.4.3/htdocs/sitea
zorgt er bijvoorbeeld voor dat de aanvraag vanhttps://branda.com/en.html
wordt omgezet in het/usr/lib/apache/httpd-2.4.3/htdocs/sitea/en.html
-bestand.
Ook, moet de AEM publiceer instantie als teruggeven voor de virtuele gastheer worden aangewezen. Vorm andere landbouwbedrijfeigenschappen zoals vereist. De volgende code is een afgekorte landbouwbedrijfconfiguratie voor het branda.com domein:
/farm_sitea {
...
/virtualhosts { "branda.com" }
/renders {
/rend01 { /hostname "127.0.0.1" /port "4503" }
}
/filter {
/0001 { /type "deny" /glob "*" }
/0023 { /type "allow" /glob "*/en*" }
...
}
/cache {
/docroot "/usr/lib/apache/httpd-2.4.3/htdocs/content/sitea"
...
}
...
}
Een Dispatcher-farm voor het ongeldig maken van cache maken
Een landbouwbedrijf van Dispatcher wordt vereist voor de behandeling van verzoeken om het ongeldig maken van caching dossiers. Dit landbouwbedrijf moet tot .stat dossiers in de docroot
folders van elke virtuele gastheer kunnen toegang hebben.
Met de volgende eigenschappenconfiguraties kan de Dispatcher bestanden in de opslagplaats voor AEM inhoud oplossen vanuit bestanden in de cache:
- De eigenschap
/docroot
wordt ingesteld op de standaardwaardedocroot
van de webserver. De map /docroot
is doorgaans de map waarin de map/content
wordt gemaakt. Een voorbeeldwaarde voor Apache op Linux® is/usr/lib/apache/httpd-2.4.3/htdocs
. - Met de eigenschap
/filter
hebt u toegang tot bestanden onder de map/content
.
Het /statfileslevel
bezit moet hoog genoeg zijn zodat .stat dossiers in de wortelfolder van elke virtuele gastheer worden gecreeerd. Met deze eigenschap kan de cache van elk domein afzonderlijk ongeldig worden gemaakt. Bij de voorbeeldinstelling maakt een /statfileslevel
-waarde van 2
.stat-bestanden in de map *docroot*/content/sitea
en de map *docroot*/content/siteb
.
Ook, moet de publiceer instantie als teruggeven voor de virtuele gastheer worden aangewezen. Vorm andere landbouwbedrijfeigenschappen zoals vereist. De volgende code is een afgekorte configuratie voor het landbouwbedrijf dat voor het ongeldig maken van het geheime voorgeheugen wordt gebruikt:
/farm_flush {
...
/virtualhosts { "invalidation_only" }
/renders {
/rend01 { /hostname "127.0.0.1" /port "4503" }
}
/filter {
/0001 { /type "deny" /glob "*" }
/0023 { /type "allow" /glob "*/content*" }
...
}
/cache {
/docroot "/usr/lib/apache/httpd-2.4.3/htdocs"
/statfileslevel "2"
...
}
...
}
Wanneer u de webserver start, geeft het Dispatcher-logboek (in de foutopsporingsmodus) de initialisatie van alle landbouwbedrijven aan:
Dispatcher initializing (build 4.1.2)
[Fri Nov 02 16:27:18 2012] [D] [24974(140006182991616)] farms[farm_sitea].cache.docroot = /usr/lib/apache/httpd-2.4.3/htdocs/content/sitea
[Fri Nov 02 16:27:18 2012] [D] [24974(140006182991616)] farms[farm_siteb].cache.docroot = /usr/lib/apache/httpd-2.4.3/htdocs/content/siteb
[Fri Nov 02 16:27:18 2012] [D] [24974(140006182991616)] farms[farm_flush].cache.docroot = /usr/lib/apache/httpd-2.4.3/htdocs
[Fri Nov 02 16:27:18 2012] [I] [24974(140006182991616)] Dispatcher initialized (build 4.1.2)
Sling Mapping voor resourceresolutie configureren configure-sling-mapping-for-resource-resolution
Gebruik de toewijzing van de Verschuiving voor middelresolutie zodat op domein-gebaseerde URLs aan inhoud op AEM publicatieinstantie oplossen. De middelafbeelding zet inkomende URLs van Dispatcher (oorspronkelijk van cliëntHTTP- verzoeken) aan inhoudsknopen om.
Om over het Verdelen van middelafbeelding te leren, zie Toewijzingen voor de Resolutie van het Middelin de het Verdelen documentatie.
Typisch, worden de afbeeldingen vereist voor de volgende middelen, hoewel andere afbeeldingen kunnen noodzakelijk zijn:
- Het hoofdknooppunt van de inhoudspagina (onder
/content
) - Het ontwerpknooppunt dat de pagina's gebruiken (onder
/etc/designs
) - De map
/libs
Nadat u de toewijzing voor de inhoudspagina creeert, om meer vereiste afbeeldingen te ontdekken gebruik Webbrowser om een pagina op de Webserver te openen. Zoek in het bestand error.log van de instantie publish berichten over bronnen die niet zijn gevonden. In het volgende voorbeeldbericht wordt aangegeven dat een toewijzing voor /etc/clientlibs
is vereist:
01.11.2012 15:59:24.601 *INFO* [10.36.34.243 [1351799964599] GET /etc/clientlibs/foundation/jquery.js HTTP/1.1] org.apache.sling.engine.impl.SlingRequestProcessorImpl service: Resource /content/sitea/etc/clientlibs/foundation/jquery.js not found
Voorbeeld van knooppunten voor resource-mapping
De volgende lijst maakt een lijst van de knopen die middelafbeelding voor het branda.com domein uitvoeren. Vergelijkbare knooppunten worden gemaakt voor het domein brandb.com
, zoals /etc/map/http/brandb.com
. In alle gevallen zijn toewijzingen vereist wanneer verwijzingen in de pagina HTML niet correct worden omgezet in de context van Sling.
/etc/map/http/branda.com
sling:Mapping
Name: sling:internalRedirect Type: String Value: /content/sitea
/etc/map/http/branda.com/libs
sling:Mapping
Name: sling:internalRedirect <br/>Type: String <br/>Value: /libs
/etc/map/http/branda.com/etc
sling:Mapping
/etc/map/http/branda.com/etc/designs
sling:Mapping
Name: sling:internalRedirect <br/>VType: String <br/>VValue: /etc/designs
/etc/map/http/branda.com/etc/clientlibs
sling:Mapping
Name: sling:internalRedirect <br/>VType: String <br/>VValue: /etc/clientlibs
De Dispatcher Flush-replicatieagent configureren configuring-the-dispatcher-flush-replication-agent
De Dispatcher Flush replicatieagent op AEM publicatieinstantie moet verzoeken tot ongeldig maken naar het correcte landbouwbedrijf van Dispatcher verzenden. Om een landbouwbedrijf te richten, gebruik het bezit van URI van de de replicatieagent van de Duw van Dispatcher (op het lusje van het Vervoer). Omvat de waarde van het /virtualhost
bezit voor het landbouwbedrijf van Dispatcher dat voor het ongeldig maken van het geheime voorgeheugen wordt gevormd:
https://*webserver_name*:*port*/*virtual_host*/dispatcher/invalidate.cache
Als u bijvoorbeeld de farm_flush
-farm van het vorige voorbeeld wilt gebruiken, is de URI https://localhost:80/invalidation_only/dispatcher/invalidate.cache
.
De webserver herschrijft binnenkomende URL's the-web-server-rewrites-incoming-urls
Als u domeingebaseerde URL's wilt omzetten in bestandspaden in de Dispatcher-cache, gebruikt u de functie voor het intern herschrijven van URL's op uw webserver. Bijvoorbeeld, worden de cliëntverzoeken om de https://brandA.com/en.html
pagina vertaald aan het content/sitea/en.html
dossier in de documentwortel van de Webserver.
Het Dispatcher-cachegeheugen weerspiegelt de structuur van de gegevensopslagknooppunten. Wanneer paginaberichten optreden, vereisen de resulterende verzoeken om de pagina in de cache ongeldig te maken daarom geen URL- of padvertalingen.
Virtuele hosts definiëren en regels op de webserver herschrijven define-virtual-hosts-and-rewrite-rules-on-the-web-server
Configureer de volgende aspecten op de webserver:
- Definieer een virtuele host voor elk van uw webdomeinen.
- Configureer voor elk domein de hoofdmap van het document zo dat deze overeenkomt met de map in de opslagplaats die de webinhoud van het domein bevat.
- Voor elk virtueel domein, creeer een URL die anders noemt regel die inkomende URL aan de weg van het caching dossier vertaalt.
- Elk virtueel domein moet op Dispatcher betrekking hebbende configuraties ook omvatten, zoals die op worden beschreven Installing Dispatcherpagina.
- De Dispatcher-module moet zijn geconfigureerd voor het gebruik van de URL die de webserver heeft herschreven. (Zie het
DispatcherUseProcessedURL
bezit in Installerend Dispatcher.)
In het volgende voorbeeld wordt het bestand httpd.conf geconfigureerd voor twee virtuele hosts voor een Apache-webserver:
-
De servernamen (die samenvallen met de domeinnamen) zijn
brandA.com
(regel 16) enbrandB.com
(regel 32). -
De documenthoofdmap van elk virtueel domein is de map in de Dispatcher-cache die de pagina's van de site bevat. (Regels 20 en 33)
-
De URL herschrijft regel voor elk virtueel domein is een regelmatige uitdrukking. Met de reguliere expressie wordt het pad van de opgevraagde pagina vooraf vastgelegd. Het pad naar de pagina's in de cache staat vooraf. (Regels 19 en 35)
-
De eigenschap
DispatcherUseProcessedURL
wordt ingesteld op1
. (regel 10)
De webserver voert bijvoorbeeld de volgende handelingen uit wanneer deze een aanvraag ontvangt met de URL https://brandA.com/en/products.html
:
- Koppelt de URL aan de virtuele host met de waarde
ServerName
vanbrandA.com.
- Hiermee herschrijft u de URL die u wilt instellen
/content/sitea/en/products.html.
- Hiermee stuurt u de URL door naar Dispatcher.
httpd.conf httpd-conf-1
# load the Dispatcher module
LoadModule dispatcher_module modules/mod_dispatcher.so
# configure the Dispatcher module
<IfModule disp_apache2.c>
DispatcherConfig conf/dispatcher.any
DispatcherLog logs/dispatcher.log
DispatcherLogLevel 3
DispatcherNoServerHeader 0
DispatcherDeclineRoot 0
DispatcherUseProcessedURL 1
DispatcherPassError 0
</IfModule>
# Define virtual host for brandA.com
<VirtualHost *:80>
ServerName branda.com
DocumentRoot /usr/lib/apache/httpd-2.4.3/htdocs/content/sitea
RewriteEngine on
RewriteRule ^/(.*)\.html$ /content/sitea/$1.html [PT]
<Directory /usr/lib/apache/httpd-2.4.3/htdocs/content/sitea>
<IfModule disp_apache2.c>
SetHandler dispatcher-handler
ModMimeUsePathInfo On
</IfModule>
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>
# define virtual host for brandB.com
<VirtualHost *:80>
ServerName brandB.com
DocumentRoot /usr/lib/apache/httpd-2.4.3/htdocs/content/siteb
RewriteEngine on
RewriteRule ^/(.*)\.html$ /content/siteb/$1.html [PT]
<Directory /usr/lib/apache/httpd-2.4.3/htdocs/content/siteb>
<IfModule disp_apache2.c>
SetHandler dispatcher-handler
ModMimeUsePathInfo On
</IfModule>
Options FollowSymLinks
AllowOverride None
</Directory>
</VirtualHost>
# document root for web server
DocumentRoot "/usr/lib/apache/httpd-2.4.3/htdocs"
Een Dispatcher-farm configureren configure-a-dispatcher-farm
Wanneer de Webserver URLs herschrijft, vereist Dispatcher één enkel landbouwbedrijf dat volgens wordt bepaald die Dispatchervormt. De volgende configuraties zijn vereist om de virtuele hosts van de webserver en de regels voor het wijzigen van de naam van URL's te ondersteunen:
- De eigenschap
/virtualhosts
moet de ServerName-waarden voor alle VirtualHost-definities bevatten. - De eigenschap
/statfileslevel
moet hoog genoeg zijn om .stat-bestanden te maken in de mappen die de inhoudsbestanden voor elk domein bevatten.
Het volgende voorbeeldconfiguratiebestand is gebaseerd op het voorbeeldbestand dispatcher.any
dat met Dispatcher is geïnstalleerd. De volgende wijzigingen zijn vereist voor ondersteuning van de webserverconfiguraties van het vorige httpd.conf
-bestand:
- De eigenschap
/virtualhosts
zorgt ervoor dat Dispatcher aanvragen voor de domeinenbrandA.com
enbrandB.com
afhandelt. (regel 12) - De eigenschap
/statfileslevel
wordt ingesteld op 2, zodat statusbestanden worden gemaakt in elke map die de webinhoud van het domein bevat (regel 41):/statfileslevel "2"
Zoals gewoonlijk is de hoofdmap van het document in de cache gelijk aan de hoofdmap van het document in de webserver (regel 40): /usr/lib/apache/httpd-2.4.3/htdocs
dispatcher.any
dispatcher-any
/name "testDispatcher"
/farms
{
/dispfarm0
{
/clientheaders
{
"*"
}
/virtualhosts
{
"brandA.com" "brandB.com"
}
/renders
{
/rend01 { /hostname "127.0.0.1" /port "4503" }
}
/filter
{
/0001 { /type "deny" /glob "*" }
/0023 { /type "allow" /glob "*/content*" } # disable this rule to allow mapped content only
/0041 { /type "allow" /glob "* *.css *" } # enable css
/0042 { /type "allow" /glob "* *.gif *" } # enable gifs
/0043 { /type "allow" /glob "* *.ico *" } # enable icos
/0044 { /type "allow" /glob "* *.js *" } # enable javascript
/0045 { /type "allow" /glob "* *.png *" } # enable png
/0046 { /type "allow" /glob "* *.swf *" } # enable flash
/0061 { /type "allow" /glob "POST /content/[.]*.form.html" } # allow POSTs to form selectors under content
/0062 { /type "allow" /glob "* /libs/cq/personalization/*" } # enable personalization
/0081 { /type "deny" /glob "GET *.infinity.json*" }
/0082 { /type "deny" /glob "GET *.tidy.json*" }
/0083 { /type "deny" /glob "GET *.sysview.xml*" }
/0084 { /type "deny" /glob "GET *.docview.json*" }
/0085 { /type "deny" /glob "GET *.docview.xml*" }
/0086 { /type "deny" /glob "GET *.*[0-9].json*" }
/0090 { /type "deny" /glob "* *.query.json*" }
}
/cache
{
/docroot "/usr/lib/apache/httpd-2.4.3/htdocs"
/statfileslevel "2"
/allowAuthorized "0"
/rules
{
/0000 { /glob "*" /type "allow" }
}
/invalidate
{
/0000 { /glob "*" /type "deny" }
/0001 { /glob "*.html" /type "allow" }
}
/allowedClients
{
}
}
/statistics
{
/categories
{
/html { /glob "*.html" }
/others { /glob "*" }
}
}
}
}
Koppelingen naar niet-HTML-bestanden herschrijven rewriting-links-to-non-html-files
Om verwijzingen naar dossiers te herschrijven die uitbreidingen buiten .html of .htm hebben, creeer een Sling rewriter transformatorcomponent en voeg het aan de standaard rewriter pijpleiding toe.
Verwijzingen herschrijven wanneer de middelwegen niet correct in de context van de Webserver oplossen. Een transformator is bijvoorbeeld vereist wanneer componenten die afbeeldingen genereren koppelingen maken, zoals /content/sitea/en/products.navimage.png. De topnav
component van hoe te om tot een Volledig Aanbevolen Website van Internette leiden leidt tot dergelijke verbindingen.
het Verschuiven herschrijveris een module die post-verwerkt het Schuiven output. De de pijpleidingsimplementaties van SAX van rewriter bestaan uit een generator, één of meerdere transformatoren, en serializer:
- Generator: ontleedt de het Verschuiven outputstroom (het document van HTML) en produceert de gebeurtenissen van SAX wanneer het specifieke elementtypes ontmoet.
- Transformer: luistert naar de gebeurtenissen van SAX en wijzigt daarom het gebeurtenisdoel (een element van HTML). Een rewriter-pijplijn bevat nul of meer transformatoren. Transformatoren worden op volgorde uitgevoerd en geven de SAX-gebeurtenissen door aan de volgende transformator in de reeks.
- Serializer: maakt de output, met inbegrip van de wijzigingen van elke transformator in series.
De AEM Standaard Rewriter Pipeline the-aem-default-rewriter-pipeline
AEM gebruikt een standaardpijpleidingsrewriter die documenten van het type text/html verwerkt:
- De generator ontleedt HTML documenten en produceert gebeurtenissen SAX wanneer het een, img, gebied, vorm, basis, verbinding, manuscript, en lichaamselementen ontmoet. De generatoralias is
htmlparser
. - De pijplijn bevat de volgende transformatoren:
linkchecker
,mobile
,mobiledebug
,contentsync
. Met de transformatorlinkchecker
worden paden naar HTML- of HTM-bestanden waarnaar wordt verwezen, geexternaliseerd om verbroken koppelingen te voorkomen. - De serializer schrijft de uitvoer van HTML. De serializer-alias is htmlwriter.
Het knooppunt /libs/cq/config/rewriter/default
definieert de pijplijn.
Een transformator maken creating-a-transformer
Om een transformatorcomponent tot stand te brengen en het in een pijpleiding te gebruiken, voer de volgende taken uit:
- Implementeer de interface
org.apache.sling.rewriter.TransformerFactory
. Deze klasse maakt instanties van uw transformatorklasse. Geef waarden op voor de eigenschaptransformer.type
(de transformatoralias) en configureer de klasse als een OSGi-servicecomponent. - Implementeer de interface
org.apache.sling.rewriter.Transformer
. Als u het werk wilt minimaliseren, kunt u de klasseorg.apache.cocoon.xml.sax.AbstractSAXPipe
uitbreiden. Als u het herschrijfgedrag wilt aanpassen, overschrijft u de startElement-methode. Deze methode wordt geroepen voor elke gebeurtenis van SAX die tot de transformator wordt overgegaan. - Bundel en implementeer de klassen.
- Om transformator aan de pijpleiding toe te voegen, voeg een configuratieknoop aan uw AEM toepassing toe.
- Stel de eigenschap
pipeline.mode
in opglobal
. - Stel de eigenschap
service.ranking
in op een positief geheel getal. - Neem geen eigenschap
pipeline.type
op.
In de volgende voorbeelden wordt een transformator geïmplementeerd die verwijzingen naar afbeeldingsbestanden herschrijft.
- De MyRewriterTransformerFactory-klasse instantieert MyRewriterTransformer-objecten. De eigenschap pipe.type stelt de transformator-alias in op
mytransformer
. Om de alias in een pijpleiding te omvatten, zou de knoop van de pijpleidingsconfiguratie de alias in de lijst van transformatoren moeten omvatten. - De klasse MyRewriterTransformer negeert de startElement-methode van de klasse AbstractSAXTransformer. De startElement-methode herschrijft de waarde van src-kenmerken voor img-elementen.
De voorbeelden zijn niet robuust. Niet gebruiken in een productieomgeving.
Voorbeeld TransformerFactory-implementatie example-transformerfactory-implementation
package com.adobe.example;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.apache.felix.scr.annotations.Property;
import org.apache.sling.rewriter.Transformer;
import org.apache.sling.rewriter.TransformerFactory;
@Component
@Service
public class MyRewriterTransformerFactory implements TransformerFactory {
/* Define the alias */
@Property(value="mytransformer")
static final String PIPELINE_TYPE ="pipeline.type";
public Transformer createTransformer() {
return new MyRewriterTransformer ();
}
}
Voorbeeld-transformatie example-transformer-implementation
package com.adobe.example;
import java.io.IOException;
import org.apache.cocoon.xml.sax.AbstractSAXPipe;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.rewriter.ProcessingComponentConfiguration;
import org.apache.sling.rewriter.ProcessingContext;
import org.apache.sling.rewriter.Transformer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import javax.servlet.http.HttpServletRequest;
public class MyRewriterTransformer extends AbstractSAXPipe implements Transformer {
private static final Logger log = LoggerFactory.getLogger(MyRewriterTransformer.class);
private SlingHttpServletRequest httpRequest;
/* The element and attribute to act on */
private static final String ATT_NAME = new String("src");
private static final String EL_NAME = new String("img");
public MyRewriterTransformer () {
}
public void dispose() {
}
public void init(ProcessingContext context, ProcessingComponentConfiguration config) throws IOException {
this.httpRequest = context.getRequest();
log.debug("Transforming request {}.", httpRequest.getRequestURI());
}
@Override
public void startElement (String nsUri, String localname, String qname, Attributes atts) throws SAXException {
/* copy the element attributes */
AttributesImpl linkAtts = new AttributesImpl(atts);
/* Only interested in EL_NAME elements */
if(EL_NAME.equalsIgnoreCase(localname)){
/* iterate through the attributes of the element and act only on ATT_NAME attributes */
for (int i=0; i < linkAtts.getLength(); i++) {
if (ATT_NAME.equalsIgnoreCase(linkAtts.getLocalName(i))) {
String path_in_link = linkAtts.getValue(i);
/* use the resource resolver of the http request to reverse-resolve the path */
String mappedPath = httpRequest.getResourceResolver().map(httpRequest, path_in_link);
log.info("Tranformed {} to {}.", path_in_link,mappedPath);
/* update the attribute value */
linkAtts.setValue(i,mappedPath);
}
}
}
/* return updated attributes to super and continue with the transformer chain */
super.startElement(nsUri, localname, qname, linkAtts);
}
}
De transformator toevoegen aan een Rewriter Pipeline adding-the-transformer-to-a-rewriter-pipeline
Creeer een knoop JCR die een pijpleiding bepaalt die uw transformator gebruikt. De volgende knoopdefinitie leidt tot een pijpleiding die tekst/html dossiers verwerkt. De standaard AEM generator en parser voor HTML worden gebruikt.
pipeline.mode
op global
instelt, hoeft u geen pijplijn te configureren. In de modus global
wordt de transformator in alle pijpleidingen ingevoegd.Rewriter configuration node - XML-representatie rewriter-configuration-node-xml-representation
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:jcr="https://www.jcp.org/jcr/1.0" xmlns:nt="https://www.jcp.org/jcr/nt/1.0"
jcr:primaryType="nt:unstructured"
contentTypes="[text/html]"
enabled="{Boolean}true"
generatorType="htmlparser"
order="5"
serializerType="htmlwriter"
transformerTypes="[mytransformer]">
</jcr:root>
In de volgende afbeelding ziet u de CRXDE Lite-representatie van het knooppunt: