client client HTTP Apache HTTP Server Sockets TCP/IP Communication Service Signals: - stop (TERM) - restart (HUP) Signals: stop now / - grc.rst.(USR1) laTter (HUhP/USR1e) Apache Files Documents MoChild dServere 1 ling Admin ProChildj Seerver 2ct Master Scripts Server Files local global config. data config. Child Server N (.htacess) data Bernhard Gröne Andreas Knöpfel Scoreboard Rudolf Kugel server status generation ... shared generation Oliver Schmidt memory FMC January 24, 2008 ii FMC BernhardGröne,AndreasKnöpfel,RudolfKugel,OliverSchmidt: TheApacheModelingProject FMC http://www.fmc-modeling.org ThisdocumentcanbefoundattheFundamentalModelingConceptsProjectwebsite: HTML:http://www.fmc-modeling.org/projects/apache PDF: http://www.fmc-modeling.org/download/projects/apache/the_apache_modelling_project.pdf Thanksto: Robert Mitschke and Ralf Schliehe–Diecks for preparing and editing material for this docu- ment. Copyright(c)2002–2004BernhardGröne,AndreasKnöpfel,RudolfKugel,OliverSchmidt. Permission is granted to copy, distribute and/or modify this document under the terms of theGNUFreeDocumentationLicense,Version1.2oranylaterversionpublishedbytheFree Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in appendix D entitled "GNU Free Documentation License". Abstract This document presents an introduction to the Apache HTTP Server, covering both an overview and implementation details. It presents results of the Apache Modelling Project done by research assistants and students of the Hasso–Plattner–Institute in 2001, 2002 and 2003. The Apache HTTP Server was used to introduce students to the application of the modeling technique FMC, a method that supports transporting knowledge about complex systemsinthedomainofinformationprocessing(softwareandhardwareaswell). After an introduction to HTTP servers in general, we will focus on protocols and web tech- nology. ThenwewilldiscussApache,itsoperationalenvironmentanditsextensioncapabil- ities—themoduleAPI.FinallywewillguidethereaderthroughpartsoftheApachesource codeandexplainthemostimportantpieces. Contents 1 Introduction 1 1.1 Aboutthisdocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 TheFMCPhilosophy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3 Themodelingproject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 SourcesofInformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 HTTPServers 4 2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2 TasksofanHTTPServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3 ProtocolsandStandards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.1 RFCsandotherstandardizationdocuments . . . . . . . . . . . . . . . . 7 2.3.2 TCP/IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.3 DomainNameService(DNS) . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3.4 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4 AccessControlandSecurity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.4.1 Authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.4.2 Authenticationmethods . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.4.3 HTTPSandSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.5 SessionManagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.5.1 HTTP—astatelessprotocol . . . . . . . . . . . . . . . . . . . . . . . . 23 2.5.2 Keepthestate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.6 DynamicContent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.6.1 Server–sideScripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3 TheApacheHTTPServer 27 3.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.1.1 History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.1.2 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 ii FMC CONTENTS iii 3.2 UsingApache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2.1 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.2.2 Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.3 ExtendingApache: ApacheModules . . . . . . . . . . . . . . . . . . . . . . . 35 3.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.3.2 TypesofHandlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.3.3 ContentHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.3.4 Apache2Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.3.5 PredefinedHooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.3.6 InsideaModule: mod_cgi . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.3.7 TheApacheAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4 InsideApache 53 4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.2 StructureoftheSourceDistribution . . . . . . . . . . . . . . . . . . . . . . . . 54 4.2.1 Apache1.3.17sourcedistribution . . . . . . . . . . . . . . . . . . . . . . 54 4.2.2 Apache2.0.45sourcedistribution . . . . . . . . . . . . . . . . . . . . . . 55 4.3 Multitaskingserverarchitectures . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.3.1 Inetd: Acommonmultitaskingarchitecture . . . . . . . . . . . . . . . 56 4.3.2 Overview—ApacheMultitaskingArchitectures . . . . . . . . . . . . . 58 4.3.3 ThePreforkingMultiprocessingArchitecture . . . . . . . . . . . . . . 58 4.3.4 ApacheMultitaskingArchitecturesandMPMs . . . . . . . . . . . . . . 73 4.3.5 Win32/WinNTMPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.3.6 WorkerMPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.3.7 OthersMPMs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.4 TheRequest–ResponseLoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.4.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.4.2 Waitingforconnectionrequests . . . . . . . . . . . . . . . . . . . . . . . 80 4.4.3 WaitingforandreadingHTTPrequests . . . . . . . . . . . . . . . . . . 82 4.4.4 ProcessHTTPRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 4.5 TheConfigurationProcessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.5.1 WhereandwhenApachereadsconfiguration . . . . . . . . . . . . . . 85 4.5.2 Internaldatastructures . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.5.3 Processingglobalconfigurationdataatstart–up . . . . . . . . . . . . . 89 4.5.4 Processingconfigurationdataonrequests . . . . . . . . . . . . . . . . 94 iv CONTENTS FMC 4.6 Memoryandresourcemanagement: ApachePools . . . . . . . . . . . . . . . . 98 4.6.1 Whyanothermemorymanagement . . . . . . . . . . . . . . . . . . . . 98 4.6.2 Thepoolstructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.6.3 ThepoolAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 A OperatingSystemConcepts 102 A.1 UnixProcesses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 A.1.1 fork() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 A.1.2 exec() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 A.1.3 wait()&waitpid() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 A.1.4 kill() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 A.2 SignalsandAlarms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 A.2.1 Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 A.2.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 A.3 Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 A.3.1 TCPvs. UDPPorts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 A.3.2 AsynchronousEvents . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 A.3.3 Socketsingeneral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 A.3.4 TCPSockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 A.3.5 UDPSockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 A.4 Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 A.4.1 Usingpipesforinterprocesscommunication . . . . . . . . . . . . . . . 110 A.4.2 STDIN,STDOUT,STDERR . . . . . . . . . . . . . . . . . . . . . . . . . 111 A.4.3 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 A.4.4 Namedpipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 A.5 Longjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 A.5.1 Concept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 A.5.2 ExampleLongjump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 A.5.3 Commonapplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 A.5.4 CommonPitfalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 B Sources 118 B.1 SimpleHTTPServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 FMC CONTENTS v C FundamentalModelingConcepts(FMC) 121 C.1 WhatisFMC? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 C.2 Compositionalstructuresandblockdiagrams . . . . . . . . . . . . . . . . . . . 122 C.2.1 Examplesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 C.2.2 Blockdiagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 C.3 DynamicstructuresandPetrinets . . . . . . . . . . . . . . . . . . . . . . . . . 123 C.3.1 Behaviorofdynamicsystems . . . . . . . . . . . . . . . . . . . . . . . . 123 C.3.2 Petrinets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 C.4 Valuerangestructuresandentityrelationshipdiagrams . . . . . . . . . . . . . 126 C.4.1 Structuredvaluesandtheirrelationships . . . . . . . . . . . . . . . . . 126 C.4.2 EntityRelationshipDiagrams . . . . . . . . . . . . . . . . . . . . . . . . 126 C.5 Levelsofabstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 C.5.1 High–levelstructures . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 C.5.2 Hierarchyofmodels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 C.5.3 Lower–levelstructures . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 C.6 WhatisspecialaboutFMC? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 D GNUFreeDocumentationLicense 131 Bibliography 135 Glossary 136 Index 139 List of Figures 2.1 Simplesystem(structureandbehavior) . . . . . . . . . . . . . . . . . . . . . . 5 2.2 BehaviorofasimpleHTTPserver . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3 EstablishingandfinishingaTCPconnection. . . . . . . . . . . . . . . . . . . 8 2.4 DNSZones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.5 ExampleofaHTTPRequest/Responsemessagepair . . . . . . . . . . . . . . 12 2.6 ValuestructureofaHTTPRequest/Response(overview) . . . . . . . . . . . . 12 2.7 ValuestructureofaHTTPRequest/Response(details) . . . . . . . . . . . . . 13 2.8 BasicAuthenticationprocess . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.1 TheApacheHTTPServerinitsenvironment . . . . . . . . . . . . . . . . . . . 28 3.2 ConfiguringtheApacheHTTPServerviaconfigurationfiles . . . . . . . . . . 30 3.3 Apache2Modulestructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.4 InteractionofCoreandModules . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.5 Apache2.0hookmechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 3.6 ApacheFilters: TheInput/Outputfilterchain . . . . . . . . . . . . . . . . . . 40 3.7 ApacheFilters: ABrigadecontainsaseriesofbuckets . . . . . . . . . . . . . . 41 3.8 ApacheFilters: AFilterchainusingBrigadesfordatatransport . . . . . . . . 41 3.9 Apacherequest–responseloopwithmodulecallbacks . . . . . . . . . . . . . 44 3.10 Apacherequestprocessingwithmodulecallbacks . . . . . . . . . . . . . . . . 45 4.1 DirectorystructureoftheApacheHTTPServer1.3.17sourcedistribution . . . 54 4.2 DirectorystructureoftheApacheHTTPServer2.0.45sourcedistribution . . . 55 4.3 MultiprocessingArchitectureofaninetdserver . . . . . . . . . . . . . . . . . . 56 4.4 Behaviorofamultiprocessingserver . . . . . . . . . . . . . . . . . . . . . . . . 57 4.5 Theleader–followerspatternusedinthepreforkingserverarchitecture . . . . 59 4.6 TheApache2.0PreforkingMPM . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.7 Overview: ThebehaviorofApache . . . . . . . . . . . . . . . . . . . . . . . . 61 4.8 DetailsofthebehaviorofApache . . . . . . . . . . . . . . . . . . . . . . . . . 63 vi FMC LISTOFFIGURES vii 4.9 TheMasterServerLoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.10 ResponsibilityofanApache2.0MPM . . . . . . . . . . . . . . . . . . . . . . . 74 4.11 TheApache2.0WinNTMPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4.12 TheApache2.0WorkerMPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.13 TheRequest–ResponseLoop . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 4.14 Processingofarequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.15 ConfigurationprocessingcomponentsofApache . . . . . . . . . . . . . . . . 85 4.16 PointsintimewhenApachereadsconfiguration . . . . . . . . . . . . . . . . . 86 4.17 Apachedatastructuresconcerningconfiguration . . . . . . . . . . . . . . . . 87 4.18 Apacheconfigurationdatastructuresindetail . . . . . . . . . . . . . . . . . . 88 4.19 Structureoftheconfigurationprocessor(focusingonthedataflow) . . . . . . 90 4.20 Readingconfigurationdata: Layeringoffunctioncalls . . . . . . . . . . . . . 91 4.21 Processingconfigurationfileswithsectiondirectives . . . . . . . . . . . . . . 93 4.22 Structureoftheper–requestconfigurationprocessor: Thewalkprocedures . 95 4.23 Thedirectorywalk(withouterrorhandling) . . . . . . . . . . . . . . . . . . . 96 4.24 Hierarchyofbuilt-inApachePools . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.25 LinkedListofBlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 A.1 MultiprocessingandMultithreading . . . . . . . . . . . . . . . . . . . . . . . . 102 A.2 Internalsofthefork()systemcall . . . . . . . . . . . . . . . . . . . . . . . . . . 104 A.3 Basicconceptofsockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 A.4 Communicationviasockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 A.5 Dialupandconnectionsockets . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 A.6 Socketsandports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 A.7 Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 A.8 longjmpbehaviour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 A.9 Stackcontentbeforecallinglongjmp()intheexampleabove . . . . . . . . . . 115 A.10 Callinglongjmp()cancauseerrorswhenusedwithoutcaution . . . . . . . . . 116 C.1 Blockdiagram: Travelagencysystem . . . . . . . . . . . . . . . . . . . . . . . 122 C.2 Petrinet: Buyingaticket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 C.3 Entityrelationshipdiagram: Tourreservations . . . . . . . . . . . . . . . . . . 126 C.4 Blockdiagram: Travelagencysystem . . . . . . . . . . . . . . . . . . . . . . . 129 D.1 FMCBlockDiagrams(Part1: Example) . . . . . . . . . . . . . . . . . . . . . . 143 D.2 FMCBlockDiagrams(Part2: Description) . . . . . . . . . . . . . . . . . . . . 144 viii LISTOFFIGURES FMC D.3 FMCEntity/RelationshipsDiagrams(Part1: Example) . . . . . . . . . . . . . 145 D.4 FMCEntity/RelationshipsDiagrams(Part2: Description) . . . . . . . . . . . 146 D.5 FMCPetriNets(Part1: Basiccomponents) . . . . . . . . . . . . . . . . . . . . 147 D.6 FMCPetriNets(Part2: BasicExample) . . . . . . . . . . . . . . . . . . . . . . 148 D.7 FMCPetriNets(Part3: Advancedfeatures) . . . . . . . . . . . . . . . . . . . 149 D.8 FMCPetriNets(Part4: AdvancedExample) . . . . . . . . . . . . . . . . . . . 150
Description: