Apache mod_expires konfiguracja

Aby umożliwić odwiedzającym nasze strony cachowanie obrazków (tak by nie musieli pobierać ich każdorazowo bo przecież nie zmieniają się aż tak często) konieczne jest ustawienie nagłówków: Cache-Control, Expires dla odpowiednich typów plików. W Apachem jest do tego dedykowany moduł - mod_expires. W Debianie dostarczany jest on bez domyślnej globalnej konfiguracji - a ja lubię gdy cacheuje mi się większość statyki. Zawsze można dostosować czas cachowania pod siebie względem określonego typu pliku, np. dla Java Scriptów ustawić na 1 dzień gdy często się zmieniają. Można też w samej aplikacji zmieniać ścieżkę do pliku by wymusić odświeżenie (lub podawać ścieżkę z jakimś losowym identyfikatorem wycinanym przez mod_rewrite). ...

2012-01-23 · 2 min · timor

X-Forwarded-For + mod_rpaf - logowanie rzeczywistych adresów IP na Apache za reverse proxy

Gdy już ustawimy reverse proxy przed Apache szybko można zauważyć że w logach zamiast adresów IP zdalnych użytkowników pojawia się tylko jeden adres: adres naszego proxy. Również z poziomu php’a jako adres klienta widać IP naszego proxy. By poradzić sobie z tym problemem trzeba na serwerze reverse proxy ustawić przekazywanie informacji o oryginalnym adresie IP klienta w nagłówku X-Forwarded-For. W przypadku gdy reverse proxy działa na nginx’e wystarczy dodać taki wpis: ...

2011-11-28 · 1 min · timor

Porównanie optymalizatorów PHP - eAccelerator, PHP APC, XCache

Przez pewien czas korzystałem z eAcceleratora do przyspieszenia działania stron pisanych w PHP’ie ale czasem bywał niestabilny. Aktualizacje pojawiały się rzadko a od czasu do czasu miewałem problemy ze stabilnością tej wtyczki na kilku bardziej skomplikowanych aplikacjach. Zdarzało się że pomimo zmiany kodu w skrypcie php, eAccelerator serwował wciąż stary plik - konieczny był restart Apache’go by wszystko działało jak trzeba. Zacząłem szukać alternatywy i trafiłem na dwa moduły: APC  external link (czyli Alternative PHP Cache), który ma być nawet domyślnie wbudowany w PHP od wersji 5.4, XCache  external link - projekt rozwijany przez jednego z programistów lighttpd. Byłem ciekaw wydajności poszczególnych rozwiązań względem siebie, więc przygotowałem małe środowisko testowe składające się z 4 maszyn wirtualnych (działających pod kontrolą VirtualBox’a): ...

2011-11-02 · 6 min · timor

Zabezpieczenie Apachego na Debianie przed slowloris’em

Od jakiegoś czasu dostępny jest w sieci skrypt slowloris.pl  external link pozwalający z pojedynczego komputera wykonać atak DOS na zdalny serwer WWW. Atak polega na uruchomieniu wielu równoczesnych sesji i bardzo wolnym wysyłaniu komunikatów HTTP. Atakujący udaje “klienta z wolnym łączem” równocześnie uruchamiając kolejne sesje by po pewnym czasie zająć wszystkie dostępne. Serwer WWW przestaje wtedy odpowiadać na zapytania od innych klientów. Dodatkowo na źle wyskalowanych serwerach duża liczba procesów Apachego może spowodować swapowanie i błędy braku pamięci. ...

2011-09-12 · 3 min · timor

Optymalizacja PHP z eAccelerator’em

Przy okazji wykonywania kilku drobnych optymalizacji swojej stronki natknąłem się na eAccelerator’a. Ciekawy projekt, który w sposobie działania przypomina Zend Optimizer’a ale ma jedną zasadniczą zaletę - jest darmowy 😃 Niestety nie ma go w repozytoriach Debiana, więc trzeba go sobie skompilować - cały proces jest dość prosty. Zaczynamy od pobrania najświeższej paczki, obecnie jest to wersja 0.9.5.3: Pobierz eAccelerator  external link (ostatnio miałem problem z tym linkiem więc proponuję pogooglać) ...

2011-08-29 · 3 min · timor

Statystyki odwiedzin dla wielu serwisów z AWStats

Co prawda na swojej stronie zrobiłem kilka podstawowych statystyk i coś tam sobie loguję do bazy danych, ale gdyby się chwilę zastanowić to przecież to samo robi serwer www - wrzuca do logów każde zapytanie HTTP, kod błędu, nazwę agenta, itd. Dublowanie tych danych nie jest najbardziej optymalne. Stąd też chwilę pogooglałem i znalazłem świetny Open Source’owy projekt: AWStats, który jest webowym analizatorem logów dla serwerów HTTP, FTP i SMTP. ...

2011-08-29 · 5 min · timor

Klastrowanie sesji PHP z memcached

Klastrowanie to może zbyt dumnie powiedziane. Rozwiązanie to wyszukałem gdy chcąc skonfigurować dwa serwery apache do współpracy na rzecz jednego serwisu okazało się, że sejse trzymane są tylko przez jeden serwer a drugi nic o nich nie wie. To oczywiście nie pozwalało na prawidłowe działanie jakiegokolwiek serwisu korzystającego z sesji. Pomysł jest taki, że zastępujemy domyśny mechanizm przechowywania sesji w plikach na dysku mechanizmem memcache. Ponieważ memcached działa jako usługa sieciowa, różne serwery mogą się odwoływać do puli memcached i odczytywać zapisane w niej dane. W przypadku sesji - nie jest ważne, kto ją utworzył - bo po jej wysłaniu do puli memcached staje się dostępna dla wszystkich klientów php z niej korzystających. ...

2011-08-27 · 3 min · timor