سؤال

أنا في خدمة جميع المحتوى من خلال أباتشي مع Content-Encoding: zip ولكن أن يضغط على الطاير.كمية جيدة من المحتوى هو ثابت الملفات على القرص.أريد أن gzip الملفات مسبقا بدلا من ضغط لهم في كل مرة يتم طلب.

هذا هو الشيء الذي أعتقد ، mod_gzip هل في أباتشي 1.x تلقائيا ، ولكن مجرد وجود الملف .gz بجانبه.أن الأمر لم يعد كذلك مع mod_deflate.

هل كانت مفيدة؟

المحلول

هذه الوظيفة كان في غير محله في mod_gzip على أي حال.في Apache 2.x ، يمكنك أن تفعل ذلك مع المحتوى التفاوض.على وجه التحديد, تحتاج إلى تمكين MultiViews مع Options التوجيه و تحتاج إلى تحديد الترميز الخاص بك مع أنواع AddEncoding التوجيه.

نصائح أخرى

للإجابة على سؤالي مع خط بسيط كنت في عداد المفقودين في confiuration:

Options FollowSymLinks MultiViews

كنت في عداد المفقودين مولتيفيوس الخيار.انها هناك في أوبونتو ويب الافتراضي ملقم التكوين ، حتى لا تكون مثلي وتسقطها.

كما كتبت سريعة الخليع المهمة ضغط جميع الملفات.

namespace :static do
    desc "Gzip compress the static content so Apache doesn't need to do it on-the-fly."
    task :compress do
        puts "Gzipping js, html and css files."
        Dir.glob("#{RAILS_ROOT}/public/**/*.{js,html,css}") do |file|
            system "gzip -c -9 #{file} > #{file}.gz"
        end
    end
end

وأخشى مولتيفيوس لا تعمل كما هو متوقع:يقول الدكتور مولتيفيوس يعمل "إذا كان الملقم يتلقى طلب /بعض/dir/فو ، إذا /بعض/dir وقد مولتيفيوس تمكين و /بعض/dir/foo لا وجود لها...", وبعبارة أخرى:إذا كان لديك ملف foo.js و foo.js.gz في نفس الدليل, فقط تفعيل مولتيفيوس لن يسبب .gz الملف ليتم إرسالها حتى لو كان AcceptEncoding gzip رأس تنتقل عن طريق المتصفح (يمكنك التحقق من هذا السلوك عن طريق تعطيل مؤقتا mod_deflate ومراقبة الاستجابة مع مثلHTTPFox).

أنا لست متأكدا مما إذا كان هناك طريقة للتغلب على هذا مع مولتيفيوس (ربما يمكنك إعادة تسمية الملف الأصلي ثم قم بإضافة خاص AddEncoding التوجيه), ولكن أعتقد أنك يمكن بناء mod_rewrite القاعدة للتعامل مع هذا.

لدي اباتشي 2 بنيت من المصدر, و وجدت نفسي قد لتعديل التالية في بلدي httpd.conf ملف:

إضافة مولتيفيوس إلى خيارات:

Options Indexes FollowSymLinks MultiViews

Uncomment AddEncoding:

AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz

التعليق AddType:

#AddType application/x-compress .Z
#AddType application/x-gzip .gz .tgz

فمن الممكن أن تخدم ما قبل ضغط الملفات باستخدام mod_negotiation على الرغم من أنها قليلا صعب.الصعوبة الأساسية هي أن فقط طلبات الملفات التي لا توجد التفاوض.حتى إذا foo.js و foo.js.gz سواء وجود ردود /foo.js سوف تكون دائما غير مضغوط (على الرغم من الردود /foo سوف تعمل بشكل صحيح).

الحل الأسهل لقد وجدت (من فرانسوا Marier) هو إعادة تسمية ملفات مضغوطة مع ضعف امتداد الملف حتى foo.js كما تنشر foo.js.js حتى طلبات /foo.js التفاوض بين foo.js.js (أي ترميز) foo.js.gz (gzip ترميز).

أنا الجمع بين تلك الحيلة مع التكوين التالي:

Options +MultiViews
RemoveType .gz
AddEncoding gzip .gz

# Send .tar.gz without Content-Encoding: gzip
<FilesMatch ".+\.tar\.gz$">
    RemoveEncoding .gz
    # Note:  Can use application/x-gzip for backwards-compatibility
    AddType application/gzip .gz
</FilesMatch>

أنا كتب آخر الذي يناقش المنطق لهذا التكوين و بعض البدائل في التفاصيل.

mod_gzip محتوى مضغوط على الطاير كذلك.يمكنك قبل ضغط الملفات من خلال تسجيل الدخول إلى الخادم الخاص بك, و ذلك من قذيفة.

cd /var/www/.../data/
for file in *; do
    gzip -c $file > $file.gz;
done;

يمكنك استخدام mod_cache إلى وكيل المحتوى المحلي في الذاكرة أو على القرص.أنا لا أعرف إذا كان هذا سوف تعمل كما هو متوقع مع mod_deflate.

لدي الكثير من الكبيرة .ملفات json.معظم القراء في هذه الحالة.المعاينة إجابات لم تتحدث عن عاد "Content-type".

أنا كنت تريد التالية طلب العودة قبل ملف مضغوط مع "Content-Type:application/json" بشفافية استخدام Multiview مع ForceType

http://www.domain.com/(...)/bigfile.json
-> Content-Encoding:gzip, Content-Type: Content-Encoding:gzip

1) يجب أن تكون الملفات إعادة تسمية:"الملف.تحويلة.تحويلة"

2) Multiview يعمل كبيرة مع ForceType

في نظام الملفات:

// Note there is no bigfile.json
(...)/bigfile.json.gz
(...)/bigfile.json.json

في اباتشي التكوين:

<Directory (...)>
    AddEncoding gzip .gz
    Options +Multiviews
    <Files *.json.gz>
        ForceType application/json
    </Files>
</Directory>

قصيرة وبسيطة :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top