การบีบอัด Apache gzip


0

ฉันมีเซิร์ฟเวอร์ Apache 2.2.17 ที่สืบทอดมาซึ่งทำงานบน Ubuntu ที่ฉันต้องเปิดใช้งานการบีบอัด ฉันแน่ใจว่า mod ถูกโหลดแล้ว:

apachectl -t -D DUMP_MODULES
Loaded Modules:
...
deflate_module (shared)
headers_module (shared)
setenvif_module (shared)
...

ฉันได้ตั้งค่าแล้วhttp.confด้วยกฎต่อไปนี้:

<IfModule deflate_module>
    SetOutputFilter DEFLATE

        <IfModule setenvif_module>
        # Netscape 4.x has some problems
        BrowserMatch ^Mozilla/4 gzip-only-text/html

        # Netscape 4.06-4.08 have some more problems
        BrowserMatch ^Mozilla/4\.0[678] no-gzip

        # MSIE masquerades as Netscape, but it is fine
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

        # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48, the above regex won’t work. You can use the following
        # workaround (comment the above line and uncomment the below line) to get the desired effect:
        # BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

        # Don’t compress already-compressed files
        SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
        SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
        SetEnvIfNoCase Request_URI .(?:avi|mov|mp3|mp4|rm|flv|swf|mp?g)$ no-gzip dont-vary
        SetEnvIfNoCase Request_URI .pdf$ no-gzip dont-vary
    </IfModule>

    <IfModule headers_module>
        # Make sure proxies don’t deliver the wrong content
        Header append Vary User-Agent env=!dont-vary
    </IfModule>
</IfModule>

ตอนนี้ถ้าฉันดึงข้อมูลHEADโดยใช้ python หรือ curl ฉันจะได้รับการตอบกลับ gzip (นี่เป็นเพียง.txtไฟล์ แต่มีความสอดคล้องกันในเว็บไซต์):

Date: Mon, 06 May 2013 11:53:31 GMT
Server: Apache/2.2.17 (Ubuntu)
Last-Modified: Sun, 05 May 2013 12:37:23 GMT
ETag: "2412002-129c6-4dbf7d88766c0"
Accept-Ranges: bytes
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 32607
Content-Type: text/plain

อย่างไรก็ตามถ้าฉันทำPOSTหรือGETฉันไม่ได้รับ gzip กลับ:

Date: Mon, 06 May 2013 11:53:25 GMT
Server: Apache/2.2.17 (Ubuntu)
Last-Modified: Sun, 05 May 2013 12:37:23 GMT
ETag: "2412002-129c6-4dbf7d88766c0"
Accept-Ranges: bytes
Vary: Accept-Encoding,User-Agent
Content-Type: text/plain
Content-Length: 76230

UPDATE:Firefox 20นี่คือส่วนหัวจากที่มี Firebug & Google ยืนยันว่ากำลังร้องขอ gzip:

Date: Tue, 07 May 2013 16:57:01 GMT
Server: Apache/2.2.17 (Ubuntu)
X-Powered-By: PHP/5.3.5-1ubuntu7.10
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding,User-Agent
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: text/html
Content-Length: 19922

สิ่งนี้ทำให้ฉันหงุดหงิดสักสองสามวันแล้วและความช่วยเหลือจะได้รับการชื่นชมมาก

ขอบคุณ


คุณได้ลองตรวจสอบส่วนหัวการตอบสนองจากคำขอของเบราว์เซอร์จริงหรือไม่? Curl ไม่ส่งส่วนหัวเริ่มต้นที่เบราว์เซอร์จริงส่ง
Marcel

สวัสดี @Marcel ได้เพิ่มข้อมูลจาก Firefox 20 แล้ว Chrome กับ yslow ยังรายงานไซต์ว่าไม่ส่ง gzip
Naozumi

1
gzip และยุบเป็นสองวิธีการบีบอัดที่แตกต่างกัน ผมคิดว่า mod_deflate สามารถทำทั้งสองอย่าง แต่พวกเขาไม่ได้เหมือนกัน ...
คริส S

คำตอบ:


0

เมื่อมันปรากฏออกมาการกำหนดค่าก็ไม่ได้ทำงานได้ดีนักและเว็บไซต์ก็เลือกที่จะยุบเกิน gzip เสมอ ฉันไม่เห็นว่ามันทำงานได้ ฉันทำให้มันง่ายhttp.confขึ้นและเปิดใช้งานการล็อกออนของ linux ซึ่งแสดงว่ามันทำงานได้ดี:

LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so

SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ \
    no-gzip dont-vary
SetEnvIfNoCase Request_URI \
    \.(?:exe|t?gz|zip|bz2|sit|rar)$ \
    no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

DeflateFilterNote Input input_info
DeflateFilterNote Output output_info
DeflateFilterNote Ratio ratio_info
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
CustomLog /var/log/apache2/deflate_log deflate

ส่วนสุดท้ายเขียนบันทึกที่แสดงว่าเนื้อหาบางส่วนถูกบีบอัดแบบ infact บางส่วนยังไม่ได้ แต่ฉันเชื่อว่าตอนนี้จะลงไปตามวิธีที่ php ทำงาน ฉันจะดูด้วยการใช้การบีบอัด php เพื่อจัดการกับสิ่งที่ดีกว่า

และขอบคุณ Marcel & Chris S ที่ช่วยฉันหาทางนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.