Son zamanlarda e-ticaret projelerimizden biri için giderek daha popüler hale gelen Sylius platformunu kullanmaya başladık. Sylius, fotoğrafçılık web sitemizde birlikte çalıştığımız lider PHP çerçevesi olan Symfony2'yi temel almaktadır. Daha küçük projeler için WooCommerce kullanmamıza rağmen, Sylius daha iddialı e-ticaret web siteleri için kesinlikle daha uygun olduğuna inandığımız daha modern ve güçlü bir çözüm sunuyor.
Başlangıçta uğraştığımız bir sorun, Sylius'un Nginx + PHP-FPM + Ubuntu 14.04 web sunucumuzda düzgün çalışmasını sağlamaktı.Standart bir Symfony2 konfigürasyon dosyası ve bazı optimizasyonlarla başladık, ancak herhangi bir ürün küçük resmini elde edemedik. LiipImagineBundle'ın anında küçük resimler oluşturmak için kullanıldığı ortaya çıktı ve bu, önbellek süre sonu kural kümemize müdahale ediyordu ve görüntülemeye çalıştığımız tüm küçük resimler için 404'lerle sonuçlanıyordu.
Statik dosyalar için ileride 1 yıllık bir son kullanma tarihi belirlemek için hatalı olarak kullandığımız şey:
location ~ \.(js|css|png|jpeg|jpg|gif|ico|swf|flv|pdf|zip)$ { # Set expiry date to 1 year in the future. expires 365d ; }
Kod dili: Nginx ( nginx )
Bu normalde sorunsuz çalışsa da, bu uzantılardan biriyle biten herhangi bir URL'nin gerçek görüntü dosyası var olsun ya da olmasın app.php dosyasını tamamen atlayacağı anlamına da gelir. Sylius'taki küçük resimler, bir URL isteği üzerine anında oluşturulduğundan, bu, küçük resim oluşturmayı tamamen bozar.
Düzeltme çok basit: Yalnızca gerçekten var olan talep edilen dosyalar için son kullanma tarihini belirliyoruz. Aksi takdirde, bunları her zamanki gibi app.php dosyasına yeniden yazarız. İşte kullandığımız son Nginx yapılandırma dosyası:
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; }
Kod dili: Nginx ( nginx )
Bu kadar. Mevcut görüntüler de uygun son kullanma başlıklarını kullanırken, küçük resimler artık düzgün bir şekilde anında oluşturuluyor. Bunun sizin için işe yarayıp yaramadığını veya farklı bir yaklaşım kullandıysanız bize bildirin. Mutlu kodlamalar!