Apache HTTP Server na CentOS: inštalácia a bezpečný štart


Dátum vydania:

Aktualizované:


Technické články > Apache HTTP Server na CentOS: inštalácia a bezpečný štart

Stav a bezpečné používanie v roku 2026

Záver: Na podporovanom systéme z rodiny RHEL nainštalujte balík httpd, pred opätovným načítaním overte konfiguráciu, vo firewalle otvorte iba potrebné služby a namiesto vypnutia SELinuxu nastavte správne kontexty a prepínače.

Čo sa naučíte

  • Ako spolu súvisia inštalácia balíka, spustenie služby, overenie konfigurácie a prístup zo siete.
  • Ako vlastný koreň dokumentov súvisí s prístupovými oprávneniami a kontextmi SELinux.
  • Ktoré príkazy CentOS 7 nižšie sú historické a vyžadujú ekvivalent podporovanej platformy.

Pre koho je to určené: Správcovia Linuxu, ktorí nasadzujú základný Apache HTTP Server alebo prenášajú starší prevádzkový postup z CentOSu.

Kontext v roku 2026: CentOS 7 už nie je podporovaný. Pôvodný návod slúži iba ako referencia; používajte DNF a aktuálnu dokumentáciu RHEL a Apache, ponechajte SELinux v režime Enforcing, obmedzte počet modulov a pred opätovným načítaním služby spustite apachectl configtest.

Bezpečnostná poznámka: Príkazy a príklady konfigurácie v pôvodnom článku neboli znovu spustené v aktuálnom produkčnom prostredí. Pred ich použitím overte podporované verzie, zálohy, prístupové oprávnenia a postup obnovy v oddelenom testovacom prostredí.

Hlavné oficiálne zdroje

Prehľad

Tento historický postup opisuje inštaláciu Apache HTTP Servera 2.4.6 v systéme CentOS 7.6 a vtedajšiu konfiguráciu. Nejde o aktuálne produkčné odporúčanie.

V pôvodnom prostredí boli použité tieto verzie:

Verzia systému CentOS7.6 (1810)
Verzia Apache2.4.6

Obsah

  1. Inštalácia a prvý test
  2. Historický postup konfigurácie Apache
  3. Zhrnutie

1. Inštalácia a prvý test

Príkazy v tejto časti patria ku konkrétnemu historickému prostrediu CentOS 7.

1-1. Inštalácia Apache HTTP Servera

Pôvodné prostredie nainštalovalo balík httpd pomocou správcu yum pod účtom root.

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

1-2. Overenie spustenia cez HTTP

Po inštalácii možno server spustiť a jeho stav zobraziť pomocou príkazu apachectl.

[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.

Hodnota "Active: active (running)" potvrdzuje spustenie procesu služby. Sama osebe však nepotvrdzuje správnosť konfigurácie, priechod firewallom, TLS ani odpoveď aplikácie.

Následne pôvodný postup povolil vo firewalle CentOS 7 služby HTTP a HTTPS, pretože predvolená konfigurácia povoľovala iba SSH. Voľba "--permanent" zachová pravidlá aj po reštarte a príkaz reload ich aktivuje.

[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:

Overte, že zoznam "services" obsahuje položky "http" a "https", a potom odošlite požiadavku z oprávneného testovacieho klienta. Pôvodné laboratórne prostredie používalo adresu "http://192.168.50.10". Úspešný test zobrazí úvodnú stránku Apache.

Úvodná stránka Apache HTTP Servera

Po úspešnom teste server zastavte.

[root@hostname ~]# apachectl stop

2. Historický postup konfigurácie Apache

2-1. Vytvorenie adresára pre protokoly

Balík pre CentOS zvyčajne vytvorí adresár "/var/log/httpd" aj s príslušným kontextom SELinux. Historický postup ho vytváral ručne iba vtedy, keď chýbal.

Režim 755 sám osebe nezaručuje, že Apache môže zapisovať: rozhodujú aj vlastník, oprávnenia nadradeného adresára a kontext SELinux. Uprednostnite predvolené nastavenia balíka alebo schválené pravidlá protokolovania a nedovoľte nedôveryhodným používateľom meniť protokoly.

Ak už adresár s rovnakým názvom existuje, príkaz "mkdir /var/log/httpd" nevykonávajte.

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

Tento krok iba pripraví adresár; cestu k protokolom určuje až neskoršia konfigurácia Apache.

Pred použitím skontrolujte vlastníctvo, oprávnenia a kontext SELinux vytvoreného adresára.

2-2. Nastavenie domény

Nastavte "ServerName" na názov hostiteľa a port zodpovedajúci nasadeniu. Apache načítava aj konfiguračné fragmenty z pripojených adresárov, preto súbor "httpd.conf" nemusí byť jediným zdrojom výslednej konfigurácie. V čisto lokálnom prostredí nemusí byť verejná doména potrebná.

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

Pôvodný príklad odkomentoval položku "ServerName" a zástupnú hodnotu nahradil DNS názvom daného prostredia.

httpd.conf【Pred zmenou】


#ServerName www.example.com:80

httpd.conf【po zmene】


ServerName domainname:80

2-3. Aktivácia modulov SSL a konfiguračných súborov

Pre verejnú prevádzku používajte HTTPS, aby boli prihlasovacie údaje a obsah chránené počas prenosu. Pôvodný postup nainštaloval balíkový modul TLS pomocou yum.

V historickom prostredí sa modul inštaloval nasledujúcim príkazom.

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

Táto verzia balíka modul automaticky povolila a vytvorila súbor "/etc/httpd/conf.d/ssl.conf". Na podporovanej distribúcii overte aktuálne správanie balíka aj predvolené nastavenia TLS.

2-4. Zmena ciest k protokolom

Pôvodná konfigurácia presmerovala chybový protokol, prístupový protokol a protokol požiadaviek TLS do pripraveného adresára "/var/log/httpd". Keďže ďalší krok presmeroval všetku prevádzku na HTTPS, príklad menil iba súbor "ssl.conf".

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


ssl.conf【Pred zmenou】


ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log

~skrátenie~

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


ssl.conf【po zmene】


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

~skrátenie~

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

Úprava zmení cieľ uvedených protokolov na adresár "/var/log/httpd".


Zástupné značky ako "%t" a "%h" určujú formát protokolu. Medzi často používané značky patria:

Referenčný prehľad

• %T: čas spracovania požiadavky v sekundách

• %h: názov hostiteľa alebo IP adresa klienta; názov sa prekladá iba pri zapnutom "HostnameLookups"

• %r: prvý riadok požiadavky

• %b: počet bajtov odpovede bez hlavičiek HTTP vo formáte CLF; pri nulovej odpovedi sa uvedie pomlčka

• %D: čas spracovania požiadavky v mikrosekundách

• %>s: konečný stavový kód HTTP

2-5. Vytvorenie certifikátov TLS

Táto časť zachytáva pôvodné príkazy na vytvorenie certifikátu. Pre verejnú službu použite automaticky obnovovaný certifikát od dôveryhodnej certifikačnej autority. Certifikát s vlastným podpisom môže šifrovať prenos, klient však bez osobitne spravovaného koreňa dôvery nevie overiť totožnosť servera.

Ignorovanie upozornenia pri neoverenom certifikáte umožňuje vydávanie sa za server a útok typu man-in-the-middle. Certifikát s vlastným podpisom preto používajte iba v riadenom súkromnom prostredí, kde klienti dôveryhodný certifikát poznajú vopred.

Predvolené nastavenia certifikátu pre Apache sú "/etc/pki/tls/certs/localhost.crt" a "/etc/pki/tls/private/localhost.key".

Direktívy "SSLCertificateFile" a "SSLCertificateKeyFile" nájdete v súbore "/etc/httpd/conf.d/ssl.conf".


Historický príklad certifikátu podpísaného vlastným kľúčom

Nasledujúce príkazy vytvorili súkromný kľúč, žiadosť o podpis certifikátu a certifikát podpísaný tým istým kľúčom. Nezahŕňajú dnešné postupy ochrany kľúča, Subject Alternative Name, obnovy ani nasadenia, preto ich nekopírujte ako aktuálny návod.

Príkaz na vytvorenie žiadosti sa interaktívne pýta na údaje o subjekte certifikátu. Pri skutočnom certifikáte musia tieto údaje a najmä názvy hostiteľov zodpovedať nasadeniu.

[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

Historický príklad žiadosti pre certifikačnú autoritu

Nasledujúce príkazy vytvorili súkromný kľúč a žiadosť o podpis certifikátu určenú certifikačnej autorite.

[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

Žiadosť o podpis nie je serverový certifikát. Certifikačná autorita žiadosť overí a vydá certifikát, ktorý treba nainštalovať spolu s prípadnými certifikátmi reťazca a mechanizmom obnovy.

2-6. Presmerovanie HTTP na HTTPS

Verejný koncový bod HTTP môže požiadavku presmerovať na zodpovedajúcu adresu HTTPS. Pred zapnutím trvalého presmerovania overte správanie proxy hlavičiek aj cieľovej adresy v testovacom prostredí.

Úplné odmietnutie HTTP je bezpečné, presmerovanie však zvyčajne poskytuje lepšiu používateľskú skúsenosť. Pôvodný postup upravoval konfiguráciu pod účtom root.

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

Pôvodný príklad pridal na koniec súboru nasledujúce pravidlo.

httpd.conf


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

Pravidlo presmeruje požiadavky prijaté cez HTTP na rovnakú cestu cez HTTPS.

Podmienka "RewriteCond %{HTTPS} off" obmedzuje pravidlo na požiadavky, ktoré Apache považuje za nešifrované.

Bez tejto podmienky môže vzniknúť nekonečná slučka. Za reverznou proxy nemusí premenná odrážať pôvodnú schému klienta, preto použite konfiguráciu odporúčanú pre konkrétnu architektúru proxy.

2-7. Overenie prístupu cez HTTPS

Po dokončení nastavení spustite Apache a overte prístup cez HTTPS.

[root@hostname ~]# apachectl start

V pôvodnom prostredí prehliadač otvoril adresu "http://192.168.50.10".

Nastavené pravidlo presmerovalo adresu "http://192.168.50.10" na "https://192.168.50.10". Pri certifikáte vydanom pre názov hostiteľa by však test cez samotnú IP adresu mohol vyvolať chybu overenia názvu.

Po úspešnom teste Apache zastavte.

[root@hostname ~]# apachectl stop

2-8. Automatické spustenie služby

Balík pre CentOS už poskytuje jednotku "httpd.service", ktorú treba bežne povoliť prostredníctvom systemd. Vlastná jednotka "apache.service" uvedená nižšie zostáva iba ako súčasť pôvodného článku a nemá nahrádzať jednotku dodanú distribúciou.

Historický postup vytvoril vlastný súbor "apache.service" takto.

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

Do súboru zapísal nasledujúcu konfiguráciu.

[Unit]
#Popis.
Description=Apache
#Kontrola pred a po vykonaní.
#Before=xxx.service
#After=xxx.service

[Service]
#Označenie používateľa a skupiny
User=root
Group=root
#Po aktivácii nastavte stav na možnosť Aktivované.
Type=oneshot
RemainAfterExit=yes
#Spustenie, zastavenie a opätovné načítanie.
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl restart

[Install]
#Ekvivalentné nastavenia úrovne Runlevel 3.
WantedBy=multi-user.target

Pôvodný postup potom vlastnú jednotku povolil pomocou systemctl. Na podporovanej inštalácii používajte jednotku "httpd.service" dodanú balíkom.

[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. Zhrnutie

Historický postup zahŕňa inštaláciu, pravidlá firewallu, názov hostiteľa, protokoly, TLS, presmerovanie a automatické spustenie služby.

Súčasné nasadenie má vychádzať z podporovanej distribúcie a jednotky dodanej balíkom. Ponechajte SELinux v režime Enforcing, pred opätovným načítaním overte konfiguráciu a automatizujte obnovu dôveryhodného certifikátu.

Pred vystavením služby internetu skontrolujte minimálny počet modulov, prístupové oprávnenia, firewall, protokoly a postup obnovy.