Drupal Nginx Json
Po, 22.2.2016 - 10:57
### Situácia Na clientovi mám jQUery, ktoré každú minútu kontroluje, či sa nezmenili dáta. Tie vracia Drupal v podobe jsonu modulom views_datasource. ### Problém Keď pre ajax request vypnem cache, tak ku každému volaniu pridá timestamp, napr. `_=1456134256000`, a keďže je to get parameter, views v Drupale sa pregenerujú a nevrátia nacacheované dáta. Keď je ajax cache zapnutá, tak sa url nemení a tým pádom browser vráti jeho dáta bez toho, aby zavolal server. čo potrebujem je obísť cache browseru, ale na strane serveru dostať dáta z cache. ### Riešenie s nginx Podarilo sa mi docieliť to, že nginx odstráni argument `_` z requestu a zavolá Drupal bez neho. Týmto spôsobom obídem cache browseru, ale zároveň dostanem nacacheované dáta z Drupalu. V kombinácii s týmto používam views_content_cache, takže sa cache premaže len pri vytvorení nového obsahu. V konfigurácii nginxu som spavil 2 úpravy. 1. odstrániť _ argument z $args ```nginx location ~ ^/path/ { if ($args ~ (.*)&_=\d+(.*)) { set $args $1$2; } rewrite ^/([^/]*)/(.*)(/?)$ /$1/index.php?q=$2; } ``` 2. odstrániť _ argument z cesty, s ktorou sa volá fastcgi ```nginx # save $request_uri set $request_url $request_uri; # modify request uri, remove '_' arg if ($request_uri ~ ^/path/(.*)&_=\d+(.*)) { set $request_url /path/$1$2; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; # rewrite request uri by request url fastcgi_param REQUEST_URI $request_url; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; fastcgi_read_timeout 1800; } ``` Pozn.: Lepšie riešenie na aktulizáciu dát na strane klienta by bolo použitie nodejs a socket.io.