Strežnik Apache HTTP v sistemu CentOS: namestitev in varen zagon
Datum objave:
Posodobljeno:
Tehnični članki > Strežnik Apache HTTP v sistemu CentOS: namestitev in varen zagon
Stanje in varna uporaba v letu 2026
Sklep: Na podprtem gostitelju iz družine RHEL namestite paket httpd, pred ponovnim nalaganjem preverite konfiguracijo, v požarnem zidu odprite samo potrebne storitve ter namesto onemogočanja SELinuxa nastavite ustrezne varnostne kontekste in logične vrednosti SELinux.
Kaj boste izvedeli
- Kako so povezani namestitev paketa, upravljanje storitve, preverjanje konfiguracije in omrežni dostop.
- Kako se lastne poti za dokumente in dnevnike povezujejo z dovoljenji ter oznakami SELinux.
- Kateri ukazi za CentOS 7 so zgodovinski in jih je treba nadomestiti z ustrezniki na podprti platformi.
Komu je članek namenjen? Skrbnikom Linuxa, ki postavljajo osnovni strežnik Apache HTTP ali prenašajo starejši priročnik za CentOS na podprto platformo.
Opomba za leto 2026: CentOS 7 je dosegel konec življenjske dobe. Prvotni postopek ohranite le kot referenco; na podprtem sistemu uporabite DNF in trenutno dokumentacijo RHEL ter Apache, SELinux pustite v načinu enforcing, naložite samo potrebne module in pred nadzorovanim ponovnim nalaganjem izvedite apachectl configtest.
Varnostna opomba: Ukazi in konfiguracijski primeri iz prvotnega članka niso bili znova preizkušeni v sodobnem produkcijskem okolju. Pred uporabo v ločenem preizkusnem okolju preverite podprte različice, izdelajte varnostne kopije ter določite nadzor dostopa in postopek povrnitve.
Uradni viri
Pregled
Članek prikazuje prvotni postopek namestitve in zagona Apacheja v sistemu CentOS 7. Ker okolje ni več podprto, ukaze prenesite na sodobno distribucijo in preverite trenutno dokumentacijo.
Prvotni primer uporablja naslednji različici:
| Različica sistema CentOS | 7.6 (1810) |
|---|---|
| Različica Apacheja | 2.4.6 |
Kazalo vsebine
1. Namestitev
Ta razdelek opisuje namestitev paketa in osnovno preverjanje delovanja Apacheja.
1-1. Namestitev Apacheja
Stari postopek namesti paket httpd z ukazom yum in skrbniškimi pravicami.
[username@hostname ~]$ su -
[root@hostname ~]# yum -y install httpd
1-2. Preverjanje delovanja prek HTTP
Po namestitvi paketa httpd je na voljo ukaz apachectl. Stari primer z njim zažene strežnik in preveri njegovo stanje.
[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.
Stanje "Active: active (running)" pomeni, da se je storitev zagnala. Pred omrežnim preizkusom preverite še konfiguracijo in dnevnike.
Za dostop iz brskalnika je treba v požarnem zidu dovoliti potrebni storitvi HTTP in HTTPS. Stari primer za trajni pravili uporablja možnost "--permanent" in nato znova naloži firewalld. Odpirajte samo vrata, ki jih dejansko potrebujete.
[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:
V izpisu "services" morata biti navedena "http" in "https". V prvotnem lokalnem primeru je bil strežnik dosegljiv na naslovu "http://192.168.50.10" in je prikazal privzeto preizkusno stran.
Stari postopek po uspešnem preizkusu strežnik ustavi, preden nadaljuje s konfiguracijo.
[root@hostname ~]# apachectl stop
2. Osnovna nastavitev
2-1. Imenik za dnevnike
Paket httpd običajno že ustvari in ustrezno označi imenik /var/log/httpd. Stari primer ga ustvari ročno, če ne obstaja.
Dovoljenja 755 drugim uporabnikom dovolijo branje metapodatkov imenika, ne pa samodejno tudi vsebine dnevnikov. Lastništvo, dovoljenja datotek, umask, vrtenje dnevnikov in oznake SELinux nastavite skladno s pravilnikom ter preprečite nepooblaščeno spreminjanje.
Ukaza 'mkdir /var/log/httpd' ne izvedite, če imenik že obstaja; najprej preverite obstoječe lastništvo, dovoljenja in oznake SELinux.
[root@hostname ~]# mkdir /var/log/httpd
[root@hostname ~]# chmod 755 /var/log/httpd
Pot do dnevnikov je pozneje nastavljena v konfiguraciji Apacheja.
Ta korak samo pripravi ciljni imenik.
2-2. Nastavitev imena strežnika
Direktivo ServerName nastavite v httpd.conf ali vključeni konfiguracijski datoteki. Uporabite ime, ki se ujema z DNS in potrdilom TLS; tudi v notranjem okolju je izrecna nastavitev koristna za predvidljivo vedenje.
[root@hostname ~]# vi /etc/httpd/conf/httpd.conf
Odstranite začetni znak # in vrednost ServerName prilagodite okolju.
#ServerName www.example.com:80
ServerName domainname:80
2-3. Modul SSL in konfiguracijska datoteka
Za šifriran dostop prek HTTPS namestite podporo TLS. HTTP ne zagotavlja zaupnosti ali celovitosti prenosa, zato ga za občutljive ali javne vsebine preusmerite na HTTPS.
Stari postopek namesti paket mod_ssl z yum.
[root@hostname ~]# yum -y install mod_ssl
Paket mod_ssl naloži potrebni modul in ustvari datoteko /etc/httpd/conf.d/ssl.conf. Pred zagonom preverite njene privzete vrednosti in trenutno priporočeno konfiguracijo TLS.
2-4. Sprememba poti dnevnikov
Stari primer v ssl.conf spremeni poti dnevnikov TLS na prej pripravljeni imenik. Če strežnik sprejema tudi HTTP, preverite še dnevnike ustreznega navideznega gostitelja.
[root@hostname ~]# vi /etc/httpd/conf.d/ssl.conf
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
~okrajšava~
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
~okrajšava~
CustomLog /var/log/httpd/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
S temi spremembami so dnevniki TLS zapisani v imenik "/var/log/httpd".
Oznake, kot sta '%t' in '%h', določajo obliko zapisa dnevnika. Pogosti primeri so navedeni spodaj.
Pomen oznak:
• %T: čas obdelave zahteve v sekundah.
• %h: ime gostitelja ali naslov IP odjemalca; ime se razrešuje samo, če je HostnameLookups nastavljeno na On.
• %r: prva vrstica zahteve.
• %b: velikost telesa odziva brez glav HTTP v obliki CLF; če ni bil poslan noben bajt, se zapiše -.
• %D: čas obdelave zahteve v mikrosekundah.
• %>s: končna koda stanja HTTP.
2-5. Potrdila TLS
Samopodpisano potrdilo je lahko primerno za omejen preizkus, če odjemalci njegovo zaupanje nastavijo po varnem kanalu. Za javno dostopen strežnik uporabite potrdilo zaupanja vrednega overitelja in avtomatizirano obnavljanje.
Samopodpisano potrdilo lahko omogoča šifriranje, vendar brez vnaprej vzpostavljenega zaupanja ne zagotavlja enakega preverjanja identitete kot pravilno izdano potrdilo. Uporabnik, ki opozorilo preprosto prezre, je lahko izpostavljen napadu s posrednikom. Zato mora biti način zaupanja del načrta uvedbe.
Privzeti poti v tem okolju sta "/etc/pki/tls/certs/localhost.crt" za potrdilo in "/etc/pki/tls/private/localhost.key" za zasebni ključ.
Direktivi "SSLCertificateFile" in "SSLCertificateKeyFile" sta v datoteki "/etc/httpd/conf.d/ssl.conf".
Za samopodpisano potrdilo:
Spodnji zgodovinski ukazi ustvarijo zasebni ključ, zahtevo za podpis potrdila in samopodpisano potrdilo. Zaženite jih samo v nadzorovanem preizkusnem okolju ter zaščitite zasebni ključ.
Ukaz openssl req zahteva podatke o imetniku potrdila. Vnesite vrednosti, ki ustrezajo okolju; zlasti preverite ime gostitelja in sodobne zahteve za razširitev Subject Alternative Name.
[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
Za potrdilo overitelja:
Spodnja ukaza ustvarita zasebni ključ in zahtevo CSR. Zasebni ključ mora ostati zaščiten na strežniku.
[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
CSR nato posredujte izbranemu overitelju in namestite izdano strežniško potrdilo skupaj s potrebno verigo. Ime datoteke v prikazanem primeru je localhost.csr.
2-6. Preusmeritev HTTP na HTTPS
Če strežnik posluša na HTTP, zahteve preusmerite na HTTPS, da uporabniki ne ostanejo na nešifrirani povezavi.
V nekaterih zaprtih okoljih je mogoče HTTP povsem onemogočiti; za javno spletno mesto je običajna nadzorovana preusmeritev. Pred spremembo preverite navidezne gostitelje, posrednike in ciljna imena gostiteljev.
[root@hostname ~]# vi /etc/httpd/conf/httpd.conf
Stari primer na konec konfiguracije doda naslednja pravila.
<IfModule rewrite_module>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
Pravilo preusmeri zahtevo HTTP na enako ime gostitelja in pot prek HTTPS.
Pogoj RewriteCond %{HTTPS} off omeji pravilo na nešifrirane zahteve.
Brez ustreznega pogoja lahko pravilo preusmerja tudi zahteve HTTPS in povzroči zanko. Za strežnikom proxy preverite še način posredovanja informacije o izvirnem protokolu in zaupanje v glave.
2-7. Preverjanje dostopa prek HTTPS
Po preverjanju sintakse konfiguracije zaženite strežnik in preizkusite dostop prek HTTPS.
[root@hostname ~]# apachectl start
V prvotnem lokalnem primeru se v brskalniku odpre "http://192.168.50.10".
Če preusmeritev deluje, se naslov spremeni v "https://192.168.50.10". Dodatno preverite veljavnost potrdila, verigo zaupanja, protokole TLS in odzivne glave.
Stari postopek po preizkusu Apache znova ustavi.
[root@hostname ~]# apachectl stop
2-8. Nastavitev samodejnega zagona
Produkcijska storitev se praviloma zažene samodejno ob zagonu sistema. Paket httpd že vključuje enoto systemd z imenom httpd.service, zato na podprtem sistemu uporabite in prilagodite paketno enoto, namesto da ustvarjate podvojeno storitev.
Spodnji zgodovinski primer ročno ustvari datoteko 'apache.service'. Ohranjen je zaradi primerjave, ni pa priporočena sodobna nastavitev.
[root@hostname ~]# touch /etc/systemd/system/apache.service
[root@hostname ~]# vi /etc/systemd/system/apache.service
Stara enota vsebuje naslednje nastavitve.
[Unit]
#Opis.
Description=Apache
#Nadzor pred in po izvedbi.
#Before=xxx.service
#After=xxx.service
[Service]
#Imenovanje uporabnikov in skupin
User=root
Group=root
#Ko je aktivirano, nastavite stanje na Aktivirano.
Type=oneshot
RemainAfterExit=yes
#Zagon, zaustavitev in ponovno polnjenje.
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl restart
[Install]
#Enakovredne nastavitve na ravni Runlevel 3.
WantedBy=multi-user.target
Stari postopek nato enoto registrira in omogoči z ukazom systemctl. Pri dejanski uporabi najprej preverite, da ne tekmuje z obstoječo httpd.service.
[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. Povzetek
Prvotni postopek zajema namestitev httpd, preverjanje delovanja, pravila požarnega zidu, dnevnike, ServerName, TLS, preusmeritev na HTTPS in samodejni zagon.
Na sodobnem podprtem sistemu uporabite paketno storitev, pred vsakim ponovnim nalaganjem preverite konfiguracijo, SELinux pustite v načinu enforcing, potrdila upravljajte varno in v požarnem zidu odprite samo potrebne storitve.
Pri uporabi v novejšem okolju upoštevajte tudi opombe o različicah in varnosti na začetku članka.
