Всем спасибо за то, что помогаете тестировать скрипт и обвязку. В общем, поковырял я немного апач. Остановился на следующем конфиге:
/etc/apache2/sites-available/nod32mirror.conf
Код: Выделить всё
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot "/var/www/nod32mirror"
#<IfModule mod_deflate.c>
# SetEnv no-gzip
#</IfModule>
<Directory "/var/www/nod32mirror">
AllowOverride All
Require all granted
</Directory>
# === Определение версии клиента по User-Agent ===
SetEnvIfNoCase User-Agent ".*(EEA|EES|EFSW|EMSX|ESFW)+\s+Update.*BPC\s+([0-9]+)\..*" ver=ep$2
SetEnvIfNoCase User-Agent ".*Update.*BPC\s+([0-9]+)\..*" ver=v$1
# Включаем mod_rewrite
RewriteEngine On
# === Логика для update.ver ===
RewriteCond %{ENV:ver} ^ep[6-9]$ [OR]
RewriteCond %{ENV:ver} ^ep1[0-9]$
RewriteRule ^(dll/)?update\.ver$ /eset_upd/%{ENV:ver}/$1update.ver [L]
RewriteCond %{ENV:ver} ^v[3-8]$
RewriteRule ^(.*) /eset_upd/v3/dll/update.ver [L]
RewriteCond %{ENV:ver} ^v1[0-1]$
RewriteRule ^(.*) /eset_upd/v10/dll/update.ver [L]
RewriteCond %{ENV:ver} ^v1[2-9]$
RewriteRule ^(.*) /eset_upd/%{ENV:ver}/dll/update.ver [L]
# === Логика для "остальных файлов" ===
RewriteCond %{ENV:ver} ^v[3-8]$
SetEnv ver_path v3
RewriteCond %{ENV:ver} ^v1[0-1]$
SetEnv ver_path v10
Alias /updates/ "/var/www/nod32mirror/data/"
<Directory "/var/www/nod32mirror/data">
AllowOverride All
Require all granted
</Directory>
# Заголовки
<IfModule mod_headers.c>
Header set X-Robots-Tag "noindex, nofollow, nosnippet, noarchive"
Header set Cache-Control "no-cache, public, must-revalidate"
</IfModule>
# Логи
LogLevel debug
#ErrorLog /var/log/apache2/error_nod32mirror.log
ErrorLog /var/log/apache2/access_nod32mirror.log
CustomLog /var/log/apache2/access_nod32mirror.log combined
</VirtualHost>
C этим конфигом другой такой же скрипт может обновиться, открывается index.html но антивирус обновиться c апача не может и ругается что "файл поврежден". При этом nginx натравленый на эти же базы на этом же сервере с другого порта этому же антивирусу отдает базы нормально и антивирь обновляется без проблем. Начал копать что ему не так и наткнулся на разное формирование тэга в ETag в ответе сервера у апача и у NGINX - визуально видно, что используются разные алгоритмы его генерации:
Код: Выделить всё
Nginx (ETag: "67d0b0ab-80a35")
Apache (ETag: "1c753-630181b82d02e")
Есть подозрение, что антивирус проверяет размер файла по ETag в формате Nginx по правой части от дефиса(размер в hex). Осталось привести ETag апача в формат Nginx. Нашел даже как это сделать - надо добавить
но куда именно добавить чтоб оно при этом работало пока не нашел. Завтра буду разбираться если никто не найдет