2011-01-01 22 views
7

Dostaję dużo ruchu na moich stronach php, ale bez zestawu zmiennych $_SERVER['HTTP_HOST'].

Ten ruch przypomina 1 uderzenie na sekundę. Nie wiem, co to może być, ale dla zmniejszenia obciążenia serwera robie to na górze każdej strony PHP:

if (!isset($_SERVER['HTTP_HOST'])) 
    exit; 

Czy wiesz, co może być przyczyną tego? Czy można bezpiecznie wyjść, gdy HTTP_HOST nie jest ustawione?

Czy normalny użytkownik może odwiedzać moje strony bez ustawienia HTTP_HOST?

  • wersja PHP: 5.2.0-8
  • Apache: 2.2.3
+0

Czy masz jakieś statystyki? Jakie zasoby są wymagane? czym są adresy IP? cokolwiek innego - prawdopodobnie klienta użytkownika? –

+0

Na marginesie: "normalny" użytkownik prawdopodobnie użyje "normalnej" przeglądarki i wszyscy od dawna używają HTTP/1.1, a ta wersja wymaga nagłówka "Host: ...". Tak więc może się zdarzyć, że zwykły użytkownik uzyska dostęp do witryny bez nagłówka 'Host: ...', ale jest to naprawdę mało prawdopodobne. –

Odpowiedz

6

Mmm, może równie dobrze być "połączeniem manekina". Sprawdź, czy logujesz się do "wewnętrznego połączenia fikcyjnego", te są używane przez proces master apache do wysyłania zamówień do jego procesów potomnych (takich jak samobójstwo, lub musimy przeładować conf). Połączenia te są wykonywane w HTTP/1.0 bez zestawu HOST. 'Proste' rozwiązanie

http://wiki.apache.org/httpd/InternalDummyConnection

Tezy # $! "# Sh # f # ck * $! Połączeń robią dużo błędów wokół tam (cache rzeczy, nie HTTP/1.1, etc). One nie ma Twojej nazwy hosta opartej na Virtuahost obsługującej główną aplikację jako domyślny virtualhost. Zachowaj bardzo prosty domyślny virtualhost ze stroną "to działa" lub coś bardzo prostego "jeśli dostaniesz tę stronę możesz spróbować uzyskać przeglądarkę z HTTP/1.1 gdzieś wspiera ", jako statyczną stronę, wtedy cały ruch HTTP/1.0 lub osoby uzyskujące dostęp do serwera tylko za pomocą IP nie będą w twojej prawdziwej aplikacji

Być kompletnym Widziałem firmę w tym roku z kiepską usuwanie serwerów proxy nagłówek hosta z całego wychodzącego ruchu HTTP. Ale te złe rzeczy są głupie, nie sądzę, że wielu ludzi wciąż przegląda HTTP/1.0 bez hostów.

+0

exaclty, że ... w logu mam wewnętrzne połączenie fikcyjne. Problem dotyczy konfiguracji domeny Potrzebuję mojej głównej jako domyślnego wirtualnego hosta. – dynamic

+0

Sprawdź w google, istnieją pewne reguły use_ull mod_rewrite, aby zignorować połączenia typu "manekin" z apache i wyrzucić je przed prawdziwą obsługą żądania. – regilero

2

HTTP_HOST jest częścią żądania HTTP klienta i określa, który host nazwa żądanie ma być skierowane do. Konieczne jest odróżnienie właściwej witryny w konfiguracji wielu witryn.

Jeśli nie ustawiono HTTP_HOST, klient jest bardzo, bardzo stary (HTTP 1.0 nie obsługuje HTTP_HOST) lub wysłał żądanie bezpośrednio na adres IP twojej strony.

Nie widzę żadnej szkody w blokowaniu tego w taki sposób. Jeśli jednak martwisz się o ruch, rozsądniej będzie naprawić to na poziomie serwera WWW.

+2

To prawdopodobnie także dobry sposób na ich odróżnienie. Ale nagłówek 'Host:' był obsługiwany w HTTP 1.0, a wielu 1.0 klientów faktycznie go wysłało. Po prostu została ona * obowiązkowa * dla zgodności z protokołem HTTP 1.1, http://stackoverflow.com/questions/4032412/why-do-wget-has-host-header-in-its-http-request – mario

+0

@mario ah, wystarczająco uczciwe, dzięki! –

Powiązane problemy