Web服務
在Linux中存在許多可以提供web服務的軟體,httpd、tomcat、nginx等
- Web通訊的基本概念
- 基於B/S架構的網頁服務
- HTTP
- HTML
【1】、httpd軟體
1、httpd軟體安裝
httpd是軟體基金會寫出的
軟體基金會(Apache)
yum install -y httpd
rpm -qa httpd
httpd-2.4.37-62.module+el8.9.0+1436+2b7d5021.x86_64
2、構建基本的Web服務
# 啟動服務且開機自啟
systemctl start httpd
systemctl enable httpd
httpd服務的預設網也查詢路徑
/var/www/html
我們在該路徑下建立一個名為index.html的檔案,作為Web網站的主頁面,使用curl去訪問
echo hahaha > /var/www/html/index.html
curl 192.168.121.180
hahaha
如果網頁檔名不是index.html
會展現測試頁面
出現測試頁面的原因?
1、沒有網頁檔案
2、網頁檔名稱不是index.html
3、httpd的訪問控制規則被拒絕
4、SELinux沒有關閉
3、httpd的配置檔案
httpd的配置檔案
/etc/httpd/conf/httpd.conf
(1)、模擬配置檔案錯誤
模擬修改配置檔案失誤,導致httpd啟動失敗,如何糾錯
我們將配置檔案中的註釋,釋放一行,就會引起httpd啟動失敗
systemctl restart httpd
# 當我們重啟時會報以下錯誤,這時我們可以根據日誌去查詢報錯。
# 使用系統給我們的journalctl -xe命令去檢視
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xe" for details.
當我們使用journalctl -xe去查錯誤時,要注意,
在啟動失敗後要立刻去查錯,要不然可能會被後面的日誌覆蓋
(2)、設定httpd尋找網頁的路徑
httpd預設尋找網頁的路徑是
/var/www/html
這個是可以修改的
配置檔案中的相關引數
DocumentRoot:指定存放網頁檔案的路徑
在配置檔案中可以存在多個DocumentRoot,但是隻能有一個DocumentRoot有效,最下面的一個DocumentRoot生效
# 配置檔案
DocumentRoot "/var/www/myweb"
(3)、路徑執行訪問控制
將DocumentRoot修改為“/webroot”
此時再重啟軟體,再/webroot目錄下建立index.html檔案
使用curl去訪問,觀察結果?
我們會發現雖然在/webroot下有了index.html檔案,但是我們測試時,依舊出現測試頁面
出現上述問題的原因:
httpd軟體:針對存放網頁的路徑實行訪問控制,自動繼承父目錄的規則(就近原則)
假設訪問控制規則:
/var/www 允許所有客戶端訪問
/abc 拒絕所有客戶端訪問
此時
/var/www/test test沒有規則,但是www具有規則,此時,test就會自動繼承www的規則來作為自己的規則
/abc/aaa aaa沒有規則,但是abc具有規則,abc拒絕所有,那麼aaa也就是拒絕所有
如果我對aaa專門設定了規則:允許所有,那麼aaa就不會繼承abc的規則,而按照為aaa設定的規則
<Directory "/var/www">
AllowOverride None
# Allow open access:
Require all granted # 允許所有客戶端訪問
</Directory>
<Directory />
AllowOverride none
Require all denied # 拒絕所有客戶端訪問,針對客戶端
</Directory>
所以最開始的問題就有了答案
在預設情況下,必須在/var/www目錄下的網頁才允許客戶端訪問
解決方式:修改配置檔案,給/webroot新增規則
DocumentRoot "/webroot"
<Directory "/webroot">
Require all granted
</Directory>
(4)、DocumentRoot
網路路徑和實際路徑
網路路徑:http://192.168.121.180
實際路徑:DocumentRoot所設定的路徑/webroot----->index.html
DocumentRoot:指定網頁檔案的根目錄(起始點)
(5)、呼叫配置檔案
主配置檔案:
/etc/httpd/conf/httpd.conf
呼叫配置檔案:
/etc/httpd/conf.d/*.conf
我們可以在呼叫配置檔案下新建配置檔案,主配置檔案會呼叫 呼叫配置檔案下的內容。
我們在
/etc/httpd/conf.d/*.conf
下新建的配置檔案,修改起來比較方便
在主配置檔案中存在
IncludeOptional conf.d/*.conf
這樣一行,這就指定了呼叫配置檔案的位置
4、埠
標識協議和程序
一個協議可以監聽多個埠,一個埠只能由一個協議負責
建議自定義埠時大於1024,埠極限65535
http:80
Listen 80
【2】、虛擬Web主機
虛擬Web主機的優先順序高於DocumentRoot的設定
埠的優先順序高於虛擬Web主機
1、基於域名
編寫新的配置檔案,在同一個IP下設定不同的域名
<VirtualHost 192.168.121.180:80>
ServerName www.qq.com
DocumentRoot /var/www/qq
</VirtualHost>
<VirtualHost 192.168.121.180:80>
ServerName www.lol.com
DocumentRoot /var/www/lol
</VirtualHost>
由於我們沒有設定DNS,因此我們需要編寫hosts檔案,來達到可以透過域名去訪問的效果
192.168.121.180 www.qq.com www.lol.com
透過域名訪問
curl www.qq.com
wo shi qq
curl www.lol.com
wo shi lol
2、基於埠
修改配置檔案
將域名改為相同的域名,設定不一樣的埠
<VirtualHost 192.168.121.180:80>
ServerName www.qq.com
DocumentRoot /var/www/qq
</VirtualHost>
Listen 8080
<VirtualHost 192.168.121.180:8080>
ServerName www.qq.com
DocumentRoot /var/www/lol
</VirtualHost>
驗證:
[root@moudle01 11:28:58 ~]# curl 192.168.121.180
wo shi qq
[root@moudle01 11:29:01 ~]# curl 192.168.121.180:8080
wo shi lol
[root@moudle01 11:30:10 ~]# curl www.qq.com:8080
wo shi lol
[root@moudle01 11:30:31 ~]# curl www.qq.com
wo shi qq