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…

Vich Uploader: due note per ricordare un apio di aspetti

la documentazione del bundle symfony vich uploader è chiara, anche se non è perfetta
quindi ecco un paio di note per non incappare in errori sciocchi che però fanno perdere tempo.
la configurazione in config.yml contiene le specifiche di come devono essere trattati i files in upload
la configurazione ha un nome e si chiama mapping. nella documentazione del bundle è product_image
nell'entity che conterrà l'immagine è necessario specificare due campi: imageFile e imageName
imageFile contiene il riferimento alla classe symfony File, che è il file effettivo in upload. Il campo è definito come UploadableField e richiede due cose: il nome del mapping, ossia il nostro precedente product_image (!importantissimo) e il nome di una proprieta dove mettere il nome del file
Il form che effettua l'upload del file deve inserire nel builder un campo di tipo vich_file o vich_image e il nome di questo campo deve essere imageFile.
in fase di caricamento il bundle crea in automatico le cartell…