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-version | 7.6 (1810) |
|---|---|
| Apache-version | 2.4.6 |
Innehållsförteckning
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".
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.
#ServerName www.example.com:80
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
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"
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.
<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.
