HTTPD - Webbservern Apache2

Apache is the most commonly used Web Server on Linux systems. Web Servers are used to serve Web Pages requested by client computers. Clients typically request and view Web Pages using Web Browser applications such as Firefox, Opera, or Mozilla.

Users enter a Uniform Resource Locator (URL) to point to a Web server by means of its Fully Qualified Domain Name (FQDN) and a path to the required resource. For example, to view the home page of the Ubuntu Web site a user will enter only the FQDN. To request specific information about paid support, a user will enter the FQDN followed by a path.

Det vanligaste protokollet för att överföra webbsidar är Hyper Text Transfer Protocol (HTTP). Andra protokoll som Hyper Text Transfer Protocol over Secure Sockets Layer (HTTPS) och File Transfer Protocol (FTP), ett protokoll för att ladda upp och ner filer, stödjs också.

Apachewebbservrar används ofta tillsammans med databasen MySQL, skriptspråket HyperText Preprocessor (PHP) och andra populära skriptspråk som application>Python

Installation

Webbservern Apache2 finns tillgänglig i Ubuntu Linux. För att installera Apache2:

  • Vid en terminalprompt, skriv följande kommando:

    sudo apt-get install apache2
    

Konfiguration

Apache konfigureras genom att man skriver direktiv i vanliga textfiler. Huvudkonfigurationsfilen heter apache2.conf. Det går dessutom att lägga till fler konfigurationsfiler med direktivet Include, och jokertecken går att använda för att lägga till många konfigurationstecken. Alla direktiv går att placera i vilken konfigurationsfil som hellst. Ändringar i huvudkonfigurationsfiler upptäcks inte av Apache2 förrän det startas eller startas om.

Servern läser också en fil som innehåller mimtyper för dokument; filnamnen sätts med direktivet TypesConfig är normalt mime.types.

Standardkonfigurationsfilen för Apache2 är /etc/apache2/apache2.conf. Du kan ändra på den här filen för att konfigurera Apache2-servern. Du kan ställa in portnummret, dokumentroot, moduler, loggfiler, virtuella värdnamn, mm.

Grundläggande inställningar

Den här avdelningen förklarar Apache2-serverns viktigaste konfigurationsparametrar. Läs Apache2:s dokumentation för fler detaljer.

  • Med Apache2 följer en standardkonfiguration som är väldigt smidig för virtuella värdnamn. Från början finns det ett enda virtuellt standardvärdnamn (använder direktivet VirtualHost) som kan modifieras eller användas som det är om du bara har en enda webbplats, eller användas som en mall för ytterligare virtuella värdnamn om du har flera webbplatser. Om du lämnar det ifred kommer det virtuella standardvärdnamnet att vara din standardsida, det vill säga den sidan användare kommer att se om de skriver in en URL som inte matchar något ServerName-direktiv i någon av dina andra webbplatser. För att ändra på det virtuella standardvärdnamnet, ändra på filen /etc/apache2/sites-available/default. Om du vill konfigurera ett nytt virtuellt värdnamn kan du kopiera den filen till samma katalog med valfritt namn. Till exempel: sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/min_nya_webbplats Ändra på den nya filen för att ställa in den nya webbplatsen med några av de direktiv som beskrivs nedan.

  • Direktivet ServerAdmin specificerar administratörens e-postadress. Standardvärdet är webmaster@localhost. Du bör ändra det till en adress du faktiskt har tillgång till (om du är serveradministratören) Om din webbsida har ett problem kommer Apache2 att visa ett felmeddelande som innehåller den här e-postadressen för att rapportera felet till. Du hittar det här direktivet i din webbplats konfigurationsfil i /etc/apache2/sites-available.

  • Direktivet Listen berättar vilken port, och eventuellt också IP-adress, som Apache2 ska lyssna på. Om ingen IP-adress väljs kommer Apache2 att lyssna på alla IP-adresser som tillhör datorn det ligger i. Standardvärdet för Listen är 80. Ändra det här till 127.0.0.1:80 för att få Apache2 att enbart lyssna på loopback-gränssnittet så att det inte är tillgänglig för internet, till (till exempel) 81 för att ändra porten som det lyssnar på, eller lämna det som det är för att det ska bete sig normalt. Det här direktivet hittar du och kan ställa in i en egen fil, /etc/apache2/ports.conf

  • Direktivet ServerName är valfritt och bestämmer vilken FQDN din webbplats ska svara till. Den virtuella värd som medföljer har inget ServerName specificerat, så den kommer svara till alla förfrågningar som inte matchar någon annan virtuell värds ServerName. Om du just köpte domännamnet ubunturocks.com och vill använda det på din Ubuntu-server skriver du in värdet ubunturocks.com till direktivet ServerName. Lägg det här direktivet till den nya virtuella värdfilen du skapade innan (/etc/apache2/sites-available/min_nya_webbplats).

    [Tips]

    Du kanske också vill att din webbplats ska lyssna på www.ubunturocks.com, eftersom många användare kommer att anta att de behöver skriva www. Använd ServerAlias för det här. Du kan också använda jokertecken i ServerAlias-direktivet. Till exempel kommer ServerAlias *.ubunturocks.com att få din webbplats att lyssna på alla domänförfrågningar som slutar med .ubunturocks.com.

  • Direktivet DocumentRoot bestämmer var Apache ska titta efter de filer webbplatsen består av. Standardvärdet är /var/www. Ingen webbplats är konfigurerad där, men om du avkommenterar direktivet RedirectMatch i /etc/apache2/apache2.conf så kommer alla förfrågningar att vidarebefodras till /var/www/apache2-default där Apache2:s standardwebbplats väntar. Ändra det här värdet i din webbplats virtuella värdfil och kom ihåg att skapa katalogen i fråga om det behövs!

[Tips]

Katalogen /etc/apache2/sites-available kommer inte att läsas in av Apache2. Symboliska länkar i /etc/apache2/sites-enabled pekar till "tillgängliga" webbplatser. Använd verktyget a2ensite (Apache2 Enable Site) för att skapa dessa symboliska länkar såhär: sudo a2ensite min_nya_webbplats. På samma sätt kan du använda a2dissite för att inaktivera webbplatser.

Standardinställningar

Den här avdelningen förklarar konfigurationen av Apache2:s serverinställningar. Till exempel, om du lägger till en virtuell värd kommer inställningarna du konfigurerar att prioriteras över standardinställningarna för den virtuella värden. För de direktiv som inte specificeras i inställningarna för den virtuella värden kommer standardvärdet att användas.

  • DirectoryIndex är standardsidan som servern skickar när en användare ber om ett index för en katalog genom att lägga till ett snedsträck (/) på slutet av katalognamnet.

    När användaren till exempel frågar om sidan http://www.exempel.com/den_har_katalogen/ kommer han eller hon få DirectoryIndex-sidan om den finns, en server-genererad innehållslista om den inte finns och Indexes-alternativet är specificerat, eller en "Permission Denied"-sida om varken eller är sant. Servern kommer att försöka tills den hittar en av de filerna som finns uppradade i DirectoryIndex-direktivet och kommer att returnera den första den hittar. Om den inte hittar någon av dessa filer och om Options Indexes är på för den katalogen kommer servern att returnera en lista i HTML-format över underkatalogerna och filerna i den katalogen. Standardvärdet, som du hittar i /etc/apache2/apache2.conf, är "index.html index.cgi index.pl index.php index.xhtml". Med andra ord kommer Apache2 att visa den första filen som matchar något av dessa namn som finns i den efterfrågade katalogen.

  • Direktivet ErrorDocument låter dig specificera en fil åt Apache för att använda vid vissa felhändelser. Till exempel, om användaren efterfrågar en resurs som inte finns kommer ett 404-fel att uppstå, och enligt Apache2:s standardkonfiguration kommer filen /usr/share/apache2/error/HTTP_NOT_FOUND.html.var att visas. Den filen ligger inte i serverns DocumentRoot, men det finns ett Alias-direktiv i /etc/apache2/apache2.conf som vidarebefodrar förfrågningar till katalogen /error till /usr/share/apache2/error/. För att se en lista över standarddirektiven för ErrorDocument, använd det här kommandot: grep ErrorDocument /etc/apache2/apache2.conf

  • Servern loggar normalt alla överföringar till filen /var/log/apache2/access.log. Du kan ändra det här för varje webbplats i dina konfigurationsfiler för virtuella värdar med direktivet CustomLog, eller hoppa över det för att acceptera standardvärdet som bestäms i /etc/apache2/apache2.conf. Du kan också välja vilken fil felmeddelanden ska loggas till med direktivet ErrorLog. Standardplatsen för felmeddelanden är /var/log/apache2/error.log. De här sparas separat från överföringsloggarna för att underlätta felsökning av din Apache2-server. Du kan också välja LogLevel (standardvärdet är "warn") och LogFormat (se /etc/apache2/apache2.conf för standardvärdet).

  • Vissa alternativ specificeras för varje katalog och inte för hela servern. Option är ett av dessa direktiv. En katalogavdelning är insluten i XML-liknande taggar, såhär:

                      
                        <Directory /var/www/mynewsite>
    				...
    			</Directory>
                      
                    

    Options-direktivet i en katalogavdelning accepterar en eller fler av följande värden (bland annat). De avgränsas med mellanslag:

    • ExecCGI - Tillåt att CGI-skript körs. CGI-skript körs inte om inte det inte skrivs.

      [Tips]

      De flesta filerna bör inte exekveras som CGI-skript. Det skulle vara väldigt farligt. CGI-skript bör ligga i en egen katalog som är skild från, och utanför, din DocumentRoot, och bara den här katalogen ska ha ExecCGI-alternativet aktiverat. Såhär ser standardinställningen ut, och standardplatsen för CGI-skript är /usr/lib/cgi-bin.

    • Includes - Tillåt serverinkluderingar (SSI). Serverinkluderinger tillåter att en HTML-fil inkluderar andra filer. Det här är ganska ovanligt. Läs Apache2:s SSI-HOWTO för mer information.

    • IncludesNOEXEC - Tillåter serverinkluderingar, men avaktiverar kommandona #exec och #include i CGI-skript.

    • Indexes - Visa en formaterad lista över katalogens innehåll om ingen DirectoryIndex-fil (som till exempel index.html) finns i den efterfrågade katalogen.

      [Observera]

      Av säkerhetsskäl är det här oftast inte aktiverat, och bör framförallt inte vara aktiverat i din DocumentRoot-katalog. Aktivera det här valet försiktigt, och bara för de kataloger där du vet att användarna vill se hela innehållet i katalogen.

    • Multiview - Stöd för "content-negotiated multiviews". Den här möjligheten är normalt avstängd av säkerhetsskäl. Läs Apache2-dokumentationen om den här värdet.

    • SymLinksIfOwnerMatch -Följ bara symboliska länkar om målfilen eller -katalogen har samma ägare som länken.

Inställningar för virtuella värdar

Virtuella värdar låter dig köra flera servrar för olika IP-adresser, olika värdnamn, eller olika portar på samma dator. Till exempel kan du ha en webbplats för http://www.exempel.com och http://www.annatexempel.com på samma webbserver med virtuella värdar. Det här alternativet motsvarar direktivet <VirtualHost> för normala virtuella värdar och IP-baserade virtuella värdar. För namnbaserade virtuella värdar används istället <NameVirtualHost>

De direktiv som skrivs inuti en virtuell värd gäller bara just den virtuella värden. Om ett direktiv sätts för hela servern men inte i inställningarna för den virtuella värden kommer standardinställningen att användas. Till exempel kan du definiera en e-postadress för webbmastern så att du slipper definiera individuella e-postadresser för varje virtuell värd.

Sätt direktivet DocumentRoot till katalogen som innehåller huvuddokumentet för den virtuella värden (t ex index.html). Standardvärdet för det är /var/www.

The ServerAdmin directive within the VirtualHost stanza is the email address used in the footer of error pages if you choose to show a footer with an email address on the error pages.

Serverinställningar

Den här avdelningen förklarar hur du konfigurerar grundläggande serverinställningar.

LockFile - Direktivet LockFile ställer in sökvägen till låsfilen som används om servern är kompilerad med antingen USE_FCNTL_SERIALIZED_ACCEPT eller USE_FLOCK_SERIALIZED_ACCEPT. Det måste vara på en lokal hårddisk. Det bör inte ändras från standardvärdet om inte loggfilerna ligger på en NFS-utdelning. Om så är fallet bör standardvärdet ändras till en plats på den lokala hårddisken och till en katalog som bara root får läsa.

PidFile - Direktivet PidFile ställer in filen som servern sparar sin process-ID (pid) till. Den här filen bör ingen annan än root kunna läsa. I de flesta fallen bör det här inte ändras från standardvärdet.

User - Direktivet User ställer in vilket användar-ID servern använder när den svarar på förfrågningar. Den här inställningen ställer in vilka rättigheter servern har. Alla filer den här användaren inte kommer åt kommer inte webbplatsens besökare komma åt. Standardvärdet för User är www-data.

[Varning]

Om du inte vet exakt vad du gör bör du inte sätta direktivet User till root. Att köra webbservern som root kommer att skapa stora säkerhetshål i din webbserver.

Direktivet Group är likt User. Group ställer in vilken grupp webbservern körs som. Standardgruppen är också www-data.

Apachemoduler

Apache är en modulär server. Det medför att bara den mest grundläggande funktionaliteten följer med standardservern. Ytterligare funktioner finns tillgängliga med moduler som kan laddas in i Apache. Normalt kompileras en mindre uppsättning moduler in i servern. Om servern är kompilerad för att använda dynamiskt laddade moduler kan moduler kompileras separat och läggas till när som hellst till direktivet LoadModule. Om inte, så måste Apache kompileras om för att lägga till eller ta bort moduler. Ubuntu kompilerar Apache2 för att tillåta att moduler laddas dynamiskt. Konfigurationsdirektiv går att lägga till för en speciell modul genom att lägga in dessa i ett <IfModule>-block. Du kan installera extra Apache2-moduler och använda dessa med din webbserver. Du kan installera Apache2-moduler med kommandot apt-get. Till exempel kör du följande kommando i en terminalprompt för att installera Apache2-modulen för MYSQL-autentisering:

sudo apt-get install libapache2-mod-auth-mysql

När du installerar modulen blir den tillgänglig i katalogen /etc/apache2/mods-available. Du kan använda kommandot a2enmod för att aktivera en modul. Du kan använda kommandot a2dismod för att avaktivera en modul. När du har aktiverat modulen blir den tillgänglig i katalogen /etc/apache2/mods-enabled.

Konfiguration av HTTPS

Modulen mod_ssl lägger till en viktig funktion till Apache2-servern - möjligheten att kryptera kommunikation. När din webbläddrare använder SSL-kryptering används prefixet https:// i början av URL:en i webbläddrarens navigationsrad.

Modulen mod_ssl finns i paketet apache2-common. Om du har installerat det paketet kan du köra följande kommando i en terminalprompt för att aktivera modulen mod_ssl:

sudo a2enmod ssl

Certifikat och säkerhet

För att göra din webbserver säker bör du använda ett nyckelpar med en publik och en privat nyckel för kryptering. I de flesta fallen skickar du ditt certifikat (tillsammans med din publika nyckel), bevis på att ditt företag är det det är, och en betalning till en Certificate Authority (CA). CA:n bekräftar förfrågningen om certifikatet och din identitet, och skickar sedan tillbaka ett certifikat för din säkra server.

Du kan även använda ett certifikat du har signerat själv. Notera dock att självsignerade certifikat inte bör användas i produktionsmiljöer. Självsignerade certifikat accepteras inte automatiskt av din användares webbläsare. Användare får en fråga av webbläddraren om de vill acceptera certifikatet och skapa den säkra anslutningen.

När du har ett självsignerat certifikat eller ett signerat certifikat från den CA du väljer måste du installera det på din säkra server.

Typer av certifikat

Du behöver en nyckel och ett certifikat för att sköta din säkra server, vilket innebär att du antingen genererar ett självsignerat certifikat eller köper ett CA-signerat certifikat. Ett CA-signerat certifikat ger två viktiga möjligheter för din server:

  • Webbläddrare känner (oftast) automatiskt igen certifikatet och tillåter en säker anslutning utan att först fråga användaren.

  • När en CA ger ut ett signerat certifikat garanterar den identiteten på organisationen som ger webbsidor till webbläddraren.

De flesta webbläddrare som stödjer SSL har en lista över de CA:er vars certifikat de automatiskt accepterar. Om en webbläddrare stöter på ett certifikat som signerats av en CA som inte står med i listan frågar webbläddraren användaren om den vill acceptera eller neka anslutningen.

Du kan skapa ett självsignerat certifikat för din säkra server, men tänk på att ett självsignerat certifikat inte ger dig samma funktionalitet som ett CA-signerat certifikat. Ett självsignerat certifikat ger inga garantier om identiteten på organisationen som tillhandahåller webbplatsen. Ett CA-signerat certifikat erbjuder båda dessa viktiga möjligheterna för en säker server. Processen för att få ett certifikat från en CA är ganska enkel. En snabb överblick ser ut såhär:

  1. Skapa ett krypteringsnyckelpar bestående av en privat och en publik nyckel.

  2. Skicka en förfrågan om ett certifikat baserat på den publika nyckeln. Certifikatet innehåller information om din server och företaget som äger den.

  3. Skicka certifikatförfrågan, tillsammans med dokument som bevisar din identitet, till en CA. Vi kan inte berätta vilken CA du ska välja. Ditt beslut kan vara baserat på tidigare erfarenheter, vad dina vänner eller kollegor har erfarit, eller helt enkelt på monetära faktorer.

    När du har bestämt dig för vilken CA du vill använda måste du följa instruktionerna de har för hur du får ett certifikat från dem.

  4. När din CA anser att du har bevisat att du är den du påstår dig vara skickar de dig ett digitalt certifikat.

  5. Installera det här certifikatet på din säkra server, och aktivera säkra överföringar.

Oavsett om du vill skaffa dig ett certifikat från en CA eller skapa ditt eget självsignerade certifikat är det första steget att skapa en nyckel.

Skapa ett Certificate Signing Request (CSR)

För att skapa ett Certificate Signing Request (CSR) bör du först skaffa dig en egen nyckel. Du kan köra följande kommando i en terminalprompt för att skapa nyckeln:

openssl genrsa -des3 -out server.key 1024

Generating RSA private key, 1024 bit long modulus
.....................++++++
.................++++++
unable to write 'random state'
e is 65537 (0x10001)
Enter pass phrase for server.key:

Du kan nu skriva in ditt lösenord. För bästa säkerhet bör det vara minst åtta tecken. Minimilängden när man skriver -des3 är fyra tecken. Det bör innehålla siffror och/eller skiljetecken och inte vara ett ord från en ordbok. Kom också ihåg att lösenordet är skiftlägeskänsligt.

Skriv in lösenordet igen för att verifiera det. När du har skrivit in samma lösenord två gånger genereras servernyckeln och sparas i filen server.key.

[Varning]

Du kan också köra din säkra webbserver utan någon lösenordsfras. Det här är smidigt eftersom du inte behöver skriva in lösenordet varje gång du startar din säkra webbserver. Men det är högst osäkert och om någon kommer över din nyckel innebär det att de även kommer åt servern.

I vilket fall kan du välja att köra din webbserver utan lösenordsfras genom att inte skriva -des3 när du skapar nyckeln eller genom att skriva följande kommando i en terminalprompt:

openssl rsa -in server.key -out server.key.insecure

När du har kört kommandot ovan kommer den osäkra nyckeln att sparas i filen server.key.insecure. Du kan använda den här filen för att skapa ditt CSR utan lösenordsfras.

För att skapa ditt CSR, kör följande kommando vid en terminalprompt:

openssl req -new -key server.key -out server.csr

Det kommer att fråga dig om lösenordet. Om du skriver in rätt lösenord kommer det att fråga dig om företagsnamn, webbplatsnamn, e-post, mm. När du har skrivit in alla uppgifterna kommer ett CSR att skapas och lagras i filen server.csr. Du kan skicka in den här CSR-filen till en CA för att behandling. CA:t kommer att använda den här CSR-filen och utfärda certifikatet. Du kan också skapa ett egensignerat certifikat med den här CSR-filen.

Skapa ett självsignerat certifikat

För att skapa ett självsignerat certifikat, kör följande kommando i en terminalprompt:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Ovastående kommando kommer att be dig skriva in lösenordet. När du har skrivit in rätt lösenordsfras kommer ditt certifikat att skapas och det kommer att lagras i filen server.crt.

[Varning]

Om din säkra server används i en produktionsmiljö behöver du troligen ett CA-signerat certifikat. Det är inte rekomenderat att använda självsignerade certifikat.

Installera certifikatet

Du kan installera nyckelfilen server.key och certifikatfilen server.crt eller den certifikatsfil din CA har gett dig genom att köra följande kommandon vid en terminalprompt:

sudo cp server.crt /etc/ssl/certs
sudo cp server.key /etc/ssl/private

Du bör lägga til följande fyra rader till filen /etc/apache2/sites-available/default eller konfigurationsfilen för din säkra virtuella värd. Du bör lägga dem i avdelningen VirtualHost. De bör lägas under raden DocumentRoot:

SSLEngine on

SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire

SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key

HTTPS bör lyssna på port 443. Du bör lägga till följande rad till filen /etc/apache2/ports.conf:

Listen 443

Komma åt servern

När du har installerat certifikatet måste du starta om din webbserver. Du kan köra följande kommando vid en terminalprompt för att starta om din webbserver:

sudo /etc/init.d/apache2 restart 

[Notera]

Du måste komma ihåg och skriva in lösenordet varje gång du startar din säkra webbserver.

Du kommer att bli frågad om att skriva in lösenordet. När du skriver in rätt lösenord kommer webbservern att startas. Du kan komma åt den säkra servern genom att skriva https://ditt_värdnamn/url/ i din webbläddrares adressfält.

Referenser

Apache2-dokumentation

Dokumentation för Mod SSL