Passa ai contenuti principali

NGINX & Prestashop

NGINX lo ritengo un web server eccezionale: veloce e leggero. Ma soprattutto facile da configurare.
o appena implementato implementato da un cliente per il suo shop Pretsashop, riscontrando naturalmente qualche problema

Friendly URLs

questa parte è stata la più facile. Basta seguire la guida ufficiale http://doc.prestashop.com/display/PS16/System+Administrator+Guide#SystemAdministratorGuide-NginxfriendlyURLs

        location  / {

          index /index.php;

          rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;

          #rewrite per immagini
          rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2.jpg last;
          rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3.jpg last;
          rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4.jpg last;
          rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last;
          rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last;
          rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last;
          rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$$
          rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$$
          rewrite ^/c/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
          rewrite ^/c/([a-zA-Z-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1.jpg last;
          rewrite ^/([0-9]+)(-[_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;

          try_files $uri $uri/ /index.php?$args;

          error_page 404 /index.php?controller=404;
        }

Cacing immagini del template

analizzando delle pagine a campione tramite Google Page Speed ho scoperto che non tutte le immagini erano messe in cache.
così per fare prima ho impostato delle location fisse

ad esempio:
 location /js/jquery/plugins/bxslider/images/bx_loader.gif {
                expires 2592000s;
        }

Multi lingua

un problema grosso è stato dato dalla multilingua
alcuni link invece di essere riscritti presentavano la forma <dominio>/it/index.php?...
seguendo i forum o scoperto che c'era da aggiungere un rewrite 
rewrite ^/[a-z][a-z]/index.php(.*)$ /index.php$1 last;  (*)
ma non ha funzionato.
quindi dopo alcune prove mi sono accorto che i friendly url nel BO di prestashop non erano impostati.
dopo aver impostato i friendly url, corretto la maggior parte degli errori
tranne uno in fase di checkout

checkout e frienly url

in fase di checkout, al momento del login, l'utente deve effettuare il login
peccato che nginx mi sputava sempre un 404: invece di andare sulla friendly url precedentemente impostata, riceveva questa url: 
<dominio>/it/index.php?controller=....&back=http.....
in pratica il sistema effettua il login e poi redireziona l'utente alla pagina impostata come default dopo il login
a parte che è una cavolata di prestashop in quanto se sono al checkout mi attendo che mi rimandi alla pagina del checkout che stavo completando
comunque....
l'url non veniva effettivamente riconosciuta correttamente a causa della lingua "/it/" e il rewrite precedente (*) non funzionava nella location del rewrite delle immagini
leggendo attentamente il log dopo un po' ho capito che nginx non effettuava nessun rewrite e cercava una sotto cartella "it"
ergo la soluzione è stata semplice: fastcgi
in pratica il rewrite era da aggiungere alla location che si collega al fastcgi:
 
 location ~ \.php {
            try_files $uri =404;
            include /etc/nginx/fastcgi_params;
            fastcgi_pass unix:/var/lib/php5-fpm/web1.sock;
            fastcgi_index index.php;
            #rewrite di controller
            rewrite ^/[a-z][a-z]/index.php(.*)$ /index.php$1 last;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_intercept_errors on;
        }
voilà, completata tutta la configurazione di nginx per prestashop




Post popolari in questo blog

install language on osTicket

this simple guide aims you to install and configure your language on osTicket i written this guide based on forum post http://osticket.com/forum/discussion/76252/installing-language-pack

Trasferimento server to server (LINUX) della casella email

Oggi ho scoperto un tool veramente molto utile per il trasferimento server to servevr delle caselle email. Ed è acnhe veloce.
Si chiama imapsync [rif: https://imapsync.lamiral.info/ ]In pratica il tool da linea di comando si connette via imap al server email precedente e trasporta tutto al server di destinazioneLo uso quando faccio migrazioni di vps.Come funziona imapsync per sincronizzare e emailInternet è una risorsa. Da questo blog ho preso tutte le indicazioni https://www.jverdeyen.be/ubuntu/imapsync-on-ubuntu/Uso una distribuzione ubuntu 14.04. Non esiste un pacchetto precompilato da installare. imapsync si basa su perl. Ve lo ricordate? Mica è andato in disuso.Primo: si installano le dipendenze di imapsync per la migrazione mail server to serversudo apt-get install makepasswd rcs perl-doc libio-tee-perl git libmail-imapclient-perl libdigest-md5-file-perl libterm-readkey-perl libfile-copy-recursive-perl build-essential make automake libunicode-string-perl Secondo: si scarica i…

Creare un ambiente di sviluppo PHP SYMFONY MYSQL DOCKER

Preferisco Docker a Vagrant, più leggero. Ognuno naturalmente ha le sue preferenze.
Docker lo trovo più facile e veloce da configurare.
Non conosci Docker, vai sul sito e scoprirai un tool fantastico per "virtualizzare" le macchine, anche se non è il termine corretto.
Docker crea un contenitore all'interno del tu S.O. senza però virtualizzare l'infrastruttura hardware.
A me piace sviluppare con Symfony: W Symfony2!

[update: ho trovato questa serie di post nuovi per lo sviluppo con symfony su docker
https://blog.vandenbrand.org/2016/02/03/developing-symfony-applications-with-docker-series-part-i-getting-started/
]