Nginx + Prestashop

0 Flares 0 Flares ×

Suite à des tests sur nginx et prestashop et quelques problèmes concernant la réécriture d’url et des problèmes de connexion à l’administration, je vous livre mon fichier de configuration nginx pour mon site prestashop.

Encore une fois, cette article sera lacunaire %) , mais présentera les grandes lignes.

server {
listen *:80;
server_name www.mon-site.com;
root /var/www/mon-site;
error_log /var/log/www/mon-site.log warn;

# Prestashop
rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
rewrite ^/([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/[_a-zA-Z0-9-]*\.jpg$ /img/p/$1-$2$3.jpg last;
rewrite ^/([0-9]+)\-([0-9]+)/[_a-zA-Z0-9-]*\.jpg$ /img/p/$1-$2.jpg last;
rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?/[_a-zA-Z0-9-]*\.jpg$ /img/p/$1/$1$2.jpg last;
rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/[_a-zA-Z0-9-]*\.jpg$ /img/p/$1/$2/$1$2$3.jpg last;
rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/[_a-zA-Z0-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-]*)?/[_a-zA-Z0-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-]*)?/[_a-zA-Z0-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-]*)?/[_a-zA-Z0-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-]*)?/[_a-zA-Z0-9-]*\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/[_a-zA-Z0-9-]*\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last;
rewrite ^/c/([0-9]+)(\-[_a-zA-Z0-9-]*)/[_a-zA-Z0-9-]*\.jpg$ /img/c/$1$2.jpg last;
rewrite ^/c/([a-zA-Z-]+)/[a-zA-Z0-9-]+\.jpg$ /img/c/$1.jpg last;
rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$1$3 last;
rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$1$3 last;
rewrite ^/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 last;
rewrite ^/([0-9]+)__([a-zA-Z0-9-]*)(.*)$ /supplier.php?id_supplier=$1$3 last;
rewrite ^/([0-9]+)_([a-zA-Z0-9-]*)(.*)$ /manufacturer.php?id_manufacturer=$1$3 last;
rewrite ^/content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /cms.php?id_cms=$1$3 last;
rewrite ^/content/category/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /cms.php?id_cms_category=$1$3 last;
rewrite ^/([0-9]+)(\-[_a-zA-Z0-9-]*)/[_a-zA-Z0-9-]*\.jpg$ /img/c/$1$2.jpg last;
rewrite ^/page-non-trouvee(.*)$ /404.php$1 last;
rewrite ^/adresse(.*)$ /address.php$1 last;
rewrite ^/adresses(.*)$ /addresses.php$1 last;
rewrite ^/authentification(.*)$ /authentication.php$1 last;
rewrite ^/meilleures-ventes(.*)$ /best-sales.php$1 last;
rewrite ^/panier(.*)$ /cart.php$1 last;
rewrite ^/contactez-nous(.*)$ /contact-form.php$1 last;
rewrite ^/bons-de-reduction(.*)$ /discount.php$1 last;
rewrite ^/suivi-commande-invite(.*)$ /guest-tracking.php$1 last;
rewrite ^/historique-des-commandes(.*)$ /history.php$1 last;
rewrite ^/identite(.*)$ /identity.php$1 last;
rewrite ^/marques(.*)$ /manufacturer.php$1 last;
rewrite ^/mon-compte(.*)$ /my-account.php$1 last;
rewrite ^/nouveaux-produits(.*)$ /new-products.php$1 last;
rewrite ^/commande(.*)$ /order.php$1 last;
rewrite ^/details-de-la-commande(.*)$ /order-follow.php$1 last;
rewrite ^/commande-rapide(.*)$ /order-opc.php$1 last;
rewrite ^/avoirs(.*)$ /order-slip.php$1 last;
rewrite ^/mot-de-passe-oublie(.*)$ /password.php$1 last;
rewrite ^/promotions(.*)$ /prices-drop.php$1 last;
rewrite ^/recherche(.*)$ /search.php$1 last;
rewrite ^/plan-du-site(.*)$ /sitemap.php$1 last;
rewrite ^/magasins(.*)$ /stores.php$1 last;
rewrite ^/fournisseurs(.*)$ /supplier.php$1 last;

# Static
location / {
root /var/www/mon-site;
index index.php index.html index.htm;

# this serves static files that exist without running other rewrite tests
if (-f $request_filename) {
expires 30d;
break;
}

# Rewrite rules
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?q=$1 last;
}
}

# Admin zone no PATH_INFO
location ~ /admin20/.*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#fastcgi_param PATH_INFO $fastcgi_script_name;
}

# PHP scripts -> PHP-FPM server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
}

# Security (hidden files)
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}

# Stuffs
location = /robots.txt { access_log off; log_not_found off; expires 30d; }
location = /favicon.ico { access_log off; log_not_found off; expires 30d; }

# static files
location ~* ^.+\.(jpg|jpeg|gif|css|png|js|pdf)$ {
expires 30d;
access_log off;
log_not_found off;
}
}

à noter :

  • l’administration se trouve dans le dossier /admin20/
  • les rewrite sont à adaptés suivant votre configuration (dans Préférences – SEO & URLs)
  • les versions utilisées : Prestashop 1.4.4.1, Debian Squeeze, nginx/1.0.5, PHP: 5.3.8-1~dotdeb.2, MySQL: 5.1.58-1~dotdeb.1
  • la configuration n’est pas optimisée

Par défaut sur la version de nginx sur Debain Squeeze est la version 0.7.67. Pour une version plus récente je vous recommande l’excellent blog de nicolargo et cet article en particulier : installation de nginx sous Debian

0 Flares Twitter 0 Facebook 0 Google+ 0 Buffer 0 0 Flares ×

« »

5 commentaires sur “Nginx + Prestashop

  1. Bibichette Auteur

    Non avec un serveur web Nginx il n’y a pas de fichier htaccess. D’ailleurs avec un serveur Apache, il est préférable de ne pas l’utiliser et lui préférer une configuration dans les fichiers de config d’apache. Donc pour répondre, c’est à coller dans la configuration du serveur Nginx /etc/nginx/…

  2. Nek

    Hello ! Merci ça m’a bien servit :) . J’ajoute ma petite correction:

    - Les lignes « fastcgi_pass » ne fonctionne plus comme cela maintenant (socket dans un dossier, cf doc de nginx sur php-fpm)
    - Les « rewrite » iront mieux dans la condition prévue à cet effet ;-) . À savoir: « if (!-e $request_filename) { »

    Bonne journée :-) .