Bug 56798

Summary: Не работает модуль nginx-zip nginx: [emerg] unknown directive "zip"
Product: Sisyphus Reporter: obidinog <obidinog>
Component: nginxAssignee: Anton Farygin <rider>
Status: CLOSED WORKSFORME QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: belskijaa, placeholder, rider
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description obidinog@basealt.ru 2025-11-10 17:34:17 MSK
Платформа:
alt-server p11 x86_64 (Обновленный до Sisyphus)

Пакет:
nginx 1.28.0-alt2

Шаги:
Установить пакеты
# apt-get install nginx nginx-zip

Включить модуль
# ln -sv /etc/nginx/modules-available.d/http_zip.conf /etc/nginx/modules-enabled.d/

Создать конфиг с содержимым (пример)
# cat <<'EOF' > /etc/nginx/sites-available.d/test-zip.conf
server {
    listen 8080;
    server_name localhost;

    root /var/www/zip-test;

    location = /test.zip {
        default_type application/octet-stream;
        add_header X-Archive-Files "zip";
        zip on;
        return 200 "Hello from nginx\n";
    }
}
EOF

Создать линк
# ln -sv /etc/nginx/sites-available.d/test-zip.conf /etc/nginx/sites-enabled.d

Выполнить проверку
# nginx -t

Результат:
nginx: [emerg] unknown directive "zip" in /etc/nginx/sites-enabled.d/zip-test.conf:6
nginx: configuration file /etc/nginx/nginx.conf test failed


Либо создаю некорректный конфиг, либо это нерабочий модуль. Но конфиги пробовал разные. Либо возвращается просто в тексте (не в архиве), либо ошибка.
Comment 1 Anton Farygin 2026-01-17 18:37:51 MSK
zip on лишнее - модуль активируется по add_header X-Archive-Files "zip";
Comment 2 Anton Farygin 2026-01-17 18:38:47 MSK
  location = /test.zip {
      default_type application/zip;
      add_header X-Archive-Files "zip";
      ......
  }
Comment 3 Alexey Belsky 2026-02-27 11:27:29 MSK
Исправление конфига не помогло

# nginx -t
nginx: [emerg] unknown directive "zip" in /etc/nginx/sites-enabled.d/test-zip.conf:8
nginx: configuration file /etc/nginx/nginx.conf test failed

#nginx -V 2>&1 | grep -o http_zip_module
модуль отсутствует
Comment 4 Anton Farygin 2026-02-27 11:39:14 MSK
Так покажите неработающий конфиг
Comment 5 Alexey Belsky 2026-02-27 12:03:09 MSK
Вот три варианта которые я пробовал:
Первый рабочий но возвращает простой файл test.zip (не архив)

# cat <<'EOF' > /etc/nginx/sites-available.d/test-zip.conf
server {
    listen 8080;
    server_name localhost;

    location = /test.zip {
    default_type application/zip;
    add_header X-Archive-Files "zip";
    
    
    zip_files /var/www/zip-test/hello.txt /dev/null;
    
    
    echo "Hello from nginx" > /var/www/zip-test/hello.txt
}

Остальные возвращают ошибку:


# cat <<'EOF' > /etc/nginx/sites-available.d/test-zip.conf
server {
    listen 8080;
    server_name localhost;

    location = /test.zip {
        default_type application/zip;
        add_header Content-Disposition 'attachment; filename="test.zip"';
        

        zip_entry "hello.txt" {
            content_type text/plain;
            content "Hello from nginx\n";
        }
    }
}


# cat <<'EOF' > /etc/nginx/sites-available.d/test-zip.conf
 server {
     listen 8080;
     server_name localhost;
     root /var/www/zip-test;
     
     location = /test.zip {
         default_type application/zip;
         add_header X-Archive-Files "zip";
         zip on;
         zip_localtime off;
         
        
         zip_files /var/www/zip-test/hello.txt /dev/null;
     }
 }
 EOF
Comment 6 Anton Farygin 2026-02-27 12:12:54 MSK
ln -sv /etc/nginx/modules-available.d/http_zip.conf /etc/nginx/modules-enabled.d/ - сделано ?
Comment 7 Anton Farygin 2026-02-27 12:24:35 MSK
(Ответ для Alexey Belsky на комментарий #3)
> #nginx -V 2>&1 | grep -o http_zip_module
> модуль отсутствует

грепать надо add-dynamic-module=nginx-zip-module

у меня отображается.
Comment 8 Anton Farygin 2026-02-27 12:27:55 MSK
Создать тестовые файлы:

  mkdir -p /var/www/test-zip
  echo "Hello from file1" > /var/www/test-zip/file1.txt
  echo "Hello from file2" > /var/www/test-zip/file2.txt

  Создать список файлов для архива (/var/www/test-zip/filelist.txt):

  - 17 /files/file1.txt file1.txt
  - 17 /files/file2.txt file2.txt

  (- вместо CRC32 означает что контрольная сумма неизвестна)

  Конфигурация nginx:

  # Бэкенд — отдаёт файлы и список с заголовком
  server {
      listen 127.0.0.1:8091;
      root /var/www/test-zip;

      location = /filelist.txt {
          add_header X-Archive-Files zip;
      }
  }

  # Фронтенд с mod_zip
  server {
      listen 127.0.0.1:8090;

      location /archive {
          proxy_pass http://127.0.0.1:8091/filelist.txt;
      }

      location /files/ {
          internal;
          proxy_pass http://127.0.0.1:8091/;
      }
  }

  4. Проверка

  nginx -t && nginx -s reload
  curl -o /tmp/test.zip http://127.0.0.1:8090/archive
  file /tmp/test.zip
  unzip -l /tmp/test.zip

  Результат:

  /tmp/test.zip: Zip archive data
  Archive:  /tmp/test.zip
    Length      Date    Time    Name
  ---------  ---------- -----   ----
         17  2026-02-27 12:23   file1.txt
         17  2026-02-27 12:23   file2.txt
  ---------                     -------
         34                     2 files