सिलियस के लिए नेगनेक्स कॉन्फ़िगरेशन

हाल ही में हमने अपने एक ई-कॉमर्स प्रोजेक्ट के लिए तेजी से लोकप्रिय सिलिअस प्लेटफॉर्म का उपयोग करना शुरू किया। सिलियस, सिम्फनी 2 पर आधारित है, प्रमुख PHP फ्रेमवर्क, जो हमने अपनी फोटोग्राफी वेबसाइट पर काम किया है । भले ही हम छोटी परियोजनाओं के लिए WooCommerce का उपयोग करते हैं, Sylius एक अधिक आधुनिक और शक्तिशाली समाधान प्रदान करता है जो हमें लगता है कि निश्चित रूप से अधिक महत्वाकांक्षी ई-कॉमर्स वेबसाइटों के लिए बेहतर अनुकूल है।

एक समस्या जिसे हमने शुरू में संघर्ष किया था वह सिलिअस को हमारे नगनेक्स + पीएचपी-एफपीएम + उबंटू 14.04 सर्वर पर ठीक से काम करने के लिए मिल रही थी। हमने एकमानक Symfony2 कॉन्फ़िगरेशन फ़ाइल प्लस कुछ अनुकूलन के साथ शुरू किया, लेकिन काम करने के लिए कोई उत्पाद थंबनेल नहीं मिल सका। यह बताता है कि LiipImagineBundle का उपयोग ऑन-द-फ्लाई थंबनेल बनाने के लिए किया जाता है, और यह हमारे कैश एक्सपायरी रूल-सेट के साथ हस्तक्षेप कर रहा था, जिसके परिणामस्वरूप किसी भी छवि थंबनेल के लिए 404s थे जो हमने प्रदर्शित करने की कोशिश की थी।

यहाँ हम गलत तरीके से स्थैतिक फ़ाइलों के लिए भविष्य में 1 वर्ष की समाप्ति तिथि निर्धारित करने के लिए उपयोग कर रहे हैं:

location ~ \.(js|css|png|jpeg|jpg|gif|ico|swf|flv|pdf|zip)$ { # Set expiry date to 1 year in the future. expires 365d ; }
कोड भाषा: Nginx ( nginx )

हालांकि यह आम तौर पर एक समस्या के बिना काम करता है, इसका मतलब यह भी है कि उन एक्सटेंशन में से किसी के साथ समाप्त होने वाला कोई भी URL पूरी तरह से app.php फ़ाइल को बायपास कर देगा, चाहे वास्तविक छवि फ़ाइल मौजूद हो या न हो। चूँकि Sylius में थंबनेल URL अनुरोध पर ऑन-द-फ्लाई बनाया जाता है, इसलिए यह थंबनेल निर्माण को पूरी तरह से तोड़ देता है।

फिक्स बहुत सीधा है: हम केवल अनुरोधित फ़ाइलों के लिए समाप्ति तिथि निर्धारित करते हैं जो वास्तव में मौजूद हैं। अन्यथा, हम उन्हें हमेशा की तरह app.php फ़ाइल में फिर से लिखते हैं। यहाँ अंतिम Nginx कॉन्फ़िगरेशन फ़ाइल है जिसका हमने उपयोग किया है:

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; }
कोड भाषा: Nginx ( nginx )

यह बात है। थंबनेल अब ठीक से मक्खी पर उत्पन्न हो रहे हैं, जबकि मौजूदा चित्र भी उचित समाप्ति हेडर का उपयोग कर रहे हैं। हमें बताएं कि क्या यह आपके लिए काम करता है, या यदि आपने एक अलग दृष्टिकोण का उपयोग किया है। हैप्पी कोडिंग!