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

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…

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…