# RETIRER TOUS LES COMMENTAIRES, ET NE LAISSER QUE CE QUI EST UTILE ### Pour désactiver la réutilisation des connections http avec le navigateur #KeepAlive Off ### Pour désactiver la réutilisation des connections http avec le serveur mandaté #SetEnv proxy-nokeepalive 1 ### Réécriture des URLS #RewriteEngine On #RewriteRule ^/$ /moncontexte/index.php [L,R] ### Si l'application utilise des frames, autorise l'ouverture des frames de l'application par elle même #Header set X-Frame-Options SAMEORIGIN ### pour autoriser que les pages du site soient imbriquées dans un frame d'un autre site # pour les navigateurs qui ne supportent pas CSP #Header append X-Frame-Options "ALLOW-FROM https://url-du-site-parent" # pour les navigateurs qui supportent CSP #Header set Content-Security-Policy "frame-ancestors 'self' https://url-du-site-parent;" ### Utile si l'application est mal foutue et ne positionne pas correctement ses types MIME #Header unset X-Content-Type-Options # Si l'application fournit des urls référencées dans des pages d'une autre application, # et a besoin de ses propres cookies, force attribut SameSite=None pour tous ses cookies # Header edit Set-Cookie ^(.*)$ $1;SameSite=None;Secure ### exemple pour fichier de log spécifique pour certains motifs d'url #SetEnvIf Request_URI ^/motifatrouver(/|$) monenv #ErrorLog ${APACHE_LOG_DIR}/$vhostFQDN-monenv-error.log env=monenv #CustomLog ${APACHE_LOG_DIR}/$vhostFQDN-monenv-access.log combined env=monenv ### Debug des flux # En cas de besoin de debug des flux chiffres, permet d'enregistrer les IO dans le error.log # à combiner avec dumpio:trace7 dans loglevel ; attention à la quantité de logs, ne pas laisser actif au dela du debug #DumpIOInput On #DumpIOOutput On ### En cas de serveur mandaté en https, désactive les contrôles SSL du serveur mandaté si ce dernier utilise un certificat autosigné #SSLProxyVerify none #SSLProxyCheckPeerCN off #SSLProxyCheckPeerName off #SSLProxyCheckPeerExpire off ### Augmente les timeouts si le serveur mandaté a besoin de beaucoup de temps pour répondre #Timeout 600 ### Exemple de configuration de load balancer ; remplacer FQDN par le FQDN du virtualhost, et utiliser ça comme nom de balancer dans la macro de configuration ## stickysession: le nom du cookie utilisé pour stocker la route vers le backend ## retry : délai pendant lequel un serveur backend ne sera pas retenté s'il est considéré en défaut ## connectiontimeout : délai accordé pour créer la connexion vers le serveur backend avant de le considérer en défaut ## lbmethod : méthode d'équilibrage entre les balancermembers ## failonstatus : les codes d'erreur http qui peuvent être retournés par le backend et qu'on va considérer comme un défaut du backend #Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED # # BalancerMember "http://fqdn1" route=1 retry=10 connectiontimeout=5 # BalancerMember "http://fqdn2" route=2 retry=10 connectiontimeout=5 # ProxySet lbmethod=byrequests failonstatus=500,503 stickysession=ROUTEID # ### Pour utiliser des accesspolicy différentes par portion d'URL # # Use InternalAccessPolicy # ### Pour donner accès à des utilisateurs en plus de ceux acceptés par la policy # # Use LDAPUserAccessPolicy # Require ldap-user login1 # Require ldap-user login2 # Require ldap-attribute "memberof=cn=xxxxx" # ### Pour ne pas propager l'authentification vers le serveur mandaté # RequestHeader unset Authorization ### Si une API du site mandaté utilise des codes d'erreur HTTP pour communiquer une information fonctionnelle à son client (beurk) # # ProxyErrorOverride off # ### Si l'application utilise des URLs avec des slashes encodés #AllowEncodedSlashes On ### Pour utiliser les websockets. Principe général : il faut détecter la nécessité d'activer les websockets. ## Soit parce que le client a déjà inséré dans ses entêtes des attributs en rapport : #RewriteEngine On #RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR] #RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC] #RewriteRule .* ws://%{SERVER_NAME}%{REQUEST_URI} [P,QSA,L] ## Soit parce que l'url demandée est d'une forme qui permet de détecter que le client s'adresse à une partie serveur développée avec des websockets # # ProxyPass ws://${URL_DEST}/websockify # ProxyPassReverse ws://${VHOST_FQDN}/websockify #