2014-04-21 16 views
5

Znalazłem interesujący problem.NGINX Serve Wstępnie skompresowany plik indeksu bez źródła

Próbuję obsłużyć niektóre spakowane pliki bez źródeł wykorzystujących moduł gzip_static NGINX (znam wady tego). Oznacza to, że możesz mieć spakowane pliki gzip na serwerze, który będzie obsługiwany za pomocą kodowania transferu: gzip. Na przykład, jeśli istnieje plik /foo.html.gz, żądanie pliku /foo.html będzie obsługiwane przez skompresowany plik z kodowaniem treści: text/html.

Podczas gdy to zwykle działa, okazuje się, że podczas wyszukiwania plików indeksu w katalogu, wersje gzipowane nie są brane pod uwagę.

GET /index.html 
200 

GET/
403 

Zastanawiam się, czy ktoś wie, jak to naprawić. Próbowałem ustawić index.html.gz jak w pliku indeksu, ale jest on wyświetlany jako plik gzip, a nie jako plik HTML zakodowany w gzip.

+0

Czy chcesz wysłać skompresowaną odpowiedź lub wstępnie skompresowane pliki statyczne? Są różne - http://nginx.org/en/docs/http/ngx_http_gzip_module.html; http://nginx.org/en/docs/http/ngx_http_gzip_static_module.html –

+0

Próbuję podać skompresowane pliki statyczne. –

+0

W przypadku wartości "zawsze" (1.3.6) plik gzipped jest używany we wszystkich przypadkach, bez sprawdzania, czy klient go obsługuje. Przydaje się to, jeśli nie ma na dysku żadnych nieskompresowanych plików lub używany jest moduł ngx_http_gunzip_module. Więc piszesz: "gzip zawsze", zamiast "gzip on" – Spock

Odpowiedz

4

To oczywiście nie zadziała w ten sposób.

To jest częścią modułu source:

if (r->uri.data[r->uri.len - 1] == '/') { 
    return NGX_DECLINED; 
} 

Więc jeśli uri kończy się ukośnikiem, to nawet nie patrzeć w wersji zgzipowanego.

Ale prawdopodobnie można się włamać przy użyciu przepisywania. (jest to przypuszczenie, ja go nie testowane)

rewrite ^(.*)/$ $1/index.html; 

Edycja: Aby pracować z obrotowymi (chyba) można spróbować użyć tego zamiast przepisać:

location ~ /$ { 
    try_files ${uri}/index.html $uri; 
} 

Prawdopodobnie jest ogólnie lepiej niż przy przepisywaniu. Ale musisz spróbować ...

+0

Dzięki, to działa! Niestety, łamie 'autoindex'. Czy sądzisz, że istnieje sposób na to, aby działał z 'autoindex'? – ReyCharles

+0

@ReyCharles może ten jest lepszy. ale nie przetestowałem – Fox

+0

Niestety to rozwiązanie ma ten sam problem. – ReyCharles

Powiązane problemy