本篇博客內容主要有:
apache的簡介和安裝
apache實現文件共享
apache虛擬主機功能
apache訪問控制IP
apache用戶認證
http 工作狀態碼
一.apache簡介
apache : 意爲充滿補丁的服務器(a patchy server) , 它是一個web網站服務器軟件 , 用來發佈網站信息資源 , 給用戶提供網頁服務
工作端口:TCP 80
其他的web服務器軟件除了apache , 常見的還有nginx , tomcat(java) , iis(windows).....
相比其他web軟件其優點有:安裝配置方便簡單 , 兼容性好 , windows和linux系統都支持apache , 穩定性高 , 安全可靠 , 支持模塊擴展
apache架構基本爲:lamp(Linux + Apache + Mysql + PHP)
工作過程:
第1步、連接過程:客戶端通過瀏覽器輸入的URL採用HTTP協議與服務器之間通過TCP三次所握手建立連接。
第2步、請求過程:向服務器請求網站的主頁資源,通常默認主頁爲index.html、index.php、index.jsp等文件名。
第3步、應答過程:服務器將主頁文件傳送給客戶機瀏覽器。如果主頁不存在,會顯示網頁不存在。
第4步、關閉連接:爲了避免一直佔用服務器資源,數據傳送完畢會自動關閉TCP連接。
apache部署流程
此實驗在主機node12上進行(192.168.11.12)
systemctl stop firewalld && setenforce 0 #關閉防火牆和selinux
yum install -y httpd httpd-manual #安裝httpd軟件 ,手冊(可不安裝)
systemctl start httpd && systemctl enable httpd #啓動服務
ss -anput | grep :80 #查看80端口是否開啓
測試:
apache的默認網站目錄爲: /var/www/html/ , 在此可以設置一個簡單的主頁進行測試
date > /var/www/html/index.html
curl 192.168.11.12 #linux用curl訪問網站 , curl最小版linux系統需要安裝
windows直接用瀏覽器地址欄輸入ip即可訪問
httpd主配置文件
rpm -qc httpd #查看配置文件
其中/etc/httpd/conf/httpd.conf爲主配置文件
httpd.conf配置文件組成:全局設置、模塊設置、虛擬主機設置、目錄訪問權限設置。
全局設置:Listen監聽端口、Root默認網站根目錄、Directory目錄權限等設置
模塊設置:IfModule各種功能模塊設置,如基於用戶認證的訪問模塊、fastcgi通用網關接口模塊、PHP模塊等。
虛擬主機設置:<VirtualHost ip:port>主頁目錄、管理員郵箱設置</VirtualHost>
目錄訪問權限設置:<Directory 目錄路徑>訪問權限設置</Directory>
line | 配置選項 | 功能解釋 |
31 | ServerRoot "/etc/httpd" | apache工作目錄 |
Include conf.d/*.conf | 包含的配置文件(可在此存放虛擬主機配置文件) | |
42 | Listen 80 | 監聽所有IP的80號端口 |
56 | Include conf.modules.d/*.conf | 包含的配置文件 |
66 | User apache | apache服務進程的用戶賬號。ps -u apache |
67 | Group apache | apache服務進程的組賬號。ps -g apache |
86 | ServerAdmin root@localhost | 管理員郵箱 |
102 | <Directory /> | /根目錄訪問權限設置 |
103 | AllowOverride none | 不啓用htaccess訪問控制功能 |
104 | Require all denied | 拒絕任何人訪問 |
105 | </Directory> | 目錄權限設置的結束標記 |
119 | DocumentRoot "/var/www/html" | 默認網站主頁的根目錄 |
124 | <Directory "/var/www"> | /var/www目錄的訪問權限設置 |
125 | AllowOverride None | 不啓用htaccess訪問控制功能 |
127 | Require all granted | 允許任何人訪問 |
128 | </Directory> | 目錄權限設置的結束標記 |
131 | <Directory "/var/www/html"> | /var/www/html目錄的訪問權限設置 |
144 | Options Indexes FollowSymLinks | 啓用索引和符號鏈接功能,允許無主頁時顯示文件列表(Indexes僅用於實現文件共享) |
151 | AllowOverride None | 不啓用htaccess訪問控制功能 |
156 | Require all granted | 允許任何人訪問 |
Order allow,deny Allow from all Deny from 192.168.10.60 | 訪問規則控制的順序,先允許,後拒絕 允許任何IP的客戶機訪問此目錄 拒絕192.168.10.60的客戶機訪問此目錄 | |
157 | </Directory> | 目錄權限設置的結束標記 |
163 | <IfModule dir_module> | 關於dir_module這個模塊設置 |
164 | DirectoryIndex index.html index.php | 指定默認主頁文件名的檢索先後順序 |
165 | </IfModule> | 模塊設置的結束標記 |
171 | <Files ".ht*"> | .ht*文件訪問的權限設置 |
172 | Require all denied | 拒絕任何人訪問 |
173 | </Files> | 文件訪問權限設置的結束標記 |
182 | ErrorLog "logs/error_log" | 錯誤訪問日誌文件,完整路徑爲/etc/httpd/logs/error_log |
CustomLog logs/access_log combined | 默認網站的訪問日誌 | |
189 | LogLevel warn | 日誌文件等級爲warn警告級 |
191 | <IfModule log_config_module> | 日誌配置模塊設置 |
202 | </IfModule> | |
217 | CustomLog "logs/access_log" combined | CustomLog訪問日誌格式 |
218 | </IfModule> | 模塊設置的結束符 |
220 | <IfModule alias_module> | alias別名模塊設置 |
247 | ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" | 設置/var/www/cgi-bin/目錄的別名爲/cgi-bin |
249 | </IfModule> | |
276 | ServerName www.example.com:80 | 默認網站的域名和端口號(用域名訪問此網站) |
261 | <IfModule mime_module> | mime_module模塊設置 |
266 | TypesConfig /etc/mime.types | |
283 | AddType application/x-compress .Z | |
284 | AddType application/x-gzip .gz .tgz | |
305 | AddType text/html .shtml | |
306 | AddOutputFilter INCLUDES .shtml | |
307 | </IfModule> | |
316 | AddDefaultCharset UTF-8 | 默認的字符編碼爲UTF-8,win7採用GB2312編碼(即GBK) |
348 | EnableSendfile on | 允許發送文件。實現文件下載 |
353 | IncludeOptional conf.d/*.conf | 包含conf.d目錄下的*.conf配置文件,虛擬主機配置文件可以保存在此處。 |
二.apache實現文件共享
實例 : 對鏡像進行共享
httpd想要共享的話,需廢掉welcome.conf(默認主頁)並保證/var/www/html沒有其他.html文件
mv /etc/httpd/conf.d/welcome.conf{,.bak} #對welcome.conf文件改名爲.bak
滿足上述條件時 :
第一步 , 在/var/www/html/下創建需要分享的文件的掛載目錄
mkdir /var/www/html/iso
mount /dev/sr0 /var/www/html/iso #將鏡像掛載到/var/www/html/iso目錄
systemctl restart httpd #重啓服務
第二步 , 在瀏覽器地址欄輸入IP:192.168.11.12驗證效果
三.虛擬主機設置
虛擬主機即在一臺服務器上發佈多個不同的網站 , 通常有以下三種解決方法:
基於端口的虛擬主機 | 服務器只有一個IP,但每個網站綁定在不同的端口上 . 例如:80 , 8081 , 8082等 |
基於IP的虛擬主機 | 服務器網卡設置多個IP地址 , 每個網站綁定在不同的IP地址上 |
基於域名的虛擬主機(最常用) | 服務器只有一個IP地址 , 給服務器設置多個主機名 , 每個網站綁定在不同主機名上 |
基於端口的虛擬主機:
第一步 : 前期準備工作 , 設置3個網站目錄 , 分別設置簡單的主頁
第二步 : 編輯創建文件/etc/httpd/conf.d/gg.conf , 內容爲
第三步 : 保存文件退出後 , 重啓服務 , 進行訪問測試
基於IP的虛擬主機
第一步 : 前期準備工作 , 給主機臨時添加兩個虛擬IP , 查看效果如下圖:
第二步 : 編輯配置文件 /etc/httpd/conf.d/gg.conf 文件
第三步 : 重啓服務 , 進行測試
基於域名的虛擬主機
第一步 : 因爲是測試 , 可以修改本地域名解析文件/etc/hosts
第二步 , 重啓服務進行測試
可以看到 , 三個域名指向的是同一個IP
四 . 訪問控制IP
第一步 : 把上面的/etc/hosts文件改回 , 編輯主配置文件/etc/httpd/conf/httpd.conf , 添加如下內容:
第二步 : 重啓服務 , 用192.168.11.11(node11)和192.168.11.14(node14)兩臺主機進行訪問
結果爲192.168.11.11成功訪問 , 192.168.11.14讀取的只是apache的默認主頁文件 , /gg/www/目錄讀取不到
五 . 用戶認證
apache的用戶認證:是指客戶端在訪問網站時會提示輸入用戶名和密碼 , 通過驗證後才能顯示網頁內容
用戶認證工具 : htpasswd
查htpasswd文件由哪個包提供: yum provides htpasswd
安裝htpasswd工具的軟件 : yum install -y httpd-tools
第一步 : 創建基於用戶認證的賬號 :
htpasswd -cm /etc/httpd/htuser tom #創建tom用戶 , 並生成htuser賬號文件 和 登錄密碼
cat /etc/httpd/htuser #查看htuser文件
第二步 : 編輯主配文件/etc/httpd/conf/httpd.conf文件(也可以在/etc/httpd/conf.d)
第三步 : 重啓服務 , 進行測試
沒有輸入正確的認證用戶賬號密碼時會報錯
六 . http工作狀態碼
常見的代碼如下:
代碼 | 含義 |
100 | 請求已接收 , 客戶端可以繼續發送請求 |
101 | Switching Protocals服務器根據客戶端的請求切換協議 |
200 | 一切正常 |
201 | 服務器已經創建了文檔 |
202 | 已經接受了請求 , 但尚未處理完成 |
203 | 文檔正常返回 , 但一些頭部信息可能不正確 |
300 | 客戶端請求的資源可以在多個位置找到 |
301 | 客戶端請求的資源可以在其他位置找到 |
305 | 請求代理服務 |
400 | 請求語法錯誤 |
401 | 訪問被拒絕 |
401.1 | 登錄失敗 |
403 | 資源不可用 |
403.6 | IP地址被拒絕 |
404 | 無法找到指定資源 |
406 | 指定資源已找到 , 但MIME類型與客戶端要求不兼容 |
407 | 要求進行代理身份驗證 |
500 | 服務器內部錯誤 |
500.13 | 服務器太忙 |
501 | 服務器不支持客戶端的請求功能 |
502 | 網關錯誤 |
503 | 服務不可用 |
504 | 網關超時 , 服務器處於維護或負載過高無法響應 |
505 | 服務器不支持客戶端請求的HTTP版本 |