Poniżej przedstawiam dyrektywy, które mogą znacząco przyspieszyć działanie Twojej strony internetowej, wpływając na kompresję, cache, oraz efektywność przetwarzania zasobów przez serwer. Pamiętaj jednak, że zmiany w pliku .htaccess
należy wprowadzać z rozwagą. Nie każda optymalizacja będzie odpowiednia dla każdej witryny, a nadmierna liczba modyfikacji lub niewłaściwie skonfigurowane dyrektywy mogą spowodować nieoczekiwane problemy z funkcjonowaniem strony. Ważne jest, aby testować wprowadzone zmiany i dostosowywać je do specyficznych potrzeb serwisu.
1. Kompresja GZIP (mod_deflate)
Kompresja GZIP zmniejsza rozmiar plików HTML, CSS, JavaScript i innych tekstowych zasobów, co skraca czas ich przesyłania.
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/woff font/woff2
AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
2. Cache zasobów (mod_expires)
Zarządzanie cache pozwala przechowywać zasoby w przeglądarce użytkownika przez określony czas, co zmniejsza liczbę żądań do serwera.
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
</IfModule>
3. Cache-Control (mod_headers)
Nagłówki Cache-Control
mogą określić, jak długo przeglądarka powinna przechowywać zasoby.
<IfModule mod_headers.c>
<FilesMatch "\.(jpg|jpeg|png|gif|swf|css|js|woff|woff2|ttf|svg)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>
</IfModule>
4. Prefetching (mod_headers)
Prefetching pozwala na wcześniejsze ładowanie zasobów, co przyspiesza przyszłe żądania.
<IfModule mod_headers.c>
<link rel="dns-prefetch" href="//example.com">
Header set Link "</path/to/resource>; rel=preload; as=script"
</IfModule>
5. Usunięcie ETags (mod_headers)
ETag to nagłówek HTTP, który jest rzadko potrzebny i może zwiększać obciążenie serwera. Można go usunąć.
<IfModule mod_headers.c>
Header unset ETag
</IfModule>
FileETag None
6. Zmniejszenie liczby połączeń (KeepAlive)
Dyrektywa KeepAlive pozwala na utrzymywanie połączeń HTTP otwartych, co zmniejsza opóźnienia przy wielu żądaniach.
<IfModule mod_headers.c>
Header set Connection keep-alive
</IfModule>
7. Minimalizacja liczby przekierowań (mod_rewrite)
Przekierowania mogą spowolnić ładowanie strony. Użyj poniższych dyrektyw, aby minimalizować ich liczbę.
RewriteEngine On
# Przekierowanie z www do non-www (lub odwrotnie, zależnie od preferencji)
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/\ [R=301,L]
8. Optymalizacja obsługi plików multimedialnych (mod_headers)
Dodanie nagłówków Vary
do odpowiedzi serwera poprawia caching dla zasobów multimedialnych.
<IfModule mod_headers.c>
Header append Vary: Accept-Encoding
</IfModule>
9. Kompresja plików CSS i JS (mod_rewrite)
Automatyczna kompresja plików CSS i JS może przyspieszyć ładowanie zasobów.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.css$ $1.min.css [L]
RewriteRule ^(.*)\.js$ $1.min.js [L]
</IfModule>
10. Zmniejszenie rozmiaru cookies
Używanie małych plików cookie lub ich eliminacja w przypadku zasobów statycznych zmniejsza obciążenie.
<IfModule mod_headers.c>
Header unset Set-Cookie
</IfModule>
11. Zarządzanie limitem połączeń (mod_ratelimit)
Ograniczanie liczby połączeń pozwala uniknąć przeciążenia serwera.
<IfModule mod_ratelimit.c>
SetEnv rate-limit 400
</IfModule>
12. Blokowanie niepotrzebnych żądań (mod_security)
Blokowanie niepotrzebnych żądań, takich jak zbędne boty, zmniejsza obciążenie serwera.
<IfModule mod_security.c>
SecFilterEngine On
SecFilterScanPOST On
SecRuleEngine On
</IfModule>
13. Kompresja Brotli (mod_brotli)
Alternatywą dla GZIP jest kompresja Brotli, która może jeszcze bardziej zmniejszyć rozmiar plików.
<IfModule mod_brotli.c>
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml
AddOutputFilterByType BROTLI_COMPRESS text/css
AddOutputFilterByType BROTLI_COMPRESS text/javascript
AddOutputFilterByType BROTLI_COMPRESS application/javascript
AddOutputFilterByType BROTLI_COMPRESS application/x-javascript
AddOutputFilterByType BROTLI_COMPRESS application/xml
AddOutputFilterByType BROTLI_COMPRESS application/xhtml+xml
</IfModule>
14. HTTP/2 (mod_http2)
Jeśli serwer obsługuje HTTP/2, możesz skonfigurować plik .htaccess
, aby wymusić jego użycie, co przyspiesza komunikację między serwerem a przeglądarką.
<IfModule mod_http2.c>
Protocols h2 http/1.1
</IfModule>
15. Wyeliminowanie blokujących zasobów (async dla JS i CSS)
Aby skrypty JavaScript i CSS nie blokowały ładowania strony, możesz użyć atrybutu async
dla zasobów zewnętrznych.
<IfModule mod_headers.c>
Header set Link "</path/to/resource.js>; rel=preload; as=script"
</IfModule>
16. Kontrola nad rozmiarem plików przesyłanych na serwer (mod_security, mod_request)
Ograniczenie rozmiaru plików przesyłanych na serwer może zapobiec przeciążeniom.
<IfModule mod_request.c>
LimitRequestBody 10485760 # Ograniczenie przesyłanych plików do 10MB
</IfModule>
17. Kontrola nad połączeniami Keep-Alive (mod_headers)
Optymalizacja połączeń Keep-Alive może skrócić czas oczekiwania na kolejne żądania HTTP.
<IfModule mod_headers.c>
Header set Keep-Alive "timeout=5, max=100"
</IfModule>
18. Wymuszenie kompresji statycznych plików HTML/CSS/JS (mod_filter)
Dodanie warunkowych filtrów dla kompresji wyłącznie dla określonych typów MIME może pomóc w optymalizacji działania serwera.
<IfModule mod_filter.c>
FilterDeclare compress
FilterProvider compress DEFLATE "%{Content_Type} = 'text/html'"
FilterProvider compress DEFLATE "%{Content_Type} = 'text/css'"
FilterProvider compress DEFLATE "%{Content_Type} = 'application/javascript'"
FilterChain compress
</IfModule>
19. Zarządzanie kolejnością ładowania zasobów zewnętrznych (mod_rewrite)
Zmiana kolejności ładowania zasobów, takich jak zewnętrzne skrypty i style, może przyspieszyć renderowanie strony.
<IfModule mod_rewrite.c>
# Optymalizacja ładowania zasobów zewnętrznych
RewriteCond %{REQUEST_URI} ^/path/to/resource$
RewriteRule ^(.*)$ https://external-site.com/resource.js [L]
</IfModule>
20. Ustawienie priorytetów HTTP/2 dla zasobów (mod_http2)
Jeśli korzystasz z HTTP/2, możesz ustawić priorytety dla konkretnych zasobów, aby przyspieszyć ładowanie tych najważniejszych.
<IfModule mod_http2.c>
H2PushResource /css/styles.css
H2PushResource /js/script.js
</IfModule>
21. Blokowanie określonych User-Agentów lub botów (mod_rewrite, mod_headers)
Niektóre boty lub agenty użytkownika mogą obciążać serwer. Możesz je blokować, aby odciążyć serwer.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*(BadBot|EvilScraper|BotExample).*$ [NC]
RewriteRule .* - [F,L]
</IfModule>
22. Ustawienie nagłówków CORS (Cross-Origin Resource Sharing) dla przyspieszenia ładowania zasobów z zewnętrznych domen
CORS pozwala na bezpieczne udostępnianie zasobów między różnymi domenami, co może przyspieszyć ładowanie zewnętrznych zasobów.
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "X-Requested-With"
</IfModule>
23. Optymalizacja liczby wątków (mod_worker)
Jeśli Twój serwer działa na MPM Worker, możesz zoptymalizować liczbę wątków obsługujących żądania, aby poprawić wydajność przy dużym obciążeniu.
<IfModule mpm_worker_module>
StartServers 4
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
</IfModule>
24. Dynamiczne ustawianie zmiennej serwera dla różnych żądań (mod_setenvif)
Dzięki mod_setenvif
możesz dynamicznie dostosowywać zmienne serwera w zależności od typu żądań.
<IfModule mod_setenvif.c>
SetEnvIf Request_URI "\.css$" css_request
SetEnvIf Request_URI "\.js$" js_request
</IfModule>
25. Ograniczenie liczby jednoczesnych połączeń dla IP (mod_limitipconn)
Ograniczanie liczby jednoczesnych połączeń dla jednego adresu IP może zmniejszyć obciążenie serwera.
<IfModule mod_limitipconn.c>
MaxConnPerIP 10
</IfModule>
26. Ochrona przed atakami DDoS (mod_evasive)
mod_evasive
pomaga chronić serwer przed atakami DDoS, co może wpłynąć na dostępność i szybkość strony.
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSBlockingPeriod 10
</IfModule>
27. Obsługa żądań POST i GET (mod_alias)
Ustawienie odpowiednich reguł dla obsługi różnych metod HTTP może poprawić wydajność.
<IfModule mod_alias.c>
RedirectMatch 301 /old-path/ https://example.com/new-path/
</IfModule>
28. Zarządzanie rozmiarem pamięci podręcznej FastCGI (mod_proxy_fcgi)
W kontekście serwerów FastCGI możesz zarządzać pamięcią podręczną, aby zwiększyć wydajność.
<IfModule mod_proxy_fcgi.c>
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/html/\
</IfModule>
29. LimitRequestFields i LimitRequestFieldSize (mod_limit)
Te dyrektywy ograniczają liczbę i rozmiar nagłówków w żądaniach HTTP, co może zapobiec przeciążeniu serwera.
<IfModule mod_limit.c>
LimitRequestFields 100 # Maksymalna liczba nagłówków
LimitRequestFieldSize 8190 # Maksymalny rozmiar pojedynczego nagłówka (w bajtach)
</IfModule>
30. Timeout
Dyrektywa Timeout
pozwala na ustawienie maksymalnego czasu oczekiwania serwera na odpowiedź. Zmniejszenie tej wartości może pomóc w optymalizacji zasobów.
Timeout 30 # Serwer będzie czekał maksymalnie 30 sekund na odpowiedź
31. MaxKeepAliveRequests
Określa maksymalną liczbę żądań HTTP, jakie przeglądarka może wykonać podczas jednego połączenia Keep-Alive. Zwiększenie tej wartości może skrócić czas ładowania stron z dużą ilością zasobów.
MaxKeepAliveRequests 100 # Domyślnie ustawiona na 100 żądań
32. KeepAliveTimeout
Czas (w sekundach), przez jaki serwer czeka na kolejne żądanie od tego samego klienta przed zamknięciem połączenia Keep-Alive. Zmniejszenie tej wartości może poprawić wydajność w środowiskach o dużym ruchu.
KeepAliveTimeout 5 # Czas oczekiwania na kolejne żądanie to 5 sekund
33. LimitRequestLine
Ogranicza maksymalną długość linii żądania HTTP (np. długość URL). Może pomóc w zabezpieczeniu przed atakami DDoS oraz optymalizacji.
<IfModule mod_limit.c>
LimitRequestLine 8190 # Domyślna maksymalna długość linii żądania HTTP
</IfModule>
34. BufferSize (mod_buffer)
Ustawienia buforowania wpływają na sposób przesyłania danych pomiędzy serwerem a klientem, co może zoptymalizować wydajność przesyłania dużych plików.
<IfModule mod_buffer.c>
BufferSize 4096 # Ustawia rozmiar bufora na 4096 bajtów
</IfModule>
35. ProxyTimeout (mod_proxy)
Dyrektywa ProxyTimeout
określa czas oczekiwania na odpowiedź od serwera proxy. Zmniejszenie wartości może pomóc w wydajności, gdy korzystasz z serwera proxy do dostarczania zasobów.
<IfModule mod_proxy.c>
ProxyTimeout 60 # Ustawia limit na 60 sekund
</IfModule>
36. No compression for already compressed files (mod_setenvif)
Unikaj ponownej kompresji plików, które są już skompresowane (np. plików .zip
, .png
itp.).
<IfModule mod_setenvif.c>
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|zip|gz)$ no-gzip dont-vary
</IfModule>
37. Multi-Processing Module (MPM) Configurations
W zależności od wersji serwera Apache, możesz używać różnych MPM (Multi-Processing Module) do optymalizacji równoczesnych połączeń. Przykłady obejmują mpm_prefork
, mpm_worker
i mpm_event
. Optymalizacja tych ustawień może znacząco poprawić wydajność serwera.
a) mpm_prefork
dla nie-wielowątkowych aplikacji:
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 3000
</IfModule>
b) mpm_worker
dla wielowątkowych aplikacji:
<IfModule mpm_worker_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
c) mpm_event
dla optymalizacji wydajności w środowiskach o dużym ruchu:
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
</IfModule>
38. Disable Directory Browsing
Wyłączenie przeglądania katalogów może nie tylko poprawić bezpieczeństwo, ale także minimalnie zwiększyć wydajność, ponieważ serwer nie musi generować widoku katalogów.
Options -Indexes
39. Timeout dla operacji CGI (mod_cgi)
Jeśli używasz skryptów CGI, możesz ustawić limit czasu ich wykonywania, co może pomóc w optymalizacji zasobów.
<IfModule mod_cgi.c>
ScriptTimeout 60 # Ustawia limit na 60 sekund
</IfModule>
40. Zmniejszenie wielkości dzienników (mod_log_config)
Ograniczenie zapisywania dzienników serwera może zmniejszyć obciążenie serwera przy dużym ruchu.
<IfModule mod_log_config.c>
CustomLog /dev/null common
</IfModule>
41. ModSecurity Tuning (mod_security)
Jeśli używasz ModSecurity, możesz go skonfigurować, aby filtrować tylko określone typy żądań, co zmniejszy obciążenie serwera.
<IfModule mod_security.c>
SecRuleEngine On
SecRequestBodyAccess Off # Wyłączenie skanowania treści POST
</IfModule>
42. Disable TRACE and TRACK HTTP methods (mod_rewrite)
Wyłączenie metod TRACE i TRACK może poprawić bezpieczeństwo oraz wydajność serwera, eliminując niepotrzebne żądania.
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
43. Limitowanie dostępu do zasobów (mod_access)
Jeśli niektóre zasoby są dostępne tylko dla wybranych użytkowników, możesz ograniczyć dostęp do nich za pomocą IP, co zmniejszy obciążenie serwera.
<IfModule mod_access.c>
Order Deny,Allow
Deny from all
Allow from 192.168.1.100
</IfModule>
Każda strona internetowa ma unikalne wymagania i specyfikę, dlatego nie wszystkie dyrektywy .htaccess
są odpowiednie w każdym przypadku. Optymalizacja szybkości strony powinna być przeprowadzana z rozwagą i dostosowana do konkretnego środowiska serwera oraz charakterystyki ruchu. Wdrożenie zbyt wielu niepotrzebnych dyrektyw może prowadzić do niezamierzonych skutków, takich jak spadek wydajności lub problemy z kompatybilnością. Zamiast ślepo wdrażać wszystkie dostępne opcje, warto przeanalizować konkretne potrzeby strony i stopniowo wprowadzać odpowiednie optymalizacje, monitorując ich wpływ na działanie serwisu.
0 komentarzy