nginx, gzip_static и gzip файлов директории
Опубликовано vladimir в Пнд, 08/25/2008 - 15:41
nginx - отличный веб-сервер, который особенно удобно использовать в качестве фронтенда к большому апачу, кроме того, им очень удобно отдавать статику, и в нем много фишечек, которые могут сильно пригодиться при высокой нагрузке.
Вот одна из них:
"Модуль ngx_http_gzip_static_module позволяет отдавать вместо обычного файла предварительно сжатый файл с таким же именем и с суффиксом ".gz"."
Включается очень легко: gzip_static on; в контексте http, server или location.
Чуть сложнее оказалось сжать файлы требуемых типов, набросал вот такое решение на python:
#!/usr/bin/env python DIR = "/home/users/vladimir/tmp/ligtblue" EXTS = ["css", "js", "py"] import os import os.path import gzip def gz_compr(arg, dir, files): for file in files: try: f = file.split('.') if f[1] in EXTS: mygzip(dir + "/" + file) except: pass def mygzip(file): '''Gzip the given file.''' r_file = open(file, 'r') w_file = gzip.GzipFile(file + '.gz', 'w', 9) w_file.write(r_file.read()) w_file.flush() w_file.close() r_file.close() #os.unlink(file) #We don't need the file now os.path.walk(DIR, gz_compr, 0)
Конечно, оно не проверяет того, существует ли уже .gz, и не изменился ли оригинальный файл, однако поскольку js и css меняются нечасто, разработчики могут вручную выполнить его.
