apache詳細講解(apache介紹+apache配置實驗+apache實現https網站)

1.apache HTTP server介紹

httpd項目地址:

https://httpd.apache.org/  

在Apache2中有三種工作模式,使用者可以根據不同的業務場景來進行選擇

(1)prefork模式

prefork模式是一種老而穩的模式:

一個主進程管理者多個子進程,每個子進程單獨處理用戶請求,它比較占內存,但穩定,能夠設置進程數量上下限,適合訪問量不大的場景(Liunx下最多同時處理1024個連接)

優點:工作穩定

缺點:每個用戶請求需要對應開啟一個線程,占用資源較多,并發性差,不適用于高并發場景

(2)worker模式

一種多進程和多線程混合的模型,有一個控制進程,啟動多個子進程,每個子進程里面包含固定的線程,使用線程來處理請求,當線程不夠用的時候會再啟動一個新的子進程,然后在進程里面再啟動線程處理請求,由于其使用了線程處理請求,因此可以承受更高的并發

優點:相比prefork模型,其占用的內存較少,可以同時處理更多的請求

缺點:使用keepalive的長連接方式,某個線程會一直被占據,即使沒有傳輸數據,也需要一直等待到超時才會被釋放,如果過多的線程被這樣占據,也會導致再高并發場景下的無服務線程可用

(3)event模型

Apache2的event模型是2012年2.4.x版本新增的穩定模式,基于事件驅動(epoll),每個進程響應多個請求,類似于worker模式,但解決了keepalive時線程空掛浪費資源的問題,用專門線程管理這類線程,高并發下處理能力更強

優點:單線程響應多請求,占據更少的內存,高并發下表現更優秀,會有一個專門的線程來管理keepalive類型的線程,當有真實請求過來的時候,將請求傳遞給服務線程,執行完畢后,又允許它釋放

缺點:沒有線程完全控制

查看使用的哪種模式

[root@apache ~]# httpd -M | grep mpmmpm_event_module (shared)

2.apache的安裝和使用

2.1apache配置文件注意事項

a.Apache2的配置主要分為三部分,分別是全局配置,虛擬主機配置,模塊配置,這些配置項目分散在不同的目錄和文件中,在主配置文件中以文件包含的形式引用它們

b.配置文件中的每一行包含一個配置指令,并指定值,配置指令不區分大小寫,但值區分大小寫

c.以#開頭的行是注釋行,注釋不能出現在指令的后邊,空白行和指令前的空白字符將被忽略,因此可用采用縮進以保持配置層次的清晰

2.2安裝apache及用法

2.2.1安裝apache

[root@apache ~]# yum install httpd -y

2.2.2查看版本

[root@apache ~]# httpd -v
Server version: Apache/2.4.53 (Red Hat Enterprise Linux)
Server built:   Jul 20 2022 00:00:00

2.2.3檢測配置文件語法,是否正確

[root@apache ~]# httpd -t
Syntax OK

2.2.4查看apache的web服務配置文件

[root@apache ~]# tree -L 1 /etc/httpd/
/etc/httpd/
├── conf  #主配置文件所在目錄
├── conf.d  #子配置文件所在目錄
├── conf.modules.d   
├── logs -> ../../var/log/httpd  #日志文件所在目錄
├── modules -> ../../usr/lib64/httpd/modules
├── run -> /run/httpd
└── state -> ../../var/lib/httpd# ../表示上一級目錄的位置
比如說../../var/log/httpd
第一層表示在httpd上一級目錄
第二層表示在etc上一級目錄
所以httpd的日志文件所在目錄為/var/log/httpd

2.2.5主配置文件說明

#過濾掉所有以#開頭的注釋行好所有空白行
[root@apache ~]# grep  -Ev "^.*#|^$" /etc/httpd/conf/httpd.conf
ServerRoot "/etc/httpd"  # http服務的頂級目錄為/etc/httpd
Listen 80  #監聽80
Include conf.modules.d/*.conf  #包括/etc/httpd/conf.modules.d/*.conf的所有文件
User apache  #服務的用戶
Group apache  #服務的組
ServerAdmin root@localhost  #當前服務的管理員
<Directory />   #目錄權限設置AllowOverride none  #此處權限不可被.htaccess文件權限參數覆蓋Require all denied  #拒絕訪問根目錄
</Directory>
DocumentRoot "/var/www/html"  #網頁文件存放的目錄
<Directory "/var/www">  #目錄權限限定AllowOverride NoneRequire all granted
</Directory>
<Directory "/var/www/html">Options Indexes FollowSymLinks  #索引,跟蹤軟鏈接AllowOverride NoneRequire all granted
</Directory>
<IfModule dir_module>  #全局默認提供的頁面文件為index.htmlDirectoryIndex index.html
</IfModule>
<Files ".ht*">  #禁止訪問所有以 .ht開頭的文件Require all denied
</Files>
ErrorLog "logs/error_log"  #錯誤日志
LogLevel warn   #只記錄警告(warn)及以上級別的日志信息
<IfModule log_config_module>  #定義日志格式LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" common<IfModule logio_module>LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio</IfModule>CustomLog "logs/access_log" combined  #使用combined的日志格式記錄日志
</IfModule>
<IfModule alias_module>  #早期的動態網站文件路徑ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">  #權限設定AllowOverride NoneOptions NoneRequire all granted
</Directory>
<IfModule mime_module>  #MIME類型配置TypesConfig /etc/mime.typesAddType application/x-compress .ZAddType application/x-gzip .gz .tgzAddType text/html .shtmlAddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8  #Apache 默認的響應字符編碼為UTF-8
<IfModule mime_magic_module>  #定義使用通過文件內容識別文件mime類型MIMEMagicFile conf/magic
</IfModule>  
EnableSendfile on  #啟用sendfile系統調用,實現零拷貝文件傳輸
IncludeOptional conf.d/*.conf  #加載 conf.d/目錄下所有 .conf結尾的文件作為額外配置

2.2.6啟動服務并訪問默認頁面

a.關閉防火墻和SELinux
[root@apache ~]# systemctl disable --now firewalld
[root@apache ~]# setenforce  0
setenforce: SELinux is disabled
b.修改默認index.html頁面文件
[root@apache ~]# echo jeams > /var/www/html/index.html
c.重啟httpd并查看端口號
[root@apache ~]# systemctl restart httpd
[root@apache ~]# ss -lntup | grep httpd
tcp   LISTEN 0      511                *:80               *:*    users:(("httpd",pid=32197,fd=4),("httpd",pid=32196,fd=4),("httpd",pid=32195,fd=4),("httpd",pid=32193,fd=4))
d.訪問網站
第一種:直接查看網站內容
[root@apache ~]#  curl  192.168.75.184
jeams
第二種:僅返回服務器的響應頭
[root@apache ~]# curl -I 192.168.75.184
HTTP/1.1 200 OK
Date: Tue, 09 Sep 2025 07:06:39 GMT
Server: Apache/2.4.53 (Red Hat Enterprise Linux)
Last-Modified: Tue, 09 Sep 2025 07:03:22 GMT
ETag: "c-63e58e64fab29"
Accept-Ranges: bytes
Content-Length: 6
Content-Type: text/html; charset=UTF-8

2.2.7響應時不顯示版本號

a.向apache服務器的主配置文件的末尾添加一行內容ServerTokens Prod(隱藏服務器的詳細信息)
[root@apache ~]# echo "ServerTokens Prod" >> /etc/httpd/conf/httpd.conf
b.檢測語法并重啟httpd
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
c.查看
[root@apache ~]# curl -I 192.168.75.184
HTTP/1.1 200 OK
Date: Tue, 09 Sep 2025 07:16:26 GMT
Server: Apache      #此處不顯示服務端apache具體版本號信息
Last-Modified: Tue, 09 Sep 2025 07:03:22 GMT
ETag: "c-63e58e64fab29"
Accept-Ranges: bytes
Content-Length: 6
Content-Type: text/html; charset=UTF-8

注意: 添加下面一條命令到配置文件,重啟速度會特別快

[root@apache ~]# echo "ServerName 0.0.0.0" >> /etc/httpd/conf/httpd.conf

3.apache配置和使用

3.1常用全局配置

3.1.1修改全局默認頁面所在目錄和文件名

a.編輯apache主配置文件
[root@apache ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www"
<directory /www>allowoverride nonerequire all granted
</directory>
<IfModule dir_module>DirectoryIndex index.html index default.html
</IfModule>#<directory /www>   設置 /www 目錄的訪問權限
#allowoverride none 禁止該目錄下的.htaccess文件覆蓋主配置
#require all granted 允許所有客戶端訪問該目錄下的內容
#<IfModule dir_module> 當啟用目錄模塊時,定義訪問目錄時默認加載的頁面順序:
優先加載index.html,如果沒有則找index,再沒有就用default.html

注意:測試時,我們要從下往上去測試,否則會測試失敗,只能看到index.html里面的內容

b.創建/www目錄
[root@apache ~]# mkdir /www
c.檢測并重啟httpd
[root@apache www]# httpd -t
Syntax OK
[root@apache www]# systemctl restart httpd
d.測試
default.html
[root@apache www]# echo "jeams" > /www/default.html
[root@apache ~]# curl  192.168.75.184
jeams
index
[root@apache www]# echo "jeam" > /www/index
[root@apache ~]# curl  192.168.75.184
jeam
index.html
[root@apache www]# echo "jeams6" > /www/index.html
[root@apache ~]# curl  192.168.75.184
jeams6

3.1.2配置監聽端口和IP

a.添加監聽端口81
[root@apache ~]# echo "listen 0.0.0.0:81" >> /etc/httpd/conf/httpd.conf 
b.檢測并重啟httpd
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
c.查看端口號
[root@apache ~]# ss -lntup | grep httpd
tcp   LISTEN 0      511          0.0.0.0:81         0.0.0.0:*    users:(("httpd",pid=34228,fd=5),("httpd",pid=34227,fd=5),("httpd",pid=34226,fd=5),("httpd",pid=34223,fd=5))
tcp   LISTEN 0      511                *:80               *:*    users:(("httpd",pid=34228,fd=4),("httpd",pid=34227,fd=4),("httpd",pid=34226,fd=4),("httpd",pid=34223,fd=4))
d.測試
[root@apache ~]# curl 192.168.75.184:81
jeams6
e.添加IP地址
[root@apache ~]# ip addr add 192.168.75.185/24 dev eth0
f.檢測并重啟httpd
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
g.查看IP
[root@apache ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b7:fa:01 brd ff:ff:ff:ff:ff:ffaltname enp3s0altname ens160inet 192.168.75.184/24 brd 192.168.75.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.75.185/24 scope global secondary eth0valid_lft forever preferred_lft foreverinet6 fe80::c80e:1840:7e94:5d13/64 scope link noprefixroute valid_lft forever preferred_lft forever
h.測試
[root@apache ~]# curl 192.168.75.185:81
jeams

3.1.3配置文件壓縮

啟用數據壓縮功能能夠減少網絡IO的數據量,提高服務器的網絡吞吐能力,配置文件默認已開啟數據壓縮

a.查看壓縮模塊是否已經加載
[root@apache ~]# httpd -M | grep deflatedeflate_module (shared)
b.配置壓縮規則
[root@apache ~]# vim /etc/httpd/conf/httpd.conf
<IfModule mod_deflate.c>DeflateCompressionLevel 6AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
</IfModule>#<IfModule mod_deflate.c> 檢查服務器是否加載了mod_deflate壓縮模塊
#DeflateCompressionLevel 6設置壓縮級別為6(范圍1-9,級別越高壓縮率越高,但消耗服務器資源也越多,6是比較平衡的選擇)
#AddOutputFilterByType DEFLATE text/html text/plain text/css application/json 指定對哪些類型的文件進行壓縮,這里包含了 HTML、純文本、CSS、JSON 等常見文本類資源
c.檢測并重啟httpd
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
d.測試
查看被壓縮前的大小
[root@apache ~]# ll /www/
總用量 2958
-rw-r--r-- 1 root root  389  9月  9 04:06 china
-rw-r--r-- 1 root root  1658  9月  9 04:06 jeams
-rw-r--r-- 1 root root  456  9月  9 04:50 jeams.html
-rw-r--r-- 1 root root  455  9月  9 04:50 ok.html
壓縮后的大小
[root@apache ~]# curl --compressed -I 192.168.75.184/jeams.html
HTTP/1.1 200 OK
Date: Tue, 09 Sep 2025 09:05:07 GMT
Server: Apache
Last-Modified: Tue, 09 Sep 2025 08:50:38 GMT
ETag: "4-63e5a65ef230e"
Accept-Ranges: bytes
Content-Length: 350    #被壓縮的大小
Content-Type: text/html; charset=UTF-8

3.1.4配置持久連接

持久連接指的是建立連接后,每個資源獲取完后不會立即斷開連接,而是保持一段時間后斷開

a.編輯配置文件
[root@apache ~]# vim /etc/httpd/conf/httpd.conf
KeepAlive on  #開啟持久連接
MaxKeepAliveRequests 100  #在一個持久連接內,最多可以累計處理100次請求
KeepAliveTimeout 10  #持久連接保持時間
b.檢測并重啟
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
c.安裝測試軟件
[root@apache ~]# yum install telnet -y#telnet是一個用于遠程登錄和測試網絡連接的工具,安裝后可以用它測試服務器的端口是否開放
d.測試
輸入測試內容
[root@apache ~]# echo 666 > /www/jeams.html
[root@apache ~]# echo 888 > /www/ok.html
開始測試
[root@apache ~]# telnet 192.168.75.184 80
Trying 192.168.75.184...
Connected to 192.168.75.184.
Escape character is '^]'.
GET /jeams.html HTTP/1.1    #輸入請求行信息
host: 192.168.75.184        #輸入請求頭信息#這個空格是結束行,必須要敲!!!
HTTP/1.1 200 OK
Date: Tue, 09 Sep 2025 08:58:24 GMT
Server: Apache
Last-Modified: Tue, 09 Sep 2025 08:50:38 GMT
ETag: "4-63e5a65ef230e"
Accept-Ranges: bytes
Content-Length: 4
Content-Type: text/html; charset=UTF-8666
GET /ok.html HTTP/1.1      #在持久連接時間內繼續請求
host: 192.168.75.184       #第一個資源請求完成,不會斷開,可以繼續請求第二個資源#這個空格是結束行,必須要敲!!!
HTTP/1.1 200 OK
Date: Tue, 09 Sep 2025 08:58:29 GMT
Server: Apache
Last-Modified: Tue, 09 Sep 2025 08:50:49 GMT
ETag: "4-63e5a6696acd7"
Accept-Ranges: bytes
Content-Length: 4
Content-Type: text/html; charset=UTF-8888
Connection closed by foreign host.  #時間到達后自動斷開

3.1.5定義路徑別名

alias指令用于在URL和文件系統之間實現映射,使不在DocumentRoot目錄下的內容也能成為項目的一部分

a.編輯配置文件
[root@apache ~]# vim /etc/httpd/conf/httpd.conf 
alias /test /alias/alias-test    
<directory /alias/alias-test>allowoverride nonerequire all granted
</directory> #alias /test /alias/alias-test  定義一個別名,當訪問http://服務器地址/test時,Apache會轉到/alias/alias-test目錄下查找資源
#allowoverride none   禁用該目錄的.htaccess文件
#require all granted  允許所有客戶端訪問該目錄下的內容
b.創建目錄并輸入內容
[root@apache ~]# mkdir -p /alias/alias-test
[root@apache ~]# echo "hello,jeams" > /alias/alias-test/index.html
c.檢測并重啟
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
d.測試
[root@apache ~]# curl 192.168.75.184/test/
hello,jeams

3.2訪問資源控制

3.2.1編輯配置文件

[root@apache ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www"
<directory /www>DirectoryIndex disabled  #禁用默認的索引文件index.htmloptions indexes followsymlinks  #indexes表示顯示目錄內容列表,followsymlinks表示追蹤軟鏈接allowoverride none  #none表示不允許讀取.htaccess文件中設置的options值,實踐中不要使用.htaccess文件,會降低性能require all granted
</directory>

3.2.2將默認的配置文件不生效并創建軟鏈接

#禁用Apache默認歡迎頁面的配置文件
[root@apache ~]# mv /etc/httpd/conf.d/welcome.conf {,.bak}
#創建軟鏈接
[root@apache ~]# ln -s /var/www/html/index.html /www/link.html

3.2.3檢測并重啟

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

3.2.4測試

a.Linux上測試
[root@apache ~]# curl -I 192.168.75.184
HTTP/1.1 200 OK
Date: Wed, 10 Sep 2025 02:13:21 GMT
Server: Apache
Content-Type: text/html;charset=ISO-8859-1
b.Windows上測試

3.2.5控制特定主機訪問

a.不允許192.168.75.1主機訪問

編輯配置文件

[root@apache ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www"           #指定Apache的網站根目錄為/www
<directory /www> DirectoryIndex disabled #禁用默認首頁文件options indexes followsymlinks #在目錄下沒有默認首頁且沒有禁用目錄索引時會顯示目錄內文件列表allowoverride none  #禁用該目錄下的 .htaccess 文件<requireall>require all granted  #允許所有require not ip 192.168.75.1 #拒絕該主機</requireall>
</directory>

檢測并重啟

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

測試

Linux端:

[root@apache ~]# curl -I 192.168.75.184
HTTP/1.1 200 OK
Date: Wed, 10 Sep 2025 02:14:14 GMT
Server: Apache
Content-Type: text/html;charset=ISO-8859-1

Windows端:

b.允許192.168.75.1主機訪問

編輯配置文件

[root@apache ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www"    #指定Apache網站根目錄為/www
<directory /www>DirectoryIndex disabled #禁用默認首頁文件options indexes followsymlinks #在目錄下沒有默認首頁且沒有禁用目錄索引時會顯示目錄內文件列表allowoverride none  #禁用該目錄下的 .htaccess 文件<requireany>require all denied  #拒絕所有require ip 192.168.75.1  #允許該主機訪問</requireany>
</directory>

測試重啟

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

測試

Liunx端:

[root@apache ~]# curl -I 192.168.75.184
HTTP/1.1 403 Forbidden
Date: Wed, 10 Sep 2025 02:15:18 GMT
Server: Apache
Content-Type: text/html; charset=iso-8859-1

Windows端:

3.3訪問日志配置

3.3.1編輯配置文件

[root@apache ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/www"
<directory /www>DirectoryIndex disabled #禁用默認首頁文件options indexes followsymlinks #在目錄下沒有默認首頁且沒有禁用目錄索引時會顯示目錄內文件列表allowoverride none  #禁用該目錄下的 .htaccess 文件require all granted #允許所有客戶端登錄
</directory>
LogFormat "%h %l %u test-format %{user-agent}i" test-format  #配置自定義日志格式
customlog /http-log/access.log test-format  #使用自定義日志

3.3.2創建目錄

[root@apache ~]# mkdir /http-log/

3.3.3檢測并重啟

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

3.3.4測試

[root@apache ~]# cat /http-log/access.log 
192.168.75.184 - - test-format curl/7.76.1

3.4虛擬主機配置

apache服務支持在一臺物理服務器上配置多個網站,我們可以通過虛擬主機配置來實現該功能

apache服務中配置了虛擬主機,還需要在DNS解析中添加域名解析,將域名指向apache服務器所在的IP地址

DNS解析負責將域名解析到apache服務器上,虛擬主機配置負責區分不同的網站,將不同點分域名與內容分別對應起來

多虛擬主機的實現方式:

基于端口實現:用不同的端口標識不同的虛擬主機

基于IP實現:用不同的IP地址標識不同的虛擬主機

基于域名實現:用不同的域名標識不同的虛擬主機

3.4.1基于端口實現

a.編輯配置文件
[root@apache ~]# vim /etc/httpd/conf.d/port.conf 
<Directory /virtualhost>
Allowoverride none           #禁用該目錄下.htaccess文件的作用
Require all granted          #允許所有客戶端訪問該目錄
</Directory>
<VirtualHost 192.168.75.185:80>
DocumentRoot /virtualhost/port/80    #存放網頁文件的路徑
ServerName 192.168.75.185            #綁定的IP
</VirtualHost>
Listen 888
<VirtualHost 192.168.75.185:888>
DocumentRoot /virtualhost/port/888   #存放網頁文件的路徑
ServerName 192.168.75.185            #綁定的IP
</VirtualHost>
b.創建目錄并往不同端口里面寫內容
[root@apache ~]# mkdir -p /virtualhost/port/{80,888}
[root@apache ~]# echo "I like you" > /virtualhost/port/80/index.html
[root@apache ~]# echo "you is my girl" > /virtualhost/port/888/index.html
c.創建臨時IP
[root@apache ~]# ip addr add 192.168.75.185/24 dev eth0
[root@apache ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b7:fa:01 brd ff:ff:ff:ff:ff:ffaltname enp3s0altname ens160inet 192.168.75.184/24 brd 192.168.75.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.75.185/24 scope global secondary eth0valid_lft forever preferred_lft foreverinet6 fe80::c80e:1840:7e94:5d13/64 scope link noprefixroute valid_lft forever preferred_lft forever
d.檢測并重啟
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
e.測試
80端口

888端口

3.4.2基于IP實現

a.編輯配置文件
[root@apache ~]# vim /etc/httpd/conf.d/ip.conf 
<Directory /virtualhost>Allowoverride none           #禁用該目錄下.htaccess文件的作用Require all granted          #允許所有客戶端訪問該目錄
</Directory>
<VirtualHost 192.168.75.186:80>
DocumentRoot /virtualhost/ip/186   #存放該IP對應的網頁文件
ServerName 192.168.75.186          #綁定的IP
</VirtualHost>
<VirtualHost 192.168.75.187:80>
DocumentRoot /virtualhost/ip/187   #存放該IP對應的網頁文件
ServerName 192.168.75.187          #綁定的IP
</VirtualHost>
b.創建目錄并編寫內容到文件里
[root@apache ~]# mkdir -p /virtualhost/ip/{186,187}
[root@apache ~]# echo "jeams 192.168.75.186" > /virtualhost/ip/186/index.html
[root@apache ~]# echo "jeams 192.168.75.187" > /virtualhost/ip/187/index.html
c.添加臨時IP
[root@apache ~]# ip addr add 192.168.75.186/24 dev eth0
[root@apache ~]# ip addr add 192.168.75.187/24 dev eth0
[root@apache ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:b7:fa:01 brd ff:ff:ff:ff:ff:ffaltname enp3s0altname ens160inet 192.168.75.184/24 brd 192.168.75.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.75.185/24 scope global secondary eth0valid_lft forever preferred_lft foreverinet 192.168.75.186/24 scope global secondary eth0valid_lft forever preferred_lft foreverinet 192.168.75.187/24 scope global secondary eth0valid_lft forever preferred_lft foreverinet6 fe80::c80e:1840:7e94:5d13/64 scope link noprefixroute valid_lft forever preferred_lft forever
d.檢測并重啟
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
e.測試
Linux端:

192.168.75.186

[root@apache ~]# curl 192.168.75.186
jeams 192.168.75.186

192.168.75.187

[root@apache ~]# curl 192.168.75.187
jeams 192.168.75.187
Windows端:

192.168.75.186

192.168.75.187:

3.4.3基于域名實現

a.編輯配置文件
[root@apache ~]# vim /etc/httpd/conf.d/name.conf 
<Directory /virtualhost>Allowoverride none           #禁用該目錄下.htaccess文件的作用Require all granted          #允許所有客戶端訪問該目錄
</Directory>
<VirtualHost 192.168.75.184:80>
DocumentRoot /virtualhost/king #存放該域名對應的網頁文件
ServerName www.king.com        #域名為www.king.com
</VirtualHost>
<VirtualHost 192.168.75.184:80>
DocumentRoot /virtualhost/jeams#存放該域名對應的網頁文件
ServerName www.jeams.org       #域名為www.jeams.org
ServerAlias haha.jeams.org     #別名為haha.jeams.org
</VirtualHost>
b.創建目錄并寫入文本
[root@apache ~]# mkdir -p /virtualhost/{king,jeams}
[root@apache ~]# echo www.king.com > /virtualhost/king/index.html
[root@apache ~]# echo www.jeams.org > /virtualhost/jeams/index.html
c.檢測并重啟
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
d.域名解析
[root@apache ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.75.184    apache www.king.com www.jeams.org haha.jeams.org
e.測試
Linux端
www.king.com
[root@apache ~]# curl www.king.com
www.king.com
www.jeams.org
[root@apache ~]# curl www.jeams.org
www.jeams.org
haha.jeams.org
[root@apache ~]# curl haha.jeams.org
www.jeams.org
Windows端
編輯Windows域名解析本地配置文件路徑
C:\Windows\System32\drivers\etc\hosts
添加以下內容到hosts文件
 192.168.75.184   www.king.com  www.jeams.org haha.jeams.org
www.king.com

www.jeams.org

haha.jeams.org

3.5錯誤頁面配置

3.5.1編輯配置文件

[root@apache ~]# vim /etc/httpd/conf/httpd.conf
errordocument 403 "<h1>sorry!</h1>permission denied\n"
errordocument 404 "<h1>sorry!</h1>your page not found\n"

3.5.2檢測并重啟

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

3.5.3測試(本次測試基于域名實現的配置文件上改)

a.出現403(設置黑名單,開啟SELinux,將數據給備份或者改名)
設置黑名單
[root@apache ~]# vim /etc/httpd/conf.d/name.conf 
<Directory /virtualhost/king>Allowoverride none<requireall>require all granted         #允許所有require not ip 192.168.75.1 #拒絕該主機</requireall>
</Directory>
<VirtualHost 192.168.75.184:80>
DocumentRoot /virtualhost/king
ServerName www.king.com
</VirtualHost>
<VirtualHost 192.168.75.184:80>
DocumentRoot /virtualhost/jeams
ServerName www.jeams.org
ServerAlias haha.jeams.org
</VirtualHost>
檢測并重啟
[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd
Windows上查看結果

win+r:運行對話框

瀏覽器查看

開啟SELinux
[root@apache ~]# vim /etc/selinux/config 
SELINUX=enforcing
Windows端瀏覽器查看

將數據給備份或改名
[root@apache ~]# mv /etc/httpd/conf.d/name.conf /etc/httpd/conf.d/name
Windows端瀏覽器查看

b.出現404(沒有這個文件)
[root@apache ~]# curl 192.168.75.184/jeams6
<h1>sorry!</h1>your page not found

3.6訪問驗證配置

3.6.1編輯配置文件

[root@apache ~]# vim /etc/httpd/conf.d/auth.conf
<VirtualHost 192.168.75.188:80>
servername 192.168.75.188          #綁定的IP
documentroot /virtualhost/auth     #網站的根目錄
errordocument 401 /noauth.html     #當出現401未授權錯誤時,轉到/noauth.html
</VirtualHost>
<Directory /virtualhost/auth>
authtype basic                     #使用HTTP基本認證
authname "please login:"           #認證信息彈出
authuserfile /etc/httpd/auth-password #引用之前創建的密碼文件
require user jeams xiaoming        #僅允許指定用戶(jeams和xiaoming)訪問
</Directory>
alias /noauth.html /virtualhost/auth/prompt.html    #當出現401自動調轉到prompt.html[root@apache ~]# vim  /virtualhost/auth/prompt.html
please enter passwd!!!

3.6.2添加臨時IP

[root@apache ~]# ip a a 192.168.75.188/24 dev eth0 

3.6.3創建目錄并寫入內容

[root@apache ~]# mkdir /virtualhost/auth
[root@apache ~]# echo jeams > /virtualhost/auth/index.html

3.6.4設置密碼

#-c表示創建新的密碼文件(如果該文件已經存在,會被覆蓋,所以第二次執行的時候不用加-c)
[root@apache ~]# htpasswd -c /etc/httpd/auth-password jeams
New password: 
Re-type new password: 
Adding password for user jeams
[root@apache ~]# htpasswd  /etc/httpd/auth-password xiaoming
New password: 
Re-type new password: 
Adding password for user xiaoming

3.6.5查看密碼文件

[root@apache ~]# cat /etc/httpd/auth-password 
jeams:$apr1$695OAFmJ$iQ3m4RpvxwvD3UmzpBFlM/
xiaoming:$apr1$q0X9wH09$jtfTvyWCTDeyNp.VcZRG90

3.6.6檢測并重啟

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

3.6.7測試

a.無指定用戶直接測試
[root@apache ~]# curl 192.168.75.188
please enter passwd ! ! ![root@apache ~]# curl -I  192.168.75.188
HTTP/1.1 401 Unauthorized
Date: Wed, 10 Sep 2025 10:26:34 GMT
Server: Apache
WWW-Authenticate: Basic realm="please login:"
Last-Modified: Wed, 10 Sep 2025 07:37:33 GMT
ETag: "1a-63e6d7e6391fd"
Accept-Ranges: bytes
Content-Length: 26
Content-Type: text/html; charset=UTF-8
b.指定用戶測試
第一種方法
#-u 指定用戶登錄
[root@apache ~]# curl -u jeams 192.168.75.188
Enter host password for user 'jeams':
jeams
第二種方法
#自動將認證信息以HTTP基本認證的方式發送給服務器,無需手動輸入
[root@apache ~]# curl http://xiaoming:123@192.168.75.188
jeams#xiaoming:123 表示使用用戶名xiaoming和密碼123進行身份驗證
#@192.168.75.188 表示要訪問的服務器地址(即你配置了身份驗證的虛擬主機)

c.Windows端(輸入http://xiaoming:123@192.168.75.188)

4.apache實現https網站

4.1安裝軟件

#安裝Apache的SSL模塊
[root@apache ~]# yum install mod_ssl -y
#檢測Apache是否加載了SSL模塊
[root@apache ~]# httpd -M | grep sslssl_module (shared)

4.2編輯文件

[root@apache ~]# vim /etc/httpd/conf.d/https.conf
<virtualhost 192.168.75.189:443>
SSLEngine on              #啟用SSL加密功能
#指定SSL證書和私鑰文件(之前生成的自簽名證書)
SSLCertificateFile /etc/httpd/certs/https.crt #公鑰證書 
SSLCertificateKeyFile /etc/httpd/certs/https.key #私鑰證書
DocumentRoot /virtualhost/https
ServerName 192.168.75.189       #網站根目錄
<directory /virtualhost/https>  #綁定的IP
DirectoryIndex index.html       #默認首頁文件
allowoverride none              #禁用.htaccess
require all granted             #允許所有客戶端訪問
</directory>
</virtualhost>

4.3添加臨時IP

[root@apache ~]# ip addr add 192.168.75.189/24 dev eth0

4.4創建目錄用于存放SSL證書

[root@apache ~]# mkdir /etc/httpd/certs

4.5生成SSL證書

4.5.1生成一個RSA私鑰文件,用于加密和解密SSL通信

[root@apache ~]# openssl  genrsa  > /etc/httpd/certs/https.key

4.5.2基于RSA私鑰文件創建一個自簽名SSL證書

[root@apache ~]# openssl  req  -utf8  -new  -key /etc/httpd/certs/https.key -x509  -days  365  -out /etc/httpd/certs/https.crt-utf8:支持UTF-8字符輸入(如中文單位/地區信息)
-new:生成新的證書請求
-x509:直接生成自簽名證書(而非證書請求文件)
-days 365:證書有效期為365天
-out:指定輸出的證書文件路徑

注意:輸入這條命令會叫你填寫國家代碼,省份,地區,公司,部門,域名,郵箱

4.5.3創建目錄并編寫內容

[root@apache ~]# mkdir /virtualhost/https/ -p
[root@apache ~]# echo "jeams,this is for you" > /virtualhost/https/index.html 

4.5.4檢測并重啟

[root@apache ~]# httpd -t
Syntax OK
[root@apache ~]# systemctl restart httpd

4.5.5測試

Linux測試
#-k 標識忽略SSL證書驗證(因為你使用的是自簽名證書,不被系統默認信任)
[root@apache ~]# curl -k https://192.168.75.189/index.html
jeams,this is for you
Windows測試

注意:因為是自己做的證書,瀏覽器會提醒你不安全,你點擊高級并繼續訪問即可看到測試內容

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96784.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96784.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96784.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jajajajajajajava

線程1 線程概念進程:進程指正在內存中運行的程序。進程具有一定的獨立性。線程:線程是進程中的一個執行單元。負責當前進程中程序的執行。一個進程中至少有一個線程。如果一個進程中有多個線程&#xff0c;稱之為多線程程序。java中的線程采用的是搶占式調度&#xff0c;如果線…

虛擬機CentOS里JDK的安裝與環境配置

---本文以JDK17為例---步驟 1&#xff1a;進入/tmp臨時目錄# 進入臨時目錄 cd /tmp步驟 2&#xff1a;下載 Java 17 安裝包wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.9%2B9/OpenJDK17U-jdk_x64_linux_hotspot_17.0.9_9.tar.gz步驟 3&am…

mybatis-plus多租戶兼容多字段租戶標識

默認租戶插件處理器的缺陷 在springboot工程中引入mybatis-plus的租戶插件TenantLineInnerInterceptor&#xff0c;能簡化我們的數據隔離操作&#xff0c;例如各類含租戶用戶登錄權限的rest接口中&#xff0c;不需要再根據登錄用戶-set租戶條件-觸發查詢&#xff0c;租戶插件能…

HBase高級特性(布隆過濾器和協處理器)、列族設計、rowkey設計以及熱點問題處理

在闡述HBase高級特性和熱點問題處理前&#xff0c;首先回顧一下HBase的特點&#xff1a;分布式、列存儲、支持實時讀寫、存儲的數據類型都是字節數組byte[]&#xff0c;主要用來處理結構化和半結構化數據&#xff0c;底層數據存儲基于hdfs。 同時&#xff0c;HBase和傳統數據庫…

redis sentinel 與 clauster 的區別

Redis Sentinel(哨兵)和Redis Cluster(集群)是Redis提供的兩種不同的高可用和擴展性解決方案,它們的設計目標和適用場景有顯著區別: 1. 核心功能與目標 Redis Sentinel 主要解決主從架構的高可用問題,實現自動故障轉移 監控主從節點狀態,當主節點故障時自動將從節點提…

MySQL數據庫中快速導入大數據sql

1.PwerShell命令頁面導入全表數據庫 -P3310 指定數據庫端口號Get-Content "本地sql文件目錄" | .\mysql -u root -p -P 33102.PwerShell命令頁面導入單表到數據庫 -P3310 指定數據庫端口號Get-Content "本地sql文件目錄" | .\mysql -u root -p -P 3310 數…

消息類型proto的編寫和生成

消息類型proto的編寫和生成 代碼如下&#xff1a; syntax"proto3"; package xypmq;enum ExchangeType {UNKNOWNTYPE0;DIRECT1;FANOUT2;TOPIC3; };enum DeliveryMode {UNKNOWNMODE0;UNDURABLE1;DURABLE2; };message BasicProperties {string id1;DeliveryMode deliver…

Vuetify:構建優雅Vue應用的Material Design組件庫

Vuetify是一個基于Material Design設計規范的Vue.js UI組件庫&#xff0c;它提供了80多個精心設計的組件&#xff0c;幫助開發者快速構建美觀且功能豐富的企業級應用。核心特性1. 完整的Material Design實現// 所有組件遵循Material Design規范 <v-btn color"primary&q…

SpringBoot 注解深剖:@RequestParam 與 @RequestBody 的終極對決,90% 的開發者都踩過這些坑!

在 SpringBoot 開發中&#xff0c;處理 HTTP 請求參數是我們每天都要面對的工作。而RequestParam和RequestBody這兩個注解&#xff0c;就像是我們手中的兩把利劍&#xff0c;既能高效解決問題&#xff0c;用不好也可能 "誤傷" 自己。作為一名資深 Java 開發者&#x…

【Docker】P2 Docker環境構建準備:MacOS 與 Linux

目錄操作系統與 Docker 的兼容性分析Docker 技術本質MacOS 環境下的 Docker 構建1. 安裝前準備2. Docker Desktop安裝3. 鏡像加速配置高級操作&#xff1a;文件共享配置Linux 環境下的 Docker 構建卸載歷史版本配置軟件源Docker 核心組件安裝系統服務配置鏡像加速器配置應用配置…

OpenCV 發票識別全流程:透視變換與輪廓檢測詳解

目錄 前言 一、核心技術原理&#xff1a;透視變換與輪廓檢測 1. 透視變換&#xff1a;讓傾斜發票 “正過來” &#xff08;1&#xff09;什么是透視變換&#xff1f; &#xff08;2&#xff09;透視變換的 5 個關鍵步驟 2. 輪廓檢測&#xff1a;精準定位發票區域 &#x…

并發:使用volatile和不可變性實現線程安全

《Java并發編程實戰》中的VolatileCachedFactorizer展示了如何使用volatile和不可變性來實現線程安全。解決了簡單緩存實現中可能出現的線程安全問題&#xff0c;同時避免了全量同步帶來的性能開銷。 場景背景 假設有一個服務&#xff08;如因數分解服務&#xff09;&#xff0…

Linux x86 stability和coredump

1 POSIX pthread_create原理 1&#xff09;fork()、pthread_create()、vfork()對應的系統調用分別是sys_fork()、sys_clone()、sys_vfork()&#xff0c;它們在內核中都是通過do_fork()實現的。 2&#xff09;系統中所有的進程都組織在init_task.tasks鏈表下面&#xff0c;每個進…

【PyTorch】多對象分割

對象分割任務的目標是找到圖像中目標對象的邊界。實際應用例如自動駕駛汽車和醫學成像分析。這里將使用PyTorch開發一個深度學習模型來完成多對象分割任務。多對象分割的主要目標是自動勾勒出圖像中多個目標對象的邊界。 對象的邊界通常由與圖像大小相同的分割掩碼定義&#xf…

RabbitMQ---面試題

總結我們所學內容&#xff0c;這里推薦博客進行復習 RabbitMQ---面試題_rabbitmq常問面試題-CSDN博客

MasterGo自動布局(Auto Layout)

自動布局是用來表示 子元素與子元素之間互相影響的一種排版方式,是一種響應式布局技術。一般是將所有元素設計完成后再使用自動布局進行設置。 自動布局就是響應式布局,就是在不同尺寸的手機上寬度不同都應該怎么展示。 一般頁面的一級元素使用約束進行相對定位,二級元素及里…

還在重啟應用改 Topic?Spring Boot 動態 Kafka 消費的“終極形態”

場景描述&#xff1a; 你的一個微服務正在穩定地消費 Kafka 的 order_topic。現在&#xff0c;上游系統為了做業務隔離&#xff0c;新增加了一個 order_topic_vip&#xff0c;并開始向其中投遞 VIP 用戶的訂單。你需要在不重啟、不發布新版本的情況下&#xff0c;讓你現有的消費…

使用vllm部署neo4j的text2cypher-gemma-2-9b-it-finetuned-2024v1模型

使用vllm部署neo4j的text2cypher-gemma-2-9b-it-finetuned-2024v1模型 系統環境準備 由于使用的基于 nvcr.io/nvidia/cuda:12.1.1-cudnn8-runtime-ubuntu22.04 的 workbench,需要進行以下準備(其他系統環境可忽略) ldconfig -p | grep libcudnn 找到 libcudnn 的so庫,然…

Coze源碼分析-資源庫-創建知識庫-前端源碼-核心組件

概述 本文深入分析Coze Studio中用戶創建知識庫功能的前端實現。該功能允許用戶在資源庫中創建、編輯和管理知識庫資源&#xff0c;為開發者提供了強大的知識管理和數據處理能力。通過對源碼的詳細解析&#xff0c;我們將了解從資源庫入口到知識庫配置彈窗的完整架構設計、組件…

基于時空數據的網約車訂單需求預測與調度優化

一、引言隨著共享出行行業的蓬勃發展&#xff0c;網約車已成為城市交通的重要組成部分。如何精準預測訂單需求并優化車輛調度&#xff0c;是提升平臺運營效率、改善用戶體驗的關鍵。本文提出一種基于時空數據的網約車訂單需求預測與調度優化方案&#xff0c;通過網格化城市空間…