Apache HTTP serveris CentOS: diegimas ir saugus paleidimas


Paskelbimo data:

Atnaujinta:


Techniniai straipsniai > Apache HTTP serveris CentOS: diegimas ir saugus paleidimas

2026 m. būsena ir saugus naudojimas

Išvada: palaikomoje RHEL šeimos sistemoje diekite platinamojo paketo httpd, prieš perkraudami patikrinkite konfigūraciją, ugniasienėje atverkite tik būtinas paslaugas, o prieigos problemas spręskite tinkamais failų leidimais ir SELinux kontekstais.

Ką išmoksite

  • Kaip dera paketo diegimas, sistemos paleidimas, konfigūracijos patvirtinimas ir prieiga prie tinklo.
  • Kaip tinkintos dokumento šaknys sąveikauja su leidimais ir SELinux etiketėmis.
  • Kurios toliau pateiktos CentOS 7 komandos yra istorinės ir reikalauja palaikomos platformos atitikmens.

Kam tai skirta: „Linux“ administratoriams, diegiantiems pagrindinį „Apache“ HTTP serverį arba perkeliantiems seną „CentOS“ diegimo aprašą į naujesnę sistemą.

2026 m. kontekstas: „CentOS 7“ nebepalaikoma. Toliau palikta istorinė procedūra, tačiau naujam diegimui rinkitės palaikomą sistemą, naudokite DNF ir dabartinę RHEL bei „Apache“ dokumentaciją. Neišjunkite SELinux, įkelkite tik reikalingus modulius ir prieš sklandžiai perkraudami serverį vykdykite apachectl configtest.

Saugos pastaba: pradiniame straipsnyje pateiktos komandos ir konfigūracijos pavyzdžiai nebuvo pakartotinai vykdomi dabartinėje gamybos aplinkoje. Prieš taikydami, patikrinkite palaikomas versijas, atsargines kopijas, prieigos valdiklius ir atšaukimo veiksmus atskiroje bandymo aplinkoje.

Pagrindiniai oficialūs šaltiniai

Apžvalga

Šiame straipsnyje aprašyta pradinė „Apache“ HTTP serverio diegimo ir paleidimo procedūra „CentOS 7“ sistemoje. Komandos išsaugotos kaip istorinis pavyzdys; palaikomoje sistemoje jas sutikrinkite su dabartine dokumentacija.

Pradiniame pavyzdyje naudotos šios versijos:

CentOS versija7.6 (1810)
"Apache" versija2.4.6

Turinys

  1. Diegimas
  2. Pagrindiniai nustatymai
  3. Santrauka

1. Diegimas

Šiame skyriuje „Apache“ įdiegiamas, paleidžiamas ir patikrinamas per HTTP.

1-1. "Apache" diegimas

Įdiekite „Apache“ naudodami yum. Šioms komandoms reikia root teisių.

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

1-2. Paleidimo patikrinimas (HTTP prieiga)

Įdiegus httpd paketą galima naudoti apachectl. Paleiskite serverį ir patikrinkite jo būseną.

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

Jei apachectl status išvestyje rodoma „Active: active (running)“, serveris paleistas.

Kad puslapį būtų galima atverti naršykle, ugniasienėje leiskite HTTP ir HTTPS paslaugas. Parinktis „--permanent“ išsaugo taisykles ir po sistemos paleidimo iš naujo; po pakeitimų būtina perkrauti firewalld konfigūraciją.

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

Patikrinkite, ar „services“ eilutėje matomos „http“ ir „https“ paslaugos. Pavyzdžio serverio IP adresas yra 192.168.50.10, todėl naršyklėje adresu http://192.168.50.10 atveriamas numatytasis „Apache“ puslapis. Jei jis rodomas, HTTP prieiga veikia.

Apache viršutinis ekranas

Baigę patikrą, serverį sustabdykite.

[root@hostname ~]# apachectl stop

2. Pagrindiniai nustatymai

2-1. Žurnalo failo išvesties aplanko sukūrimas

„Apache“ žurnalams laikyti naudokite /var/log/httpd katalogą. Daugelyje paketinių diegimų jis jau būna sukurtas, todėl pirmiausia tai patikrinkite.

Pavyzdyje katalogui suteikiamos 755 teisės. Vien šių teisių nepakanka rašymui užtikrinti: svarbūs ir savininkas, grupė bei SELinux kontekstas. Neleiskite neprivilegijuotiems naudotojams keisti žurnalų.

Jei /var/log/httpd jau yra, mkdir komandos kartoti nereikia.

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

Šiame žingsnyje tik paruošiamas katalogas; žurnalo kelias konfigūracijoje keičiamas vėliau.

2-2. Domeno nustatymas

ServerName direktyva nustatoma httpd.conf faile. Įrašykite šiam serveriui skirtą vardą; izoliuotoje bandymo aplinkoje, kurioje vardas nenaudojamas, šį žingsnį galima praleisti.

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

Pašalinkite komentaro ženklą prieš ServerName ir nurodykite aplinkai tinkamą serverio vardą.

httpd.conf【Prieš pakeitimą】


#ServerName www.example.com:80

httpd.conf【po pakeitimo】


ServerName domainname:80

2-3. SSL modulių ir konfigūracijos failų aktyvavimas

Norėdami aptarnauti HTTPS užklausas, įdiekite TLS modulį. Viešai svetainei naudokite HTTPS, nes paprastas HTTP neapsaugo perduodamų duomenų ir nepatvirtina serverio tapatybės.

Įdiekite mod_ssl paketą naudodami yum.

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

Įdiegus paketą mod_ssl modulis įjungiamas, o /etc/httpd/conf.d/ssl.conf sukuriamas automatiškai.

2-4. Pakeisti žurnalo išvesties kelią

SSL konfigūracijos faile nurodykite anksčiau paruoštą žurnalų katalogą. Šiame pavyzdyje keičiami tik HTTPS virtualiojo serverio žurnalai.

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


ssl.conf【Prieš pakeitimą】


ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log

~sutrumpinimas~

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


ssl.conf【po pakeitimo】


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

~sutrumpinimas~

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

Po pakeitimo SSL žurnalai rašomi į /var/log/httpd.


%t, %h ir panašūs žymenys apibrėžia žurnalo formatą. Dažniausiai naudojami žymenys:

• %T – užklausos apdorojimo laikas sekundėmis.

• %h – nuotolinio kliento vardas arba IP adresas. Vardas sprendžiamas tik tada, kai įjungta HostnameLookups.

• %r – pirmoji užklausos eilutė.

• %b – atsakymo dydis baitais, neįskaitant HTTP antraščių; jei baitų neišsiųsta, CLF formatu rašomas brūkšnys.

• %D – užklausos apdorojimo laikas mikrosekundėmis.

• %>s – galutinis HTTP būsenos kodas.

2-5. SSL sertifikatų kūrimas

Toliau parodyta sertifikato parengimo procedūra. Savarankiškai pasirašytas sertifikatas gali tikti uždarai bandymo aplinkai, jei jo patikimumas klientuose sukonfigūruotas atskirai. Viešam serveriui naudokite patikimos sertifikavimo institucijos išduotą sertifikatą.

Savarankiškai pasirašytas sertifikatas gali šifruoti ryšį, tačiau pats savaime neleidžia klientui patikimai patvirtinti serverio tapatybės. Jei jo šaknis klientui nėra patikimai įdiegta kitu kanalu, naršyklė rodo įspėjimą ir nėra apsaugos nuo apsimetimo kitu serveriu. Todėl viešai prieinamai svetainei naudokite patikimos CA išduotą sertifikatą.

Pavyzdinėje „Apache“ konfigūracijoje sertifikato ir privataus rakto keliai yra /etc/pki/tls/certs/localhost.crt ir /etc/pki/tls/private/localhost.key.

Šie keliai nustatomi SSLCertificateFile ir SSLCertificateKeyFile direktyvomis faile /etc/httpd/conf.d/ssl.conf.


Savarankiškai pasirašytam sertifikatui

Šios komandos sukuria privatų raktą, CSR ir savarankiškai pasirašytą sertifikatą. Vykdykite jas turėdami root teises.

Vykdant CSR kūrimo komandą prašoma organizacijos ir subjekto duomenų. Bandymo sertifikatui pateikite aplinką atitinkančius duomenis; viešo sertifikato CSR turi turėti tikslų serverio vardą ir CA reikalaujamą informaciją. Dabartiniai klientai serverio vardą tikrina pagal Subject Alternative Name, todėl prieš naudojimą patikrinkite šį plėtinį.

[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

CA išduodamam sertifikatui

Šios komandos sukuria privatų raktą ir sertifikato pasirašymo užklausą. Vykdykite jas turėdami root teises.

[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

Vien CSR sukūrimo neužtenka. Užklausą pateikite pasirinktai CA, patvirtinkite domeno valdymą, o gavę sertifikatą įdiekite jį kartu su tarpiniais sertifikatais ir saugiai laikomu privačiu raktu.

2-6. HTTP nukreipimas į HTTPS

Kad lankytojai nebūtų palikti nešifruotame HTTP ryšyje, HTTP užklausas nukreipkite į HTTPS.

HTTP galima ir visiškai uždrausti, tačiau viešai svetainei dažniausiai patogiau palikti tik nukreipimą. Konfigūraciją keiskite turėdami root teises.

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

Failo pabaigoje pridėkite šį bloką.

httpd.conf


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

Ši taisyklė HTTP užklausai grąžina nuolatinį nukreipimą į tą patį serverio vardą ir kelią per HTTPS.

Sąlyga RewriteCond %{HTTPS} off užtikrina, kad taisyklė būtų taikoma tik nešifruotai užklausai.

Be šios sąlygos būtų peradresuojamos ir HTTPS užklausos, todėl galėtų susidaryti nukreipimų ciklas. Jei serveris veikia už atvirkštinio tarpinio serverio, HTTPS būseną vertinkite pagal patikimai perduodamas antraštes ir konkrečią architektūrą.

2-7. Paleidimo patikrinimas (HTTPS prieiga)

Baigę konfigūruoti paleiskite „Apache“ ir patikrinkite HTTPS prieigą.

[root@hostname ~]# apachectl start

Pavyzdyje serverio IP adresas yra 192.168.50.10, todėl naršyklėje adresu http://192.168.50.10 pradedama patikra.

Jei nukreipimas veikia, vietoje http://192.168.50.10 naršyklė atveria https://192.168.50.10 ir gali pagrįstai rodyti nepatikimo sertifikato įspėjimą, kai naudojamas savarankiškai pasirašytas sertifikatas.

Baigę patikrą, „Apache“ sustabdykite.

[root@hostname ~]# apachectl stop

2-8. Automatinio paleidimo nustatymas

Kad „Apache“ būtų paleistas kartu su sistema, paslaugą įjunkite per systemd. Toliau išsaugotas istorinis pasirinktinio apache.service failo pavyzdys, tačiau paketinis httpd diegimas jau pateikia httpd.service; palaikomoje sistemoje pirmiausia naudokite ir įjunkite būtent tą vienetą.

Istoriniame pavyzdyje sukuriamas apache.service failas ir jame aprašomi paleidimo veiksmai.

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

Į failą buvo įrašyta ši konfigūracija:

[Unit]
#Aprašymas.
Description=Apache
#kontrolė prieš vykdymą ir po jo.
#Before=xxx.service
#After=xxx.service

[Service]
#Naudotojo ir grupės paskyrimas
User=root
Group=root
#Suaktyvinus būseną, nustatykite būseną Aktyvuota.
Type=oneshot
RemainAfterExit=yes
#Paleiskite, sustabdykite ir perkraukite.
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl restart

[Install]
#3 lygmens lygiaverčiai nustatymai.
WantedBy=multi-user.target

Išsaugoję failą, įjunkite vienetą per systemctl. Naujam diegimui vietoje šio pasirinktinio vieneto rekomenduojama naudoti paketo pateiktą 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. Santrauka

Istorinėje procedūroje „Apache“ įdiegiamas, ugniasienėje leidžiamos žiniatinklio paslaugos, nustatomi žurnalai bei TLS ir sukonfigūruojamas automatinis paleidimas.

Naujam diegimui rinkitės palaikomą sistemą ir paketinį httpd.service, prieš perkraudami tikrinkite konfigūraciją, neišjunkite SELinux ir viešai svetainei naudokite patikimos CA išduotą sertifikatą.