Seit kurzem nutzen wir die immer beliebter werdende Sylius-Plattform für eines unserer E-Commerce-Projekte. Sylius basiert auf Symfony2, dem führenden PHP-Framework, mit dem wir auf unserer Fotografie-Website gearbeitet haben . Obwohl wir WooCommerce für kleinere Projekte verwenden, bietet Sylius eine modernere und leistungsfähigere Lösung, die unserer Meinung nach definitiv besser für ehrgeizigere E-Commerce-Websites geeignet ist.
Ein Problem, mit dem wir anfangs zu kämpfen hatten, war, dass Sylius auf unserem Nginx + PHP-FPM + Ubuntu 14.04-Webserver ordnungsgemäß funktioniert. Wir haben mit einerStandard-Symfony2-Konfigurationsdatei und einigen Optimierungen begonnen, konnten jedoch keine Produkt-Miniaturansichten zum Laufen bringen. Es stellt sich heraus, dass LiipImagineBundle verwendet wird, um Miniaturansichten im laufenden Betrieb zu generieren. Dies hat unseren Regelsatz für das Ablaufen des Caches beeinträchtigt und zu 404 Sekunden für alle Bildminiaturen geführt, die wir anzeigen wollten.
Folgendes haben wir fälschlicherweise verwendet, um ein Ablaufdatum von 1 Jahr in der Zukunft für statische Dateien festzulegen:
location ~ \.(js|css|png|jpeg|jpg|gif|ico|swf|flv|pdf|zip)$ { # Set expiry date to 1 year in the future. expires 365d ; }
Code Sprache: Nginx (nginx)
Während dies normalerweise problemlos funktioniert, bedeutet dies auch, dass jede URL, die mit einer dieser Erweiterungen endet, die Datei app.php vollständig umgeht, unabhängig davon, ob die eigentliche Bilddatei vorhanden ist oder nicht. Da Miniaturansichten in Sylius auf URL-Anforderung im laufenden Betrieb erstellt werden, wird die Erstellung von Miniaturansichten dadurch vollständig unterbrochen.
Das Update ist sehr einfach: Wir legen nur das Ablaufdatum für angeforderte Dateien fest, die tatsächlich vorhanden sind. Andernfalls schreiben wir sie wie gewohnt in die Datei app.php um. Hier ist die endgültige Nginx-Konfigurationsdatei, die wir verwendet haben:
server { server_name example.com; root /var/www/example.com/web;
location / { try_files $uri @rewriteapp ; # Redirect to app.php if the requested file does not exist. }
# Development rule-set. # This rule should only be placed on your development environment. # In production, don't include this and don't deploy app_dev.php or config.php. location ~ ^/(app_dev|config)\.php(/|$) { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/.*)$ ; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ; fastcgi_param HTTPS off ; }
# Production rule-set. location ~ ^/app\.php(/|$) { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/.*)$ ; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ; fastcgi_param HTTPS off ;
# Prevents URIs that include the front controller. This will 404: # http://domain.tld/app.php/some-path # Remove the internal directive to allow URIs like this. internal; }
# Static files rule-set. location ~ \.(js|css|png|jpeg|jpg|gif|ico|swf|flv|pdf|zip)$ { # Set rules only if the file actually exists. if (-f $request_filename ) { # Set expiry date to 1 year in the future. expires 365d ;
# Further optimize by not logging access to these files. access_log off ; }
# Rewrite to app.php if the requested file does not exist. try_files $uri @rewriteapp ; }
# Rewrite rule for PHP files. location @rewriteapp { rewrite ^(.*)$ /app.php/ $1 last ; }
error_log /var/log/nginx/example.com_error.log; access_log /var/log/nginx/example.com_access.log; }
Code Sprache: Nginx (nginx)
Das ist es. Die Miniaturansichten werden jetzt ordnungsgemäß im laufenden Betrieb generiert, während die vorhandenen Bilder auch die richtigen Ablaufüberschriften verwenden. Lassen Sie uns wissen, ob dies für Sie funktioniert hat oder ob Sie einen anderen Ansatz gewählt haben. Viel Spaß beim Codieren!