108 lines
3.3 KiB
ApacheConf
108 lines
3.3 KiB
ApacheConf
|
|
# Umbrix Update Server - Apache Configuration
|
|||
|
|
|
|||
|
|
# === ЧПУ (Красивые URL) ===
|
|||
|
|
RewriteEngine On
|
|||
|
|
|
|||
|
|
# Редирект с index.php на api.php
|
|||
|
|
RewriteRule ^index\.php$ api.php [L,R=301]
|
|||
|
|
|
|||
|
|
# API endpoints
|
|||
|
|
RewriteRule ^api/latest$ api.php [L,QSA]
|
|||
|
|
RewriteRule ^api/version$ api.php [L,QSA]
|
|||
|
|
|
|||
|
|
# === Безопасность ===
|
|||
|
|
|
|||
|
|
# Запретить доступ к служебным файлам
|
|||
|
|
<FilesMatch "^(latest\.json|\.htaccess|\.git.*|composer\.json|package\.json|README\.md)$">
|
|||
|
|
Order deny,allow
|
|||
|
|
Deny from all
|
|||
|
|
</FilesMatch>
|
|||
|
|
|
|||
|
|
# Разрешить доступ только к API и downloads
|
|||
|
|
<FilesMatch "^(api\.php)$">
|
|||
|
|
Order allow,deny
|
|||
|
|
Allow from all
|
|||
|
|
</FilesMatch>
|
|||
|
|
|
|||
|
|
# Запретить листинг директорий
|
|||
|
|
Options -Indexes
|
|||
|
|
|
|||
|
|
# Запретить выполнение PHP в папке downloads
|
|||
|
|
<Directory "downloads">
|
|||
|
|
php_flag engine off
|
|||
|
|
RemoveHandler .php .phtml .php3
|
|||
|
|
RemoveType .php .phtml .php3
|
|||
|
|
</Directory>
|
|||
|
|
|
|||
|
|
# === CORS Headers ===
|
|||
|
|
<IfModule mod_headers.c>
|
|||
|
|
# Разрешить CORS для API
|
|||
|
|
Header set Access-Control-Allow-Origin "*"
|
|||
|
|
Header set Access-Control-Allow-Methods "GET, OPTIONS"
|
|||
|
|
Header set Access-Control-Allow-Headers "Content-Type"
|
|||
|
|
|
|||
|
|
# Кеширование для APK файлов
|
|||
|
|
<FilesMatch "\.(apk)$">
|
|||
|
|
Header set Cache-Control "public, max-age=604800"
|
|||
|
|
</FilesMatch>
|
|||
|
|
|
|||
|
|
# Запрет кеширования для API
|
|||
|
|
<FilesMatch "\.(php|json)$">
|
|||
|
|
Header set Cache-Control "no-cache, no-store, must-revalidate"
|
|||
|
|
Header set Pragma "no-cache"
|
|||
|
|
Header set Expires "0"
|
|||
|
|
</FilesMatch>
|
|||
|
|
</IfModule>
|
|||
|
|
|
|||
|
|
# === Сжатие ===
|
|||
|
|
<IfModule mod_deflate.c>
|
|||
|
|
# Сжимать JSON и текстовые файлы
|
|||
|
|
AddOutputFilterByType DEFLATE application/json
|
|||
|
|
AddOutputFilterByType DEFLATE text/plain
|
|||
|
|
AddOutputFilterByType DEFLATE text/html
|
|||
|
|
|
|||
|
|
# НЕ сжимать APK файлы (они уже сжаты)
|
|||
|
|
SetEnvIfNoCase Request_URI \.apk$ no-gzip dont-vary
|
|||
|
|
</IfModule>
|
|||
|
|
|
|||
|
|
# === MIME типы ===
|
|||
|
|
<IfModule mod_mime.c>
|
|||
|
|
AddType application/vnd.android.package-archive .apk
|
|||
|
|
AddType application/json .json
|
|||
|
|
</IfModule>
|
|||
|
|
|
|||
|
|
# === Ограничение размера загрузки ===
|
|||
|
|
<IfModule mod_php7.c>
|
|||
|
|
php_value upload_max_filesize 100M
|
|||
|
|
php_value post_max_size 100M
|
|||
|
|
php_value max_execution_time 300
|
|||
|
|
php_value max_input_time 300
|
|||
|
|
</IfModule>
|
|||
|
|
|
|||
|
|
# === Защита от инъекций ===
|
|||
|
|
<IfModule mod_rewrite.c>
|
|||
|
|
# Блокировать подозрительные запросы
|
|||
|
|
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
|
|||
|
|
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
|
|||
|
|
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
|
|||
|
|
RewriteRule ^(.*)$ - [F,L]
|
|||
|
|
</IfModule>
|
|||
|
|
|
|||
|
|
# === Логирование ===
|
|||
|
|
<IfModule mod_log_config.c>
|
|||
|
|
# Кастомный формат логов
|
|||
|
|
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" custom
|
|||
|
|
CustomLog logs/access.log custom
|
|||
|
|
</IfModule>
|
|||
|
|
|
|||
|
|
# === Производительность ===
|
|||
|
|
<IfModule mod_expires.c>
|
|||
|
|
ExpiresActive On
|
|||
|
|
|
|||
|
|
# APK файлы кешировать на неделю
|
|||
|
|
ExpiresByType application/vnd.android.package-archive "access plus 7 days"
|
|||
|
|
|
|||
|
|
# API не кешировать
|
|||
|
|
ExpiresByType application/json "access plus 0 seconds"
|
|||
|
|
</IfModule>
|