В настоящее время я пытаюсь настроить Nginx для обслуживания всех моих статических файлов. Поскольку они вообще не будут меняться очень часто, я хочу, чтобы мы использовали модуль gzip_static, чтобы я мог предварительно сжимать копии моих файлов, чтобы сэкономить время процессора и улучшить сжатие.
Я скомпилировал Nginx с --with-http_gzip_static_module
и настройте его так, чтобы он обслуживал мои статические файлы, пока никаких проблем. Я хотел проверить и убедиться, что статическое сжатие действительно работает, поэтому я сделал два файла, test.txt
и test.txt.gz
. В первой строке каждого файла говорится, были ли они сжаты с помощью gzip, а затем идет новая строка и 256 случайных символов (разные между двумя файлами).
Я читал, что время модификации файла и его gzip-копии должно быть одинаковым, и я пробовал оба из следующих вариантов:
touch test.*
touch -r test.txt test.txt.gx
На моем локальном компьютере я тестирую с помощью curl:
curl $URL/test.txt
Это нормально работает, я возвращаю версию, которую не сжимал предварительно, но когда я сделаю это:
curl -H "Accept-Encoding: gzip" $URL/test.txt | gunzip
я также вернуть версию, которую я не сжимал. Я пробовал установить gzip off
в моем nginx.conf
, но это не имеет значения. Я также перекомпилировал Nginx с --without-http_gzip_module
и это тоже не имеет значения, Nginx по-прежнему gzip сам на лету.
Я новичок в Nginx, но я действительно в растерянности.
Вот результат ./nginx -V
built by gcc 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)
configure arguments: --sbin-path=$SOMEPATH/nginx --prefix=$SOMEPATH --user=$ME --group=$MYGROUP --with-http_gzip_static_module --without-http_gzip_module
И вот мой nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
error_log logs/error.log;
pid logs/nginx.pid;
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
gzip_static on;
sendfile on;
keepalive_timeout 65;
access_log logs/access.log;
server {
listen XXXX;
server_name foo.bar.com;
location / {
root html;
}
error_page 404 404.html;
error_page 500 502 503 504 50x.html;
}
}
Любая помощь очень ценится!
Вы не упомянули об этом в своем вопросе, но у меня есть достоверные сведения, что вы используете прокси-сервер Nginx за другим Nginx на общем хосте. ;)
На момент написания этой статьи модули gzip Nginx по умолчанию используют HTTP 1.1, но Nginx может использовать HTTP 1.0 только при взаимодействии с внутренними серверами, поэтому решение состоит в том, чтобы установить gzip_http_version
в твоем nginx.conf
, вот так:
gzip_http_version 1.0;
После внесения этого изменения перезапустите Nginx, и все будет в порядке.