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 versija | 7.6 (1810) |
|---|---|
| Apache versija | 2.4.6 |
Satura rādītājs
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.
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.
#ServerName www.example.com:80
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
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"
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.
<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.
