Apache HTTP serveris uz CentOS: instalēšana un droša palaišana


Publikācijas datums:

Atjaunināts:


Tehniskie raksti > Apache HTTP serveris uz CentOS: instalēšana un droša palaišana

2026. gada statuss un droša lietošana

Galvenais: atbalstītā RHEL saimes sistēmā instalējiet izplatījuma pakotni httpd, pirms pārlādes pārbaudiet konfigurāciju, ugunsmūrī atveriet tikai vajadzīgos pakalpojumus un SELinux atspējošanas vietā iestatiet pareizus kontekstus un boolean vērtības.

Ko jūs uzzināsiet

  • Kā sader kopā pakotnes instalēšana, sistēmas palaišana, konfigurācijas validācija un piekļuve tīklam.
  • Kā pielāgoto dokumentu saknes mijiedarbojas ar atļaujām un SELinux etiķetēm.
  • Kuras tālāk norādītās CentOS 7 komandas ir vēsturiskas, un tām ir nepieciešams atbalstītas platformas ekvivalents.

Kam tas paredzēts: Linux administratoriem, kuri izvieto pamata Apache HTTP Server vai migrē vecāku CentOS darbību aprakstu.

2026. gada konteksts: CentOS 7 atbalsts ir beidzies. Saglabājiet sākotnējo aprakstu tikai uzziņai, bet izmantojiet DNF un pašreizējo RHEL un Apache dokumentāciju, atstājiet SELinux piespiedu režīmā, samaziniet nevajadzīgo moduļu skaitu un pirms saudzīgas pārlādes izpildiet apachectl configtest.

Drošības piezīme. Sākotnējā rakstā esošās komandas un konfigurācijas piemēri nav atkārtoti izpildīti pašreizējā ražošanas vidē. Pirms to lietošanas pārbaudiet atbalstītās versijas, dublējumus, piekļuves vadīklas un atcelšanas darbības atsevišķā testa vidē.

Galvenie oficiālie avoti

Pārskats

Šajā vēsturiskajā pamācībā Apache HTTP Server 2.4.6 instalēts CentOS 7.6 sistēmā un fiksēta toreiz izmantotā konfigurācija. Tas nav mūsdienu ražošanas sistēmas standarts.

Pārbaudītās versijas bija šādas.

CentOS versija7.6 (1810)
Apache versija2.4.6

Satura rādītājs

  1. Instalēšana un sākotnējā pārbaude
  2. Vēsturiskā Apache konfigurācija
  3. Kopsavilkums

1. Instalēšana un sākotnējā pārbaude

Šīs sadaļas komandas attiecas uz vēsturisko CentOS 7 vidi.

1-1. Apache instalēšana

Sākotnējā vidē httpd pakotne tika instalēta ar yum, izmantojot root privilēģijas.

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

1-2. HTTP palaišanas pārbaude

Pēc instalēšanas apachectl var palaist serveri un parādīt tā statusu.

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

Izvade "Active: active (running)" apstiprina, ka pakalpojuma process ir palaists; tā vēl nepārbauda konfigurācijas pareizību, ugunsmūra ceļu, TLS vai lietojumprogrammas atbildi.

Pēc tam vēsturiskajā CentOS 7 ugunsmūrī tika pastāvīgi atļauts HTTP un HTTPS un Apache pārbaudīts pārlūkprogrammā.

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

Pārliecinieties, ka pakalpojumu sarakstā redzami 'http' un 'https', un pēc tam nosūtiet pieprasījumu no autorizēta testa klienta. Sākotnējā laboratorijas vide izmantoja http://192.168.50.10.

Apache HTTP Server sākumlapa pēc sekmīgas palaišanas

Pēc sākotnējās pārbaudes Apache tika apturēts, lai turpinātu konfigurēšanu.

[root@hostname ~]# apachectl stop

2. Vēsturiskā Apache konfigurācija

2-1. Žurnālu direktorija izveide

CentOS pakotne parasti pati izveido un marķē direktoriju /var/log/httpd. Vēsturiskās darbības to izveidoja manuāli, ja direktorija vēl nebija.

Režīms 755 pats par sevi nepiešķir Apache rakstīšanas tiesības: jābūt pareizam arī īpašniekam, vecākdirektoriju atļaujām un SELinux marķējumam. Izmantojiet pakotnes noklusējumus vai apstiprinātu žurnālu politiku un neļaujiet neuzticamiem lietotājiem mainīt žurnālus.

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

Šī darbība tikai sagatavo direktoriju; žurnālu ceļi tiek norādīti vēlāk konfigurācijā.

2-2. Domēna iestatījumi

Iestatiet ServerName atbilstoši izmantotajam resursdatora nosaukumam un portam. Apache ielādē arī konfigurācijas fragmentus no iekļautajiem direktorijiem, tāpēc httpd.conf nav vienīgais efektīvo iestatījumu avots.

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

Vēsturiskajā piemērā ServerName rinda tika atkomentēta un aizstājējvārds nomainīts pret izvietošanas DNS nosaukumu.

httpd.conf【Pirms pārmaiņām】


#ServerName www.example.com:80

httpd.conf【pēc izmaiņām】


ServerName domainname:80

2-3. SSL moduļu un konfigurācijas failu aktivizēšana

Publiskai datplūsmai izmantojiet HTTPS, lai autentifikācijas dati un saturs tiktu šifrēti pārsūtīšanas laikā. Vēsturiskajā CentOS vidē TLS modulis tika instalēts ar yum.

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

Šajā pakotnes versijā instalēšana iespējoja moduli un izveidoja /etc/httpd/conf.d/ssl.conf. Atbalstītajā izplatījumā pārbaudiet pašreizējo pakotnes darbību un TLS noklusējumus.

2-4. Žurnālu ceļa maiņa

Vēsturiskajā piemērā TLS virtuālā resursdatora žurnālu ceļi tika mainīti uz iepriekš sagatavoto direktoriju.

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


ssl.conf【Pirms pārmaiņām】


ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log

~saīsinājums~

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


ssl.conf【pēc izmaiņām】


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

~saīsinājums~

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

Šīs izmaiņas novirza žurnālus uz direktoriju "/var/log/httpd".


Tādi marķieri kā %t un %h nosaka žurnāla formātu. Biežāk izmantoto marķieru nozīme ir šāda.

• %T — pieprasījuma apstrādes laiks sekundēs.

• %h — klienta resursdatora nosaukums vai IP adrese; nosaukums tiek atrisināts tikai tad, ja HostnameLookups ir ieslēgts.

• %r — pieprasījuma pirmā rinda.

• %b — atbildes apjoms baitos bez HTTP galvenēm; ja baiti nav nosūtīti, CLF formātā izmanto defisi.

• %D — pieprasījuma apstrādes laiks mikrosekundēs.

• %>s — galīgais HTTP statusa kods.

2-5. TLS sertifikātu izveide

Šajā sadaļā saglabātas sākotnējās sertifikātu komandas. Publiskam pakalpojumam izmantojiet uzticamas sertifikācijas iestādes izdotu sertifikātu ar automatizētu atjaunošanu.

Pašparakstīts sertifikāts var šifrēt datplūsmu, taču klients nevar pārbaudīt servera identitāti bez atsevišķi pārvaldīta uzticamības enkura. Brīdinājuma ignorēšana un nepārbaudīta sertifikāta pieņemšana rada servera uzdošanās un starpnieka uzbrukuma risku. Tātad publiski uzticams un pašparakstīts sertifikāts drošības ziņā nav savstarpēji aizstājami.

Noklusējuma sertifikāta iestatījumi Apache ir "/etc/pki/tls/certs/localhost.crt" un "/etc/pki/tls/private/localhost.key".

Ceļus norāda direktīvas "SSLCertificateFile" un "SSLCertificateKeyFile" failā "/etc/httpd/conf.d/ssl.conf".


Vēsturiskais pašparakstīta sertifikāta piemērs

Tālāk redzamās komandas izveidoja privāto atslēgu, sertifikāta parakstīšanas pieprasījumu un pašparakstītu sertifikātu. Tajās nav mūsdienu prasību privātās atslēgas aizsardzībai, subjectAltName, atjaunošanai un izvietošanai, tāpēc nekopējiet tās kā aktuālu recepti.

[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

Vēsturiskais sertifikāta pieprasījuma piemērs

Tālāk redzamās komandas izveidoja privāto atslēgu un sertifikāta parakstīšanas pieprasījumu iesniegšanai sertifikācijas iestādē.

[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

Sertifikāta parakstīšanas pieprasījums vēl nav servera sertifikāts. Sertifikācijas iestāde pārbauda pieprasījumu un izdod sertifikātu, kas jāinstalē kopā ar vajadzīgajiem ķēdes sertifikātiem un atjaunošanas procesu.

2-6. HTTP novirzīšana uz HTTPS

Publisks HTTP galapunkts var atgriezt novirzīšanu uz atbilstošo HTTPS URL. Pirms pastāvīgas novirzīšanas iespējošanas testa vidē pārbaudiet starpniekservera galvenes un novirzīšanas darbību.

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

Vēsturiskajā piemērā faila beigās tika pievienots šāds noteikums.

httpd.conf


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

RewriteCond %{HTTPS} off ierobežo noteikumu līdz pieprasījumiem, kurus Apache uzskata par nešifrētiem. Ja nosacījumu izlaiž, var rasties novirzīšanas cilpa. Aiz reversā starpniekservera šis nosacījums var neatspoguļot sākotnējā klienta shēmu, tāpēc izmantojiet konkrētajai arhitektūrai dokumentēto konfigurāciju.

2-7. HTTPS piekļuves pārbaude

Pēc konfigurēšanas palaidiet Apache un pārbaudiet HTTPS piekļuvi no autorizēta klienta.

[root@hostname ~]# apachectl start

Sākotnējā laboratorijā pārlūkprogrammā tika atvērts http://192.168.50.10.

Novirzīšanas iestatījums mainīja URL no http://192.168.50.10 uz https://192.168.50.10.

Pēc sekmīgas pārbaudes Apache tika apturēts.

[root@hostname ~]# apachectl stop

2-8. Automātiska palaišana

CentOS httpd pakotne jau nodrošina httpd.service, ko parasti iespējo ar systemctl. Tālāk redzamā pielāgotā vienība apache.service saglabāta tikai kā sākotnējā raksta daļa, un tai nevajadzētu aizstāt izplatītāja vienību.

Vēsturiskajā pamācībā tika izveidots fails 'apache.service' ar šādu konfigurāciju.

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

Failā tika ierakstīti tālāk redzamie iestatījumi.

[Unit]
#Apraksts.
Description=Apache
#Kontrole pirms un pēc izpildes.
#Before=xxx.service
#After=xxx.service

[Service]
#Lietotāja un grupas apzīmējums
User=root
Group=root
#Pēc aktivizēšanas iestatiet statusu Aktivizēts.
Type=oneshot
RemainAfterExit=yes
#Palaist, apturēt un atkārtoti ielādēt.
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl restart

[Install]
#Runlevel 3 līdzvērtīgi iestatījumi.
WantedBy=multi-user.target

Sākotnējā procedūra pēc tam iespējoja pielāgoto vienību ar systemctl. Atbalstītā instalācijā izmantojiet pakotnes httpd vienību.

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

Vēsturiskās darbības aptver instalēšanu, ugunsmūra piekļuvi, resursdatora nosaukumu, žurnālus, TLS, novirzīšanu un pakalpojuma palaišanu.

Mūsdienu izvietošana jāsāk ar atbalstītā izplatījuma pakotnes vienību un drošības norādījumiem. Atstājiet SELinux piespiedu režīmā, pārbaudiet konfigurāciju pirms pārlādes un automatizējiet sertifikātu atjaunošanu.