Linux web服務

Linux小菜鸟發表於2024-07-09

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去查錯誤時,要注意,

在啟動失敗後要立刻去查錯,要不然可能會被後面的日誌覆蓋

image-20240604214519882

(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

相關文章