Installera Apache HTTP Server säkert på CentOS


Publicerad:

Uppdaterad:


Tekniska artiklar > Installera Apache HTTP Server säkert på CentOS

Status 2026 och säker användning

Slutsats: Installera det paketerade httpd på ett RHEL-kompatibelt system som stöds. Validera konfigurationen före omladdning, öppna bara de brandväggstjänster som behövs och behåll SELinux aktivt med korrekta kontexter och policyinställningar.

Det här går artikeln igenom

  • Hur paketinstallation, tjänsten httpd, konfigurationsvalidering och brandvägg hänger ihop.
  • Hur loggkataloger, filbehörigheter och SELinux-kontexter påverkar driften.
  • Vilka delar av den äldre CentOS 7-proceduren som måste anpassas på en aktuell plattform.

Målgrupp: Linux-administratörer som installerar en grundläggande Apache HTTP Server eller anpassar en äldre driftinstruktion för CentOS.

Läge 2026: CentOS 7 har nått EOL. Använd genomgången som historisk referens, men följ aktuell dokumentation för RHEL och Apache, minimera antalet aktiva moduler, behåll SELinux i enforcing-läge och kör apachectl configtest före en kontrollerad omladdning.

Säkerhetsinformation: Kommandona och konfigurationsexemplen har inte testats på nytt i en aktuell produktionsmiljö. Kontrollera supportstatus, säkerhetskopior, åtkomstkontroller och återställning i en separat testmiljö innan de används.

Viktiga officiella källor

Översikt

Artikeln dokumenterar installation och grundkonfiguration av Apache HTTP Server i en äldre CentOS 7-miljö.

Originalmiljön använde följande versioner.

CentOS-version7.6 (1810)
Apache-version2.4.6

Innehållsförteckning

  1. Installation
  2. Grundkonfiguration
  3. Sammanfattning

1. Installation

Det här avsnittet beskriver den historiska installationen och den första startkontrollen.

1-1. Installera Apache

I den äldre CentOS-miljön installerades paketet httpd med yum och root-behörighet.

[username@hostname ~]$ su -
[root@hostname ~]# yum -y install httpd

1-2. Kontrollera start och HTTP-åtkomst

Paketinstallationen tillhandahåller apachectl. Originalproceduren använder verktyget för att starta Apache och kontrollera tjänstens status.

[root@hostname ~]# apachectl start
[root@hostname ~]# apachectl status
* httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-12-06 17:08:12 JST; 1s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1303 (httpd)
   Status: "Processing requests..."
   CGroup: /system.slice/httpd.service
           |-1303 /usr/sbin/httpd -DFOREGROUND
           |-1304 /usr/sbin/httpd -DFOREGROUND
           |-1305 /usr/sbin/httpd -DFOREGROUND
           |-1306 /usr/sbin/httpd -DFOREGROUND
           |-1307 /usr/sbin/httpd -DFOREGROUND
           `-1308 /usr/sbin/httpd -DFOREGROUND

Dec 06 17:08:11 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Dec 06 17:08:12 localhost.localdomain httpd[1303]: AH00558: httpd: Could not reliably determ...ge
Dec 06 17:08:12 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.

Statusraden "Active: active (running)" visar att tjänsten körs. Granska även eventuella varningar i utdata och validera konfigurationen.

För att nå servern utifrån måste rätt tjänst tillåtas i firewalld. Originalproceduren öppnar både HTTP och HTTPS permanent; i en verklig miljö ska endast de protokoll som faktiskt används exponeras.

[root@hostname ~]# firewall-cmd --permanent --add-service=http
[root@hostname ~]# firewall-cmd --permanent --add-service=https
[root@hostname ~]# firewall-cmd --reload
[root@hostname ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Kontrollera att de avsedda tjänsterna visas under "services". I originalmiljön verifierades testsidan på "http://192.168.50.10".

Apache HTTP Servers testsida

Originalproceduren stoppar tjänsten efter startkontrollen innan grundkonfigurationen fortsätter.

[root@hostname ~]# apachectl stop

2. Grundkonfiguration

2-1. Förbered loggkatalogen

Originalmiljön samlar Apache-loggar i katalogen /var/log/httpd.

Katalogen ges behörighet 755. Kontrollera dessutom ägare, grupp, loggrotation och SELinux-kontext; enbart numeriska filbehörigheter avgör inte om loggningen fungerar säkert.

Skapa inte katalogen på nytt om paketinstallationen redan har tillhandahållit den.

[root@hostname ~]# mkdir /var/log/httpd
[root@hostname ~]# chmod 755 /var/log/httpd

Sökvägarna för loggar ändras i ett senare avsnitt.

Steget ovan förbereder endast katalogen; det aktiverar inte någon ny loggdestination.

2-2. Domäninställning

ServerName anges i httpd.conf eller i en separat inkluderad konfigurationsfil. Värdnamnet ska motsvara miljöns DNS-namn; en lokal testmiljö kan använda ett internt namn som går att slå upp.

[root@hostname ~]# vi /etc/httpd/conf/httpd.conf

Ta bort kommentartecknet och ersätt exempelvärdet med miljöns avsedda ServerName.

httpd.conf【Före förändring】


#ServerName www.example.com:80

httpd.conf【efter ändringen】


ServerName domainname:80

2-3. Aktivera TLS-modulen och konfigurationen

Installera TLS-stöd så att servern kan erbjuda HTTPS. Krypterad transport skyddar innehåll och autentiseringsuppgifter mellan klienten och servern.

I den äldre CentOS-miljön installerades mod_ssl med yum.

[root@hostname ~]# yum -y install mod_ssl

Paketet aktiverar modulen och tillhandahåller /etc/httpd/conf.d/ssl.conf. Granska hela standardkonfigurationen och anpassa protokoll, chiffersviter och certifikatsökvägar efter den version som används.

2-4. Ändra sökvägarna för loggar

Ange den förberedda katalogen som destination för TLS-värdens fel-, åtkomst- och begäransloggar. Originalproceduren ändrar endast ssl.conf eftersom servern senare ska omdirigera all HTTP-trafik till HTTPS.

[root@hostname ~]# vi /etc/httpd/conf.d/ssl.conf


ssl.conf【Före förändring】


ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log

~förkortning~

CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


ssl.conf【efter ändringen】


ErrorLog /var/log/httpd/ssl_error_log
TransferLog /var/log/httpd/ssl_access_log

~förkortning~

CustomLog /var/log/httpd/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

Ändringen placerar de tre angivna loggarna under /var/log/httpd.


Direktiv som "%t" och "%h" styr loggformatet. Några vanliga formatsträngar är:

Referens:

• %T: tid för att behandla begäran, i sekunder

• %h: klientens värdnamn eller IP-adress; namnuppslagning beror på HostnameLookups

• %r: begäransraden

• %b: svarsstorlek i byte, exklusive HTTP-huvuden; "-" om inget innehåll skickades

• %D: tid för att behandla begäran, i mikrosekunder

• %>s: slutlig HTTP-statuskod

2-5. Skapa eller installera TLS-certifikat

Ett självsignerat certifikat kan användas i en avgränsad testmiljö där klienterna uttryckligen litar på certifikatet. En publik tjänst bör använda ett certifikat från en betrodd certifikatutfärdare.

Ett självsignerat certifikat ger inte automatiskt klienten en betrodd identitet. Krypteringen kan använda samma algoritmer, men utan en verifierad förtroendekedja kan klienten inte avgöra om den har anslutit till rätt server. För offentliga tjänster ska certifikatets namn, giltighet, förtroendekedja och automatiska förnyelse kontrolleras.

I den äldre paketkonfigurationen används sökvägarna /etc/pki/tls/certs/localhost.crt och /etc/pki/tls/private/localhost.key.

De anges med SSLCertificateFile och SSLCertificateKeyFile i /etc/httpd/conf.d/ssl.conf.


Historiskt exempel med ett självsignerat certifikat:

Följande OpenSSL-kommandon kördes som root i originalmiljön.

Kommandot "openssl req" frågar efter certifikatets ämnesuppgifter. Exemplet saknar flera krav som moderna klienter ställer, bland annat ett korrekt Subject Alternative Name, och ska därför inte kopieras oförändrat.

[root@hostname ~]# openssl genrsa > /etc/pki/tls/private/localhost.key
[root@hostname ~]# openssl req -new -key /etc/pki/tls/private/localhost.key > /etc/pki/tls/certs/localhost.csr
[root@hostname ~]# openssl x509 -req -signkey /etc/pki/tls/private/localhost.key < /etc/pki/tls/certs/localhost.csr > /etc/pki/tls/certs/localhost.crt

Historiskt exempel med en certifikatsigneringsbegäran:

Följande kommandon skapar en privat nyckel och en CSR. Skydda den privata nyckeln och följ certifikatutfärdarens aktuella krav.

[root@hostname ~]# openssl genrsa -out /etc/pki/tls/private/localhost.key 2048
[root@hostname ~]# openssl req -new -key /etc/pki/tls/private/localhost.key -out /etc/pki/tls/certs/localhost.csr

En CSR är inte ett servercertifikat. Skicka begäran till en betrodd certifikatutfärdare, installera det utfärdade certifikatet och hela kedjan och planera för automatisk förnyelse.

2-6. Omdirigera HTTP till HTTPS

Konfigurera en omdirigering så att en begäran via HTTP skickas vidare till motsvarande HTTPS-adress.

En omdirigering ger en tydligare användarupplevelse än att enbart neka all HTTP-trafik. Originalproceduren redigerar httpd.conf med root-behörighet.

[root@hostname ~]# vi /etc/httpd/conf/httpd.conf

Följande regel lades till sist i filen.

httpd.conf


<IfModule rewrite_module>
  RewriteEngine on
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

Regeln omdirigerar HTTP-begäran till samma värd och sökväg via HTTPS. I en publik miljö bör målvärden vara ett validerat, kanoniskt domännamn i stället för ett okontrollerat Host-huvud.

Villkoret "RewriteCond %{HTTPS} off" begränsar regeln till anslutningar som inte redan använder HTTPS.

Utan villkoret kan även HTTPS-begäranden omdirigeras igen och skapa en omdirigeringsslinga.

2-7. Kontrollera HTTPS-åtkomst

Starta Apache och kontrollera sedan att webbplatsen kan nås via HTTPS.

[root@hostname ~]# apachectl start

Originalmiljön använde adressen "http://192.168.50.10" för kontrollen.

Webbläsaren ska omdirigeras till "https://192.168.50.10". Kontrollera även certifikatvarningar, HTTP-status och att den avsedda sidan visas.

Efter kontrollen stoppades Apache i den historiska proceduren.

[root@hostname ~]# apachectl stop

2-8. Automatisk start

Apache ska normalt hanteras av systemd och starta automatiskt efter en omstart. Paketet httpd tillhandahåller redan en vendor-enhet; använd och anpassa den i första hand i stället för att skapa en parallell tjänst.

Originalartikeln skapar den egna enheten "apache.service" enligt följande.

[root@hostname ~]# touch /etc/systemd/system/apache.service
[root@hostname ~]# vi /etc/systemd/system/apache.service

Filen innehåller den bevarade konfigurationen nedan.

[Unit]
#Beskrivning.
Description=Apache
#Kontroll före och efter utförandet.
#Before=xxx.service
#After=xxx.service

[Service]
#Användar- och gruppbeteckning
User=root
Group=root
#När den är aktiverad, sätts statusen till Aktiverad.
Type=oneshot
RemainAfterExit=yes
#Starta, stoppa och ladda om.
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl restart

[Install]
#Motsvarande inställningar för Runlevel 3.
WantedBy=multi-user.target

Därefter aktiverades enheten med systemctl och systemd-konfigurationen lästes in på nytt.

[root@hostname ~]# systemctl enable apache
[root@hostname ~]# systemctl is-enabled apache
enabled
[root@hostname ~]# systemctl list-unit-files --type=service | grep apache
apache.service                                enabled
[root@hostname ~]# systemctl daemon-reload


3. Sammanfattning

Den historiska proceduren installerar httpd, öppnar brandväggen, anger ServerName, aktiverar mod_ssl och konfigurerar loggar och omdirigering till HTTPS.

På en aktuell plattform bör vendor-enheten för httpd användas, SELinux behållas aktivt och certifikat, TLS-policy, brandvägg och loggrotation hanteras som en sammanhållen driftkonfiguration.

Validera alltid konfigurationen och återställningsplanen i en separat miljö innan en produktionsserver laddas om.