Konfigurieren von Dispatcher für Communities configuring-dispatcher-for-communities
AEM Communities aem-communities
Für AEM Communities ist es erforderlich, die Dispatcher so zu konfigurieren, dass eine ordnungsgemäße Funktionsweise der Community-Sites“ ist. Zusätzliche Konfigurationen sind erforderlich, wenn Funktionen wie die Anmeldung bei sozialen Netzwerken einbezogen werden sollen.
Erfahren Sie, was für Ihre bestimmte Bereitstellung und Ihr Site-Design erforderlich ist
- Kontaktieren Sie die Kundenunterstützung
Siehe auch die Hauptdokumentation zu Dispatcher.
Dispatcher-Caching dispatcher-caching
Überblick overview
Dispatcher-Caching für AEM Communities ist die Fähigkeit von Dispatcher, vollständig zwischengespeicherte Versionen der Seiten einer Community-Site bereitzustellen.
Derzeit wird sie nur für anonyme Site-Besucher unterstützt, z. B. Benutzer, die die Community-Site durchsuchen oder infolge einer Suche auf einer Community-Seite landen, und für Suchmaschinen, die Seiten indizieren. Der Vorteil besteht darin, dass anonyme Benutzer und Suchmaschinen eine verbesserte Leistung erhalten.
Bei angemeldeten Mitgliedern umgeht der Dispatcher den Cache und leitet Anfragen direkt an den Publisher weiter, sodass alle Seiten dynamisch generiert und bereitgestellt werden.
Wenn so konfiguriert ist, dass die Zwischenspeicherung in Dispatcher unterstützt wird, wird der Kopfzeile eine TTL-basierte „max age“-Gültigkeit hinzugefügt, um sicherzustellen, dass die in Dispatcher zwischengespeicherten Seiten aktuell sind.
Voraussetzungen requirements
-
Dispatcher Dispatcher Version 4.1.2 oder höher (die neueste Version finden unter „Installieren von „)
-
- Version 3.3.2 oder höher
ACS AEM Commons - Dispatcher Cache Control Header - Max AgeOSGi-Konfiguration
Konfiguration configuration
Die OSGi-Konfiguration ACS AEM Commons - Dispatcher Cache Control Header - Max Age legt den Ablauf von zwischengespeicherten Seiten fest, die unter einem bestimmten Pfad angezeigt werden.
-
In der Web-Konsole.
-
ACS AEM Commons - Dispatcher Cache Control Header - Max Agesuchen -
Wählen Sie das Symbol "+", um eine Verbindungskonfiguration zu erstellen.
-
Filtermuster
(erforderlich) Ein oder mehrere Pfade zu Community-Seiten. Zum Beispiel:/content/sites/engage/(.*). -
Cache-Control Max. Alter
(erforderlich) Das maximale Alter (in Sekunden), das der Cache-Control-Kopfzeile hinzugefügt werden soll. Der Wert muss größer als null (0) sein.
Dispatcher-Filter dispatcher-filters
Der Abschnitt /filter der dispatcher.any-Datei ist unter " auf Inhalte konfigurieren - /filter“ .
In diesem Abschnitt werden Einträge beschrieben, die wahrscheinlich für das ordnungsgemäße Funktionieren der Communities-Funktionen erforderlich sind.
Die Namen der Filtereigenschaften entsprechen der Konvention, eine vierstellige Zahl zu verwenden, um die Reihenfolge anzugeben, in der Filtermuster angewendet werden sollen. Wenn mehrere Filtermuster auf eine Anfrage angewendet werden, ist das zuletzt angewendete Filtermuster wirksam. Daher wird das erste Filtermuster häufig dazu verwendet, alles zu verweigern, sodass die folgenden Muster dazu dienen, den Zugriff auf kontrollierte Weise wiederherzustellen.
In den folgenden Beispielen werden Eigenschaftsnamen verwendet, die wahrscheinlich geändert werden müssen, damit sie in eine bestimmte dispatcher.any-Datei passen.
Siehe auch:
Alle angezeigten Eigenschaftsnamen, z. B. /0050 und /0170, sollten so angepasst werden, dass sie in eine vorhandene
dispatcher.any Konfigurationsdatei passen.Die folgenden Einträge sollten am Ende des /filter-Abschnitts hinzugefügt werden, insbesondere nach allen abgelehnten Einträgen.
# design and template assets
/0050 { /type "allow" /url "/etc/designs/*" }
# collected JS/CSS from the components and design
/0051 { /type "allow" /url "/etc/clientlibs/*" }
# foundation search component - write stats
/0052 { /type "allow" /url "/bin/statistics/tracker/*" }
# allow users to edit profile page
/0054 { /type "allow" /url "* /home/users/*/*/profile.form.html*" }
# all profile data
/0057 { /type "allow" /url "/home/users/*/profile/*" }
# required for social "Sign In" link.
/0059 { /type "allow" /url "/etc/clientcontext/*" }
# required for "Sign Out" operation
/0063 { /type "allow" /url "* /system/sling/logout*" }
# enable Facebook and Twitter signin
/0064 { /type "allow" /url "/etc/cloudservices/*" }
# enable personalization
/0062 { /type "allow" /url "/libs/cq/personalization/*" }
# Enable CSRF token otherwise nothings works.
/5001 { /type "allow" /url "/libs/granite/csrf/token.json *"}
# Allow SCF User Model to bootstrap as it depends on the granite user
/5002 { /type "allow" /url "/libs/granite/security/currentuser.json*" }
# Allow Communities Site Logout button work
/5003 { /type "allow" /url "/system/sling/logout.html*" }
# Allow i18n to load correctly
/5004 { /type "allow" /url "/libs/cq/i18n/dict.en.json *" }
# Allow social json get pattern.
/6002 { /type "allow" /url "*.social.*.json*" }
# Allow loading of templates
/6003 { /type "allow" /url "/services/social/templates*" }
# Allow SCF User model to check moderator rules
/6005 { /type "allow" /url "/services/social/getLoggedInUser?moderatorCheck=*" }
# Allow CKEditor to load which uses a query pattern.
/6006 { /type "allow" /url "/etc/clientlibs/social/thirdparty/ckeditor/*.js?t=*" }
/6007 { /type "allow" /url "/etc/clientlibs/social/thirdparty/ckeditor/*.css?t=*" }
# Allow Fonts from Communities to load
/6050 { /type "allow" /url "*.woff" }
/6051 { /type "allow" /url "*.ttf" }
# Enable CQ Security checkpoint for component guide.
/7001 { /type "allow" /url "/libs/cq/security/userinfo.json?cq_ck=*"
Dispatcher-Regeln dispatcher-rules
Im Abschnitt Regeln von dispatcher.any wird definiert, welche Antworten basierend auf der angeforderten URL zwischengespeichert werden sollen. Für Communities wird der Abschnitt Regeln verwendet, um zu definieren, was nie zwischengespeichert werden soll.
# Never cache the client-side .social.json calls
/0001 { /type "deny" /url "*.social.json*" }
# Never cache the user-specific .json requests
/0002 { /type "deny" /url "/libs/granite/csrf/token.json*" }
/0003 { /type "deny" /url "/libs/granite/security/currentuser.json*" }
/0004 { /type "deny" /url "/libs/granite/security/userinfo.json*" }
# Never cache the private community groups pages in case - add your own deny rules in there
/0005 { /type "deny" /url "/content/*/groups/*" }
# Never cache the assignments page in case the Enablement feature is in use - add your own deny rules in there
/0006 { /type "deny" /url "/content/*/assignments/*" }
# Never cache user generated content
/0208 { /type "deny" /url "/content/usergenerated/*" }
Fehlerbehebung troubleshooting
Eine Hauptursache für Probleme ist das Einfügen von Filterregeln, ohne auf die Auswirkungen auf frühere Regeln zu achten, insbesondere wenn eine Regel hinzugefügt wird, um den Zugriff zu verweigern.
Das erste Filtermuster wird häufig verwendet, um alles abzulehnen, sodass die folgenden Filter den Zugriff kontrolliert wiederherstellen. Wenn mehrere Filter auf eine Anfrage angewendet werden, wird der letzte Filter angewendet, der tatsächlich angewendet wird.
Beispiel: dispatcher.any sample-dispatcher-any
Im Folgenden finden Sie eine Beispieldatei für dispatcher.any, die die Ordner Communities /filters und /rules enthält.
# Each farm configures a set of load balanced renders (that is, remote servers)
/farms
{
# First farm entry
/website
{
# Request headers that should be forwarded to the remote server.
/clientheaders
{
# Forward all request headers that are end-to-end. If you want
# to forward a specific set of headers, you'll have to list
# them here.
"*"
}
# Hostname matching for farm selection (virtual domain addressing)
/virtualhosts
{
# Entries will be compared against the "Host" request header
# and an optional request URL prefix.
#
# Examples:
#
# www.company.com
# intranet.*
# myhost:8888/mysite
"*"
}
# The load will be balanced among these render instances
/renders
{
/rend01
{
# Hostname or IP of the render
/hostname "127.0.0.1"
# Port of the render
/port "4503"
# Connect timeout in milliseconds, 0 to wait indefinitely
# /timeout "0"
}
}
# The filter section defines the requests that should be handled by the dispatcher.
#
# Entries can be either specified using urls, or elements of the request line:
#
# (1) urls will be compared against the entire request line, for example,:
#
# /0001 { /type "deny" /url "* /index.html *" }
#
# matches request "GET /index.html HTTP/1.1" but not "GET /index.html?a=b HTTP/1.1".
#
# (2) method/url/query/protocol will be compared againts the respective elements of
# the request line, for example,:
#
# /0001 { /type "deny" /method "GET" /url "/index.html" }
#
# matches both "GET /index.html" and "GET /index.html?a=b HTTP/1.1".
#
# Note: specifying elements of the request line is the preferred method.
/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 specific mime types in non-public content directories
/0041 { /type "allow" /url "*.css" } # enable css
/0042 { /type "allow" /url "*.gif" } # enable gifs
/0043 { /type "allow" /url "*.ico" } # enable icos
/0044 { /type "allow" /url "*.js" } # enable javascript
/0045 { /type "allow" /url "*.png" } # enable png
/0046 { /type "allow" /url "*.swf" } # enable flash
/0047 { /type "allow" /url "*.jpg" } # enable jpg
/0048 { /type "allow" /url "*.jpeg" } # enable jpeg
# Deny content grabbing
/0081 { /type "deny" /url "*.infinity.json" }
/0082 { /type "deny" /url "*.tidy.json" }
/0083 { /type "deny" /url "*.sysview.xml" }
/0084 { /type "deny" /url "*.docview.json" }
/0085 { /type "deny" /url "*.docview.xml" }
/0086 { /type "deny" /url "*.*[0-9].json" }
# /0087 { /type "allow" /method "GET" /url "*.1.json" } # allow one-level json requests
# Deny query
/0090 { /type "deny" /url "*.query.json" }
#######################################
## BEGIN: AEM COMMUNITITES ADDITIONS
#######################################
/0050 { /type "allow" /url "/etc/designs/*" }
/0051 { /type "allow" /url "/etc/clientlibs/*" }
/0052 { /type "allow" /url "/bin/statistics/tracker/*" }
/0054 { /type "allow" /url "* /home/users/*/*/profile.form.html*" }
/0057 { /type "allow" /url "/home/users/*/profile/*" }
/0059 { /type "allow" /url "/etc/clientcontext/*" }
/0063 { /type "allow" /url "* /system/sling/logout*" }
/0064 { /type "allow" /url "/etc/cloudservices/*" }
/0062 { /type "allow" /url "/libs/cq/personalization/*" } # enable personalization
# Enable CSRF token otherwise nothings works.
/5001 { /type "allow" /url "/libs/granite/csrf/token.json *"}
# Allow SCF User Model to bootstrap as it depends on the granite user
/5002 { /type "allow" /url "/libs/granite/security/currentuser.json*" }
# Allow Communities Site Logout button work
/5003 { /type "allow" /url "/system/sling/logout.html*" }
# Allow i18n to load correctly
/5004 { /type "allow" /url "/libs/cq/i18n/dict.en.json *" }
# Allow social json get pattern.
/6002 { /type "allow" /url "*.social.*.json*" }
# Allow loading of templates
/6003 { /type "allow" /url "/services/social/templates*" }
# Allow SCF User model to check moderator rules
/6005 { /type "allow" /url "/services/social/getLoggedInUser?moderatorCheck=*" }
# Allow CKEditor to load which uses a query pattern.
/6006 { /type "allow" /url "/etc/clientlibs/social/thirdparty/ckeditor/*.js?t=*" }
/6007 { /type "allow" /url "/etc/clientlibs/social/thirdparty/ckeditor/*.css?t=*" }
# Allow Fonts from Communities to load
/6050 { /type "allow" /url "*.woff" }
/6051 { /type "allow" /url "*.ttf" }
# Enable CQ Security checkpoint for component guide.
/7001 { /type "allow" /url "/libs/cq/security/userinfo.json?cq_ck=*"}
#######################################
## END: AEM COMMUNITITES ADDITIONS
#######################################
}
# The cache section regulates what responses will be cached and where.
/cache
{
# The docroot must be equal to the document root of the webserver. The
# dispatcher will store files relative to this directory and subsequent
# requests may be "declined" by the dispatcher, allowing the webserver
# to deliver them just like static files.
/docroot "/opt/dispatcher"
# Sets the level upto which files named ".stat" will be created in the
# document root of the webserver. When an activation request for some
# page is received, only files within the same subtree are affected
# by the invalidation.
#/statfileslevel "0"
# Flag indicating whether to cache responses to requests that contain
# authorization information.
/allowAuthorized "1"
# Flag indicating whether the dispatcher should serve stale content if
# no remote server is available.
#/serveStaleOnError "0"
# The rules section defines what responses should be cached based on
# the requested URL. Only the following requests can
# lead to cacheable responses:
#
# - HTTP method is GET
# - URL has an extension
# - Request has no query string
# - Request has no "Authorization" header (unless allowAuthorized is 1)
/rules
{
/0000
{
# the matching pattern to be compared against the url
# example: * -> everything
# : /foo/bar.* -> only the /foo/bar documents
# : /foo/bar/* -> all pages below /foo/bar
# : /foo/bar[./]* -> all pages below and /foo/bar itself
# : *.html -> all .html files
/url "*"
/type "allow"
}
#######################################
## BEGIN: AEM COMMUNITITES ADDITIONS
#######################################
# Never cache the client-side .social.json calls
/0001 { /type "deny" /url "*.social.json*" }
# Never cache the user-specific .json requests
/0002 { /type "deny" /url "/libs/granite/csrf/token.json*" }
/0003 { /type "deny" /url "/libs/granite/security/currentuser.json*" }
/0004 { /type "deny" /url "/libs/granite/security/userinfo.json*" }
# Never cache the private community groups pages in case - add your own deny rules in there
/0005 { /type "deny" /url "/content/*/groups/*" }
# Never cache the assignments page in case the enablement feature is in use - add your own deny rules in there
/0006 { /type "deny" /url "/content/*/assignments/*" }
#######################################
## END: AEM COMMUNITITES ADDITIONS
#######################################
}
# The invalidate section defines the pages that are "invalidated" after
# any activation. The activated page itself and all
# related documents are flushed on an modification. For example: if the
# page /foo/bar is activated, all /foo/bar.* files are removed from the
# cache.
/invalidate
{
/0000
{
/url "*"
/type "deny"
}
/0001
{
# Consider all HTML files stale after an activation.
/url "*.html"
/type "allow"
}
/0002
{
/url "/etc/segmentation.segment.js"
/type "allow"
}
/0003
{
/url "*/analytics.sitecatalyst.js"
/type "allow"
}
}
# The allowedClients section restricts the client IP addresses that are
# allowed to issue activation requests.
/allowedClients
{
# Uncomment the following to restrict activation requests to originate
# from "localhost" only.
#
#/0000
# {
# /url "*"
# /type "deny"
# }
#/0001
# {
# /url "127.0.0.1"
# /type "allow"
# }
}
# The ignoreUrlParams section contains query string parameter names that
# should be ignored when determining whether some request's output can be
# cached or delivered from cache.
#
# In this example configuration, the "q" parameter will be ignored.
#/ignoreUrlParams
# {
# /0001 { /url "*" /type "deny" }
# /0002 { /url "q" /type "allow" }
# }
/enableTTL "1"
}
# The statistics sections dictates how the load should be balanced among the
# renders according to the media-type.
/statistics
{
/categories
{
/html
{
/url "*.html"
}
/others
{
/url "*"
}
}
}
}
}