Wpływ htaccess na czas ładowania

15

Istnieją ogólnie dwie możliwości obsługi rzeczy na Apache:

  • konfiguruj foldery jeden po drugim, używając pliku htaccess

  • aby w pełni zrezygnować z htaccess i umieścić wszystkie reguły w httpd.conf

Użycie htaccess jest problemem związanym z czasem ładowania. Chcę wiedzieć, jak drogie pod względem czasu ładowania jest użycie htaccess? Czy są jakieś testy?

Evgeniy
źródło

Odpowiedzi:

22

Zalecenie z projektu Apache jest:

Zasadniczo powinieneś używać plików .htaccess tylko wtedy, gdy nie masz dostępu do głównego pliku konfiguracyjnego serwera. ... powszechnym nieporozumieniem jest to, że uwierzytelnianie użytkownika i dyrektywy mod_rewrite muszą iść w .htaccessplikach.

Więc proszę zarówno ustaw, jak AllowOverride Nonei wszystkie pozostałe dyrektywy w głównym httpd.conf (i / lub w podsekcjach Include)


Gdy Apache nie jest skonfigurowany z AllowOverride Nonetobą, występuje (niewielka) obniżka wydajności, niezależnie od tego, czy .htaccessużywane są żadne pliki.

Dzieje się tak, ponieważ dla każdego żądania apache będzie musiał sprawdzić obecność potencjalnego .htaccesspliku w każdym (pod) katalogu prowadzącym do żądanego zasobu. Na przykład, gdy żądany jest plik z katalogu / www / htdocs / example, apache musi szukać następujących plików:

/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess

I tak, dla każdego dostępu do pliku z tego katalogu istnieją 4 dodatkowe dostępy do systemu plików, nawet jeśli żaden z tych plików nie jest obecny. (Jeśli opcja AllowOveride jest ustawiona na /)

Wywołanie systemowe użyte do tego celu ( man 2 stat) samo w sobie nie jest tak drogie i zwykle pamięć podręczna systemu plików jest używana zamiast sondowania rzeczywistego dysku, ograniczając rzeczywiste wymagania we / wy, ale nadal można go sumować, jak argumentuje ten artykuł .


Gdy jeden lub więcej rzeczywistych .htaccessplików jest rzeczywiście obecnych, apache nadal musi je openodczytać (wyzwalając kolejną operację odczytu IO i zwykle także operację zapisu IO w celu zaktualizowania atimeatrybutu systemu plików ) i przeanalizować go, zanim będzie można zastosować logikę.

W przeciwieństwie do tego, kiedy twoje dyrektywy są w głównym pliku httpd.conf, który potrzebuje tylko apache do ich parsowania raz, podczas uruchamiania każdy .htaccessplik musi być interpretowany ponownie dla każdego żądania.

Koszt, oprócz operacji IO, analizy plików .htaccess zależy od ich złożoności.

Będzie to wymagało starannej analizy porównawczej.

HBruijn
źródło
4

Koszt zależy od tego, na ile potężny jest serwer, w szczególności podsystem we / wy pamięci masowej i od tego, czy w grę wchodzi buforowanie.

Sposobem na przetestowanie tego jest skonfigurowanie systemu z .htacess i przetestowanie go w taki sam sposób, jak w przypadku dowolnego serwera WWW. Następnie skonfiguruj system bez .htaccess i uruchom te same testy.

Porównać i wyników dla swoich skonfigurowanych systemów.

użytkownik9517
źródło
1

Nie wierzę, że istnieje jedna prawidłowa odpowiedź na twoje pytanie. Istnieje wiele zmiennych, które mogą wpływać na czas ładowania htaccess:

  • Struktura folderów witryny: wszystkie pliki .htaccess w każdym folderze są ładowane przy każdym otwarciu strony.
  • Jak długi jest plik htaccess: 200 linii vs 3500 linii? jest duża różnica.
  • Konfiguracja .htaccess: przepisy przepisywania i przekierowywania mogą być cięższe niż inne (i nie są jedynymi).
  • Połączenie sieciowe po stronie klienta może wpływać na czas ładowania. IMO, możesz wypróbować go z więcej niż jednego miejsca i poświęcić średni czas jak odniesienie.
  • ab - Narzędzie analizy porównawczej serwera HTTP Apache może ci pomóc

więcej informacji:

HEDMON
źródło
1

Testowałem z i bez .htaccess i naprawdę nie mogłem znaleźć żadnej różnicy w prędkości lub napowietrznych. To prawda, że ​​prowadzę tylko 16 witryn i jest to super szybki serwer, więc w moim przypadku śledzenie milisekund jest prawie niemożliwe. Na serwerze z setkami witryn obciążenie może być zauważalne, więc @Iain powiedział test i zobacz.

Osobiście robię wszystko, używając pliku .conf dla wirtualnego hosta, a nie .htaccess, który daje mi absolutną kontrolę nad wszystkim, jest czystszy i raz załadowany do pamięci apache. Nawet moje reguły przepisywania wordpress są w moich plikach .conf, więc nigdy nie mogą się zepsuć.

MitchellK
źródło
jak szybko jest super szybko?
James Kirkby
@James Kirkby Wyślę później dokładną specyfikację serwera, teraz poza biurem. Używam wszystkiego w kontenerach Proxmox. Mój serwer internetowy i moje 16 stron WordPress mają 91-96 na Google Pagespeed i zawsze ciągle poprawiam i optymalizuję.
MitchellK,
@JamesKirkby Ma 2 x 6 rdzeniowych procesorów i 64 GB pamięci RAM z systemem Ubuntu 14.04, Apache 2.4.7 i PHP-FPM. Jest to mała bestia godna uwagi, jestem zachwycona jej wydajnością.
MitchellK,