Diazo est
- un serveur proxy qui applique un XSLT à un site pour refaire le thème
- un ensemble d’outils pour produire le XSLT depuis des templates (X)HTML et des règles
Le diagramme ci-dessous montre le concept de Diazo
Il s’avère que pour ce faire, il convient d’avoir un interpreteur XSLT permissif pour ce faire. J’écris « permissif » car HTML source n’est pas toujours XML valide. Les options sont décrit sur le site: Apache, Varnish (c’est quoi?), Nginx, WSGI, Plone. Pour faire fonctionner Diazo en Nginx avec HTML possiblement non-valide, il faut malheuresement appliquer un patch. Je décris dans cette article comment j’ai appliqué un patch et ai compilé à la main les dernières source Nginx stables.
Il y a aussi un multi-language switcher qui détecte le langage du navigateur et permets de rediriger en fonction. Je me suis permis de rediriger vers l’anglais ou le français (éventuellement le chinois).
Le patch
Il convient d’augmenter le module natif xslt-html-parser avec le http_xslt_parser module, ce qui permet l’application des transformations xslt sur html au lieu de xhtml.
- Télé-décharger le code source de Nginx disponible ici http://nginx.org/en/download.html. J’ai pris http://nginx.org/download/nginx-1.6.1.zip. Décompresser dans le dossier de compillation (dans le serveur Linux pour moi)
- Télécharger le patch disponible ici : $ wget https://github.com/jcu-eresearch/nginx-custom-build/blob/master/nginx-xslt-html-parser.patch et le mettre dans le dossier de compillation (au même niveau que ./src). [Je viensd’être informé que le patch actuel se trouve ici : https://bitbucket.org/lrowe/nginx-xslt-html-parser]
- Appliquer le patch comme suite $ patch src/http/modules/ngx_http_xslt_filter_module.c nginx-xslt-html-parser.patch
Si vous voulez compiler maintenant, il s’agirait de la commande ./configure –with-http_xslt_module
Le module Nginx accept language
Ensuite il s’agit du module accept language de Nginx
- Télécharge le module ici : https://github.com/giom/nginx_accept_language_module depuis ce lien :https://github.com/giom/nginx_accept_language_module/archive/master.zip
- Décompresser dans un dossier tel que /home/[username]/hacks/nginx_accept_language_module-master
La compilation
Pour compiler Nginx pour Diazo et le bascule de langage:
- Se mettre dans le dossier source et executer la ligne de ./configure (remplacer le chemins avec les chemins sur votre système) ./configure –with-http_xslt_module –with-http_stub_status_module –add-module=/home/[username[/hacks/nginx_accept_language_module-master –with-ipv6 –with-http_ssl_module –with-cc-opt=-Wno-error –prefix=/home/[username]/opt/nginxslt
- make
- make install
Configuration de Nginx with Diazo et Multi-language
Voici brutalement des extraits de mon /home/[username]/nginxslt/conf/nginx.conf. Global variables
# in http { context
# Augmented head size allocations
proxy_headers_hash_bucket_size 128;
proxy_headers_hash_max_size 1024;
# Set up a map for available languages for the websites
map $http_accept_language $lang {
default en;
~fr fr;
}
The main server was just putting a theme around XHTML content in a folder.
# in http { context
server {
listen 30742;
server_name example.com www.example.com;
server_name_in_redirect on; # Not sure if this part is necessary
location / {
xslt_stylesheet /home/username/webapps/diazoman/theme.xsl
path='$uri'
;
xslt_html_parser on;
xslt_types text/html;
# rewrite / $1/$lang;
rewrite ^/?$ $scheme://$host/$lang/;
#rewrite ^/raw(.*)$ $1;
root /home/username/webapps/diazoman/html;
index index.html index.htm;
}
location /blog {
xslt_stylesheet /home/username/webapps/diazoman/theme.xsl
path='$uri'
;
xslt_html_parser on;
xslt_types text/html;
proxy_headers_hash_max_size 51200;
proxy_pass http://wordpress.example.com/;
proxy_set_header Host wordpress.example.com;
#rewrite ^/blog/(.*)+$ /blog/index.php?$1;
rewrite ^/blog/(.*)$ /$1 break;
#proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Diazo "true";
proxy_set_header Accept-Encoding "";
}
I had some fun theming a friend’s server in Chinese.
# In http context
server {
listen 30742;
server_name joomla.example.com;
root /home/username/webapps/diazoman/html;
location / {
# rewrite /example/example /example;
xslt_stylesheet /home/username/webapps/diazoman/theme.xsl
path='$uri'
;
xslt_html_parser on;
xslt_types text/html;
proxy_pass http://landdu.com/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Diazo "true";
proxy_set_header Accept-Encoding "";
}
location /css/ {}
location /favicon.ico {}
location /images/images/ {}
}
Démarrage et arrêt de Nginx
Démarrage: /home/username/opt/nginxslt/sbin/nginx Arrêt: kill cat /home/username/opt/nginxslt/logs/nginx.pid
Création d’executable start script dans/home/username/opt/nginxslt/bin/start Création d’executable stop script dans/home/username/opt/nginxslt/bin/stop Edition de crontab avec $ crontab -e avec l’ajout de cette ligne. /5 * * * $HOME/opt/nginxslt/bin/start