Wpis „Listen 120” w pliku httpd.conf informuje serwer Apache, na jakim porcie ma nasłuchiwać przychodzących połączeń TCP. W praktyce oznacza to: jeżeli ktoś wchodzi na serwer, to ich przeglądarka łączy się z adresem IP serwera właśnie na ten numer portu. Standardowo HTTP działa na porcie 80, HTTPS na 443, ale w konfiguracji można ustawić dowolny inny port, np. 8080, 8000 czy właśnie 120. Dzięki dyrektywie Listen Apache „wiąże się” (binduje) z wybranym portem i zaczyna tam czekać na żądania HTTP. To jest podstawowy element konfiguracji warstwy sieciowej serwera WWW. W środowiskach produkcyjnych najczęściej stosuje się Listen 80 i Listen 443, czasem dodatkowe porty dla paneli administracyjnych, środowisk testowych albo aplikacji działających równolegle. Warto też wiedzieć, że można podać razem adres IP i port, np. Listen 192.168.0.10:80, wtedy Apache nasłuchuje tylko na konkretnym interfejsie sieciowym, co jest dobrą praktyką bezpieczeństwa, bo ogranicza ekspozycję usług. W nowoczesnych konfiguracjach często występuje kilka dyrektyw Listen, gdy serwer obsługuje wiele adresów IP lub protokołów. Z mojego doświadczenia porządek w portach i świadome używanie Listen bardzo ułatwia diagnostykę problemów typu „serwer nie odpowiada” czy konflikty z innymi usługami (np. innym serwerem WWW albo kontenerem Docker) działającymi na tej samej maszynie.
Dyrektywa „Listen 120” w konfiguracji Apache’a bywa mylona z różnymi innymi parametrami sieciowymi, ale w rzeczywistości ma jedno, dość konkretne znaczenie: określa numer portu, na którym serwer HTTP ma nasłuchiwać połączeń. Nie ma ona żadnego związku z poszczególnymi oktetami adresu IP. Adres IP składa się z czterech oktetów, ale są one zapisywane w formacie kropkowym, np. 192.168.0.120, i konfiguruje się je w systemie operacyjnym lub wirtualnym interfejsie sieciowym, a nie dyrektywą Listen. Czasem uczniowie patrzą na „120” i kojarzą to z ostatnim oktetem adresu, ale to skrót myślowy, który tutaj kompletnie nie pasuje. Innym typowym skojarzeniem jest powiązanie liczby z kodami odpowiedzi HTTP. Jednak kody statusu w protokole HTTP mają zdefiniowane zakresy: 1xx to odpowiedzi informacyjne, 2xx – sukces, 3xx – przekierowania, 4xx – błędy po stronie klienta, 5xx – błędy po stronie serwera. Kod 120 nie jest standardowym kodem odpowiedzi HTTP opisanym w specyfikacji RFC 7231 czy nowszych. Co ważne, kody odpowiedzi są wysyłane w treści protokołu HTTP, a nie konfigurowane w ten sposób w httpd.conf. Pojawia się też czasem przekonanie, że taka liczba mogłaby oznaczać limit jednoczesnych połączeń. Limity połączeń, procesów czy wątków w Apache’u definiuje się jednak innymi dyrektywami, zależnie od użytego MPM (np. MaxRequestWorkers, ServerLimit, ThreadsPerChild). Listen nie ustawia żadnych ograniczeń wydajnościowych, tylko określa punkt wejścia do usługi – numer portu i ewentualnie adres IP. Mylenie tych pojęć wynika moim zdaniem z mieszania warstwy transportowej (port, TCP) z logiką aplikacji (kody błędów) i parametrami wydajności. Dobra praktyka w administracji serwerem to wyraźne rozróżnianie: port = gdzie nasłuchuje serwer, kody HTTP = jak odpowiada na żądania, limity = ile ruchu jest w stanie obsłużyć równocześnie.