2014-12-20 9 views
5

अनुसरण कर रहे हैं एकता WebGL के लिए अपाचे पुनः लेखन के नियमइस apache rewrite को nginx में कैसे परिवर्तित करें?

Options +FollowSymLinks 
RewriteEngine on 

RewriteCond %{HTTP:Accept-encoding} gzip 
RewriteRule (.*)Data(.*)\.js $1Compressed$2\.jsgz [L] 
RewriteRule (.*)Data(.*)\.data $1Compressed$2\.datagz [L] 
RewriteRule (.*)Data(.*)\.mem $1Compressed$2\.memgz [L] 
RewriteRule (.*)Data(.*)\.unity3d $1Compressed$2\.unity3dgz [L] 
AddEncoding gzip .jsgz 
AddEncoding gzip .datagz 
AddEncoding gzip .memgz 
AddEncoding gzip .unity3dgz 
वर्तमान में nginx पर

मैं निम्नलिखित है

location ~* \.(js|data|mem|unity3d)$ 
    { 
    gzip_static on; 

    if ($request_filename ~ "\.jsgz$") { 
       rewrite ^(.js.gz)$ /$1.jsgz; 
    } 
    if ($request_filename ~ "\.datagz$") { 
       rewrite ^(.data.gz)$ /$1.datagz; 
    } 
    if ($request_filename ~ "\.memgz$") { 
       rewrite ^(.mem.gz)$ /$1.memgz; 
    } 
    if ($request_filename ~ "\.unity3dgz$") { 
       rewrite ^(.unity3d.gz)$ /$1.unity3dgz; 
    } 
    } 



    location ~* \.(jsgz|datagz|memgz|unity3dgz)$ { 
    add_header Content-Encoding gzip; 
    break; 
    } 

लेकिन यह काम नहीं करता है, मूल अपाचे पुनर्लेखन की मेरी समझ पर आधारित है, यह लगता है कि स्वचालित रूप से संकुचित जेएस | डेटा | mem | unity3d gunzip प्रारूप में और फ़ाइल नाम के अंत में "gz" नाम जोड़ना, nginx में फिर से लिखना कैसे है जबकि gzip_static कस्टम फ़ाइल नाम का समर्थन नहीं करता है?

उत्तर

9

आपने अब तक यह पता लगाया होगा, लेकिन अपाचे के साथ एनजिनक्स रूपांतरण में खुद को संघर्ष करते समय मैंने इस सवाल पर ठोकर खाई।

Nginx में gzip_static नामक एक मॉड्यूल है जो स्वचालित रूप से फ़ाइलों के पूर्व-संपीड़ित संस्करणों की तलाश करेगा और यदि ग्राहक gzip का समर्थन करता है तो उनकी सेवा करेगा। यह जरूरी है कि आप डेटा निर्देशिका को संकुचित निर्देशिका से फ़ाइलों को ले जाते हैं, और थोड़ा फ़ाइल एक्सटेंशन को बदलने:

से पहले:

# cd MyProject 
# tree 
. 
|-- Compressed 
| |-- MyProject.datagz 
| |-- MyProject.html.memgz 
| |-- MyProject.jsgz 
| |-- fileloader.jsgz 
| |-- UnityConfig.jsgz 
| |-- UnityProgress.jsgz 
|-- Data 
| |-- MyProject.data 
| |-- MyProject.html.mem 
| |-- MyProject.js 
| |-- fileloader.js 
| |-- UnityConfig.js 
| |-- UnityProgress.js 

के बाद:

# tree 
. 
|-- Compressed 
|-- Data 
| |-- MyProject.data 
| |-- MyProject.data.gz 
| |-- MyProject.html.mem 
| |-- MyProject.html.mem.gz 
| |-- MyProject.js 
| |-- MyProject.js.gz 
| |-- fileloader.js 
| |-- fileloader.js.gz 
| |-- UnityConfig.js 
| |-- UnityConfig.js.gz 
| |-- UnityProgress.js 
| |-- UnityProgress.js.gz 

में आपकी Nginx कॉन्फ़िगरेशन:

location /path/to/MyProject/Data { 
    gzip_static on; 
} 

ध्यान दें कि Nginx साथ --with-http_gzip_static_module बनाए गए हों। आप अपने संस्करण चल रहा द्वारा पहले से ही इस है, तो देखने के लिए जाँच कर सकते हैं:

nginx -V 

केवल दोष यह है कि आप को स्थानांतरित/फ़ाइलों का नाम बदलना है कि है, लेकिन यह एक एक लाइनर समाधान के लिए एक छोटी सी असुविधा है।

cd Data 
mv ../Compressed/*gz ./ 
rename 's/(.*)gz$/$1.gz/' *gz 
+0

क्या यह बताने का कोई आसान तरीका है कि यह वास्तव में काम कर रहा है या नहीं? मैंने यहां वर्णित सब कुछ किया है, यह मुझे समझ में आता है, gzip सक्षम है और nginx में स्थापित है, लेकिन ऐसा लगता है कि यह डाउनलोड बहुत लंबा/पूर्ण संस्करण डाउनलोड कर रहा है और संकुचित संस्करण नहीं। –

+2

अपने लिए यह परीक्षण करने के लिए, मैंने बस संकुचित और असंपीड़ित फ़ाइलों दोनों के लिए फ़ाइल आकार पर देखा, ब्राउज़र कैश साफ़ किया, और फिर फ़ाइल आकार क्या देखने के लिए क्रोम/फ़ायरफ़ॉक्स देव उपकरण में मॉनीटर टैब देखा। यदि आप इसके साथ अधिक तकनीकी होना चाहते हैं, तो यहां स्वीकृत उत्तर देखें: http://stackoverflow.com/questions/2460821/how-can-i-check-that-the-nginx-gzip-static- मॉड्यूल- काम कर रहा है – Jody

+0

अच्छा धन्यवाद। यह काम कर रहा है !!!!!! –

0

http://winginx.com/en/htaccess का उपयोग कर एकता की .htaccess के एक स्वचालित रूपांतरण करने से पैदावार इस:

# nginx configuration 
location/{ 
    rewrite (.*)Data(.*)\.js /$1Compressed$2\.jsgz break; 
    rewrite (.*)Data(.*)\.data /$1Compressed$2\.datagz break; 
    rewrite (.*)Data(.*)\.mem /$1Compressed$2\.memgz break; 
    rewrite (.*)Data(.*)\.unity3d /$1Compressed$2\.unity3dgz break; 
} 
0

यहाँ मेरी हल है

यहाँ कैसे ले जाने के लिए/मिलान करने के लिए क्या nginx उम्मीद gzip फ़ाइलों का नाम है । मैंने इसे nginx/1.2.1 पर परीक्षण किया।

location ~* ^/new/build/webgl_build/Release/.+\.(js|data|mem|unity3d) { 
    add_header Content-Encoding gzip; 
    gzip_static on; 

    rewrite (.*)Release(.*)\.js $1Compressed$2.jsgz break; 
    rewrite (.*)Release(.*)\.data $1Compressed$2.datagz break; 
    rewrite (.*)Release(.*)\.mem $1Compressed$2.memgz break; 
    rewrite (.*)Release(.*)\.unity3d $1Compressed$2.unity3dgz break; 
} 

मुझे उम्मीद है कि यह आपकी मदद करेगा। :)

0

5.5 पर यह करने के लिए कैसे:

1) फ़ोल्डर को छोड़ दें और सभी फाइल एक्सटेंशन के साथ .extensiongz को .extension समाप्त होने का नाम बदलें पर जाएं।GZ

2) यकीन है कि आपकी फ़ाइलों उन्हें किसी भी रिक्त स्थान न करना पड़े, मैं हमेशा मेरा nginx वी

चलाकर

3) सुनिश्चित करें कि आप स्थिर gzip nginx के साथ स्थापित किया हुआ है snake_cased छोड़

साथ
location ~* { 
     gzip_static on; 
} 

5) पुनः प्रारंभ nginx sudo सेवा nginx पुनः आरंभ:

4) के साथ अपनी साइटों से उपलब्ध विन्यास फाइल अद्यतन

संबंधित मुद्दे