عملکرد یک وبسایت تا حدی وابسته به اندازهی فایلهایی است که مرورگر کاربر باید دانلود کند. کاهش حجم فایلهای ارسالی میتواند وبسایت شما را سریعتر کند. همچنین برای کاربرانی که هزینه مصرف پهنای باند دارند، ارزانتر خواهد شد.
gzip یک برنامه محبوب برای فشردهسازی داده است. شما میتوانید پارمین کلود را طوری پیکربندی کنید تا با استفاده از gzip فایلهایی را که سرو میکند، به صورت آنی فشردهسازی کند. این فایلها توسط مرورگرهایی که از gzip پشتیبانی میکنند، هنگام دریافت بدون هیچ افت کیفیتی باز میشوند؛ با این مزیت که حجم داده منتقلشده بین سرور و مرورگر کمتر است.
خبر خوب این است که پشتیبانی از فشردهسازی gzip در همه مرورگرهای اصلی وجود دارد و هیچ دلیلی برای عدم استفاده از آن نیست.
به دلیل نحوه فشردهسازی و عملکرد gzip، برخی فایلها بهتر فشرده میشوند. به طور مثال، فایلهای متنی به خوبی فشرده میشوند و معمولاً بیش از دو برابر کوچکتر میشوند. در مقابل، تصاویری مانند JPEG یا PNG ذاتاً قبلاً فشرده شدهاند و فشردهسازی مجدد آنها با gzip نتیجه خاصی ندارد. فشردهسازی فایلها منابع سرور را مصرف میکند، پس بهتر است فقط فایلهایی که از کاهش حجم بهرهمند میشوند را فشرده کنید.
در این آموزش شما Nginx را طوری پیکربندی میکنید تا از gzip برای فشردهسازی استفاده شود. این کار اندازه محتوا ارسالشده به بازدیدکنندگان سایت را کاهش داده و عملکرد را بهبود میبخشد.
پیشنیازها:
- یک سرور Ubuntu 20.04 با یک کاربر عادی (غیر روت) با دسترسی sudo.
- نصب Nginx روی سرور خود طبق آموزش نصب Nginx بر روی Ubuntu 20.04 در پارمین کلود.
ایجاد فایلهای تست در مسیر پیشفرض Nginx
در این مرحله چند فایل تست در مسیر پیشفرض Nginx ایجاد میکنیم تا رفتار پیشفرض Nginx برای فشردهسازی gzip را بررسی کنیم.
Nginx نوع فایل را از محتویات آن تشخیص نمیدهد، بلکه بر اساس پسوند فایل MIME type را مشخص میکند.
بنابراین محتویات فایلهای تست مهم نیست، کافیست نام صحیحی برای هرکدام در نظر بگیریم تا Nginx فرض کند مثلاً یک فایل خالی تصویر است و دیگری استایلشیت.
یک فایل به نام test.html در مسیر پیشفرض Nginx با دستور truncate ایجاد میکنیم (پسوند .html بیانگر صفحه HTML است):
truncate -s 1000 /var/www/html/test.html
به همین روش چند فایل دیگر شامل یک تصویر jpg، یک استایلشیت css و یک فایل js ایجاد میکنیم:
truncate -s 1000 /var/www/html/test.jpg truncate -s 1000 /var/www/html/test.css truncate -s 1000 /var/www/html/test.js
بررسی رفتار اولیه Nginx نسبت به فشردهسازی gzip
ابتدا بررسی میکنیم که آیا فایل HTML test.html با فشردهسازی ارسال میشود یا خیر. با دستور زیر درخواست خود را به سرور ارسال و هدر Accept-Encoding: gzip را اضافه میکنیم:
curl -H "Accept-Encoding: gzip" -I http://your_domain_or_IP/test.html
در پاسخ، هدری مانند زیر را مشاهده خواهید کرد:
Content-Encoding: gzip
این به این معناست که فشردهسازی gzip برای این فایل فعال شده است. بهطور پیشفرض در Ubuntu 20.04 فشردهسازی gzip برای فایلهای HTML فعال است.
اما بهصورت پیشفرض فقط HTML فشرده میشود و سایر فایلها بدون فشردهسازی سرو میشوند. برای اطمینان، تصویر test.jpg را درخواست میدهیم:
curl -H "Accept-Encoding: gzip" -I http://your_domain_or_IP/test.jpg
در خروجی هدر Content-Encoding: gzip وجود ندارد، یعنی این فایل بدون فشردهسازی ارسال شده است.
این آزمایش را با فایل css نیز انجام میدهیم:
curl -H "Accept-Encoding: gzip" -I http://your_domain_or_IP/test.css
باز هم خبری از فشردهسازی نیست.
پیکربندی Nginx برای فشردهسازی انواع فایلهای متنی با gzip
برای اعمال تغییرات، فایل پیکربندی اصلی Nginx را با nano یا ویرایشگر دلخواه باز کنید:
sudo nano /etc/nginx/nginx.conf
بخش تنظیمات gzip را پیدا کنید که معمولاً شبیه زیر است:
gzip on; #gzip_buffers 16 8k; #gzip_comp_level 1; #gzip_disable "msie6"; #gzip_http_version 1.1; #gzip_min_length 20; #gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
شما میبینید که gzip با دستور gzip on فعال است ولی بقیه تنظیمات کامنت شدهاند. طبق تجربه به تنظیمات زیر تغییر دهید:
gzip on;
gzip_comp_level 2;
gzip_min_length 1000;
gzip_disable "msie6";
gzip_types
text/plain
text/css
application/json
application/javascript
text/xml
application/xml
text/javascript
application/vnd.api+json;
فایل را ذخیره کنید و ببندید.
برای فعالشدن پیکربندی جدید، Nginx را ریستارت کنید:
sudo systemctl restart nginx
تست پیکربندی جدید gzip
دوباره تست html را انجام دهید؛ وضعیت مشابه قبل خواهد بود:
curl -H "Accept-Encoding: gzip" -I http://your_domain_or_IP/test.html
ولی اگر css را درخواست کنیم:
curl -H "Accept-Encoding: gzip" -I http://your_domain_or_IP/test.css
این بار هدر Content-Encoding: gzip اضافه شده است و فایل با فشردهسازی ارسال میشود.
از بین فایلهای تست، فقط تصویر test.jpg بدون فشردهسازی باقی خواهد ماند:
curl -H "Accept-Encoding: gzip" -I http://your_domain_or_IP/test.jpg
در خروجی فراخوانی بالا، نشانی از gzip نیست که انتظار هم داشتیم.
در این صورت، فشردهسازی gzip را در Nginx با موفقیت فعال کردهاید.
جمعبندی
تغییر پیکربندی Nginx برای استفاده از gzip کار سادهای است اما مزایای زیادی دارد. بازدیدکنندگانی که محدودیت پهنای باند دارند سایت شما را سریعتر دریافت میکنند و دیگران هم سرعت بیشتری را تجربه خواهند کرد. موتورهای جستجو نیز به سرعت بارگیری سایت توجه زیادی دارند و استفاده از gzip یک قدم بزرگ برای بهبود آن است.
از همراهی شما با پارمین کلود متشکریم.
نظرات کاربران