2014-12-20 7 views
5

Le seguenti sono regole di riscrittura di Apache per l'unità WebGLCome convertire questa riscrittura di Apache in 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 

Attualmente sul nginx Ho il seguente

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; 
    } 

Ma non funziona, in base alla mia comprensione della riscrittura apache originale, supponiamo di comprimere automaticamente js | data | mem | unity3d nel formato gunzip più aggiungendo il nome "gz" alla fine del nome del file, come riscrivere in nginx mentre gzip_static non supporta il nome file personalizzato?

risposta

9

Forse ora lo avete capito, ma mi sono imbattuto in questa domanda quando ho avuto problemi con la conversione da Apache a Nginx.

Nginx ha un modulo chiamato gzip_static che cercherà automaticamente versioni precompattate dei file e li servirà se il client supporta gzip. Ciò richiede che si spostano file dalla directory compressa nella directory dei dati, e un po 'cambiare le estensioni di file:

Prima:

# 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 

Dopo:

# 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 

In la tua configurazione Nginx:

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

Si noti che Nginx deve essere compilato con --with-http_gzip_static_module. È possibile controllare per vedere se la versione ha questo già da running:

nginx -V 

L'unico inconveniente è che si deve spostare/rinominare i file, ma che è un piccolo inconveniente per una soluzione one-liner.

Ecco come spostare/rinominare i file gzip per corrispondere a ciò che nginx si aspetta:

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

C'è un modo semplice per sapere se questo funziona? Ho fatto tutto quanto descritto qui, ha senso per me, gzip è abilitato e installato in nginx ma sembra che il suo download sia troppo lungo/scarica la versione completa e non la versione compressa. –

+2

Per testare da solo, ho solo dato un'occhiata alle dimensioni del file per i file compressi e non compressi, svuotato la cache del browser e poi guardato la scheda del monitor negli strumenti dev di chrome/firefox per vedere quale fosse la dimensione del file. Se vuoi essere più tecnico con esso, vedere la risposta accettata qui: http://stackoverflow.com/questions/2460821/how-can-i-check-that-the-nginx-gzip-static-module- funzionante – Jody

+0

Grazie. Sta funzionando !!!!!! –

0

Facendo una conversione automatica di .htaccess di Unity utilizzando http://winginx.com/en/htaccess cede questo:

# 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

Ecco la mia soluzione . L'ho provato su 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; 
} 

Spero che ti possa aiutare. :)

0

come farlo in 5.5:

1) Vai alla versione cartella e rinominare tutte le estensioni dei file che terminano con .extensiongz a .Numero di estensione.gz

2) Assicurarsi che i file non hanno spazi in loro, ho sempre lasciare il mio snake_cased

3) Assicurarsi di avere gzip statico installato con nginx eseguendo nginx -V

4) Aggiornare il file di configurazione di siti-disponibili con:

location ~* { 
     gzip_static on; 
} 

5) nginx ripartire con nginx servizio sudo restart