一、httpd的簡介
http是Apache超文本傳輸協議服務器的主程序。它是一個獨立的后台進程,能夠處理請求的子進程和線程
http常用用的兩個版本是httpd-2.2和httpd-2.4
CentOS6系列的默認httpd版本是httpd-2.2版本的rpm包
CentOS7系列的默認httpd版本是httpd-2.4版本的rpm包
二、常用httpd版本特性
(1)httpd-2.2
事先創建進程
按需維持適當的進程
模塊化設計,核心比較小,各種功能通過模塊添加(包括PHP),支持運行時配置,支持單獨編譯模塊
支持多種方式的虛擬主機配置,如基於ip的虛擬主機,基於端口的虛擬主機,基於域名的虛擬主機等
支持https協議(通過mod_ssl模塊實現)
支持用戶認證
支持基於IP或域名的ACL訪問控制機制
支持每目錄的訪問控制(用戶訪問默認主頁時不需要提供用戶名和密碼,但是用戶訪問某特定目錄時需要提供用戶名和密碼)
支持URL重寫
支持MPM(Multi Path Modules,多處理模塊)。用於定義httpd的工作模型(單進程、單進程多線程、多進程、多進程單線程、多進程多線程)
(2)httpd-2.4
httpd-2.4的新特性:
MPM支持運行DSO機制(Dynamic Share Object,模塊的動態裝/卸載機制),以模塊形式按需加載
支持event MPM,eventMPM模塊生產環境可用
支持異步讀寫
支持每個模塊及每個目錄分別使用各自的日志級別
每個請求相關的專業配置,使用
增強版的表達式分析器
支持毫秒級的keepalive timeout
基於FQDN的虛擬主機不再需要NameVirtualHost指令
支持用戶自定義變量
支持新的指令(AllowOverrideList)
降低對內存的消耗
三、httpd的工作模型
httpd有三種工作模式:prefork,worker,event
工作模式在/etc/httpd/conf.modules.d/00-mpm.conf定義,啟動哪種模式就取消那行注釋
prefork:多進程模型,預先生成進程,一個請求用一個進程響應
一個主進程負責生成n個子進程,子進程也稱為工作進程
每個子進程處理一個用戶請求,即使沒有用戶請求,也會預先生成多個空閑進程,隨時等待請求到達,最大不會超過1024個
worker:基於線程工作,一個請求用一個線程響應(啟動多個進程,每個進程生成多個線程)
event:基於時間的驅動,一個進程處理多個請求
四、httpd的程序環境即配置文件和重要目錄
1.配置文件和重要目錄
/var/log/httpd/access.lod 訪問日志
/var/log/httpd/error_log 錯誤日志 (報錯就觀察此日志)
/var/www/html/* 站點文檔目錄
/usr/lib64/httpd/modules 模塊存儲路徑
/etc/httpd/conf/httpd.conf 主配置文件
/etc/httpd/conf/*.conf 配置文件,被主配置文件包含
apachectl -t 或 httpd -t 檢查配置文件是否有錯誤
httpd -x 測試服務運行
2.httpd自帶的工具程序
httpasswd basic認證基於文件實現時,用到的賬號密碼文件生成工具
ab 壓力測試工具
apachectl 類似systemctl命令,控制程序啟動關閉
rotatelogs 日志滾動工具
curl 可用於http認證的命令
五、httpd常用的協議狀態碼
status(狀態碼):
1xx:100-101 信息提示
2xx:200-206 成功
3xx:300-305 重定向
4xx:400-415 錯誤類信息,客戶端錯誤
5xx:500-505 錯誤類信息,服務器端錯誤
200: 成功,請求數據通過響應報文的entity-body部分發送;OK
301: 請求的URL指向的資源已經被刪除;但在響應報文中通過首部Location指明了資源現在所處的新位置;Moved Permanently
302: 響應報文Location指明資源臨時新位置 Moved Temporarily
304: 客戶端發出了條件式請求,但服務器上的資源未曾發生改變,則通過響應此響應狀態碼通知客戶端;Not Modifiled
401: 需要輸入賬號和密碼認證方能訪問資源;Unauthorized
403: 請求被禁止;Forbidden
404: 服務器無法找到客戶端請求的資源;Not Found
500: 服務器內部錯誤;Internal Server Error
502: 代理服務器從后端服務器收到了一條偽響應,如無法連接到網關;Bad Gateway
503 – 服務不可用,臨時服務器維護或過載,服務器無法處理請求
504 – 網關超時
六、httpd常用配置
1.訪問控制
法則 功能
Require all granted 允許所有主機訪問
Require all deny 拒絕所有主機訪問
Require ip IPADDR 授權指定來源地址的主機訪問
Require not ip IPADDR 拒絕指定來源地址的主機訪問
Require host HOSTNAME 授權指定來源主機名的主機訪問
Require not host HOSTNAME 拒絕指定來源主機名的主機訪問
IPADDR的類型 HOSTNAME的類型
IP:192.168.1.1
Network/mask:192.168.1.0/255.255.255.0
Network/Length:192.168.1.0/24
Net:192.168 FQDN:特定主機的全名
DOMAIN:指定域內的所有主機
httpd-2.4版本默認是拒絕所有主機訪問的,安裝后必須修改顯示授權訪問
配置示例: 允許除了ip192.168.60.55以外的所有主機訪問
<Directory /var/www/html/www>
Require not ip 192.168.60.55
Require all granted
2.虛擬主機
虛擬主機有三種:
1)相同ip不同端口
2)不同ip相同端口
3)相同ip相同端口不同域名
七、三種虛擬主機配置示例:
http2.2版本里,在<VirtualHost *:80>上面加一行
NameVirtualHost
測試時,需要做主機名解析 vim /etc/hosts
windows主機名解析 C:\windows\system32\drivers\etc\hosts
找到文件無法修改,需要把文件拖到桌面修改,添加解析,再放回原位
1.相同ip不同端口
vim /etc/httpd-2.4/httpd.conf 修改主配置文件
Listen 80
Listen 81 (需要什么端口增加哪個端口)
<VirtualHost *:80>
ServerName wang.example.com
DocumentRoot "/usr/local/apache/htdocs/wang"
ErrorLog "logs/wang-error_log"
CustomLog "logs/wang-access_log" common
<VirtualHost *:81>
ServerName chen.example.com
DocumentRoot "/usr/local/apache/htdocs/wang
ErrorLog "logs/error_log"
CustomLog "logs/access_log" common
2.不同ip相同端口
網卡配置里增加ip 192.168.160.55
臨時添加 ip addr add 192.168.160.55/24 dev ens33
永久添加 vim /etc/sysconfig/network-scright/ifcg-ens33
IPADDR=192.168.160.55
NETMASK=255.255.255.0
IPADDR=192.168.160.56
NETMASK=255.255.255.0
DNS=192.168.160.1
vim /etc/httpd-2.4/httpd.conf 修改主配置文件
<VirtualHost 192.168.160.55:80>
ServerName wang.example.com
DocumentRoot "/usr/local/apache/htdocs/wang"
ErrorLog "logs/wang-error_log"
CustomLog "logs/wang-access_log" common
<VirtualHost 192.168.160.56:80>
ServerName chen.example.com
DocumentRoot "/usr/local/apache/htdocs/wang
ErrorLog "logs/chen-error_log"
CustomLog "logs/chen-access_log" common
3.相同ip相同端口不同域名
<VirtualHost *:80>
ServerName wang.example.com
DocumentRoot "/usr/local/apache/htdocs/wang"
ErrorLog "logs/wang-error_log"
CustomLog "logs/wang-access_log" common
<VirtualHost *:80>
ServerName chen.example.com
DocumentRoot "/usr/local/apache/htdocs/chen
ErrorLog "logs//chen-error_log"
CustomLog "logs/chen-access_log" common
4.http配置注意事項
創建apache用戶
useradd -s /sbin/nologin apache
創建網頁目錄並修改屬主屬組
mkdir -pv /usr/local/apache/htdocs/chen
chown -R apache.apache /usr/local/apache/htdocs/
創建網頁
echo "wang" > /usr/local/apache/htdocs/wang/index.html
echo "chen" > /usr/local/apache/htdocs/chen/index.html
創建日志目錄
mkdir /usr/local/apache/logs
chown -R /usr/local/apache/logs/{wang,chen}
啟動服務后查看端口是否開啟
ss -ntlp #httpd默認是80端口,https默認是443端口
八、配置https步驟
啟用模塊:編輯/etc/httpd/conf.modules.d/00-base.conf文件,添加
LoadModule ssl_module modules/mod_ssl.so
1.CA生成服務器證書
建立服務器密鑰,括號必須要
cd /etc/pki/CA/
(umask 077;openssl genrsa -out private/cakey.pem 2048)
提取公鑰
openssl rsa -in private/cakey.pem -pubout
建立服務器證書
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
國家: CN
省:HuBei
城市:Wuhan
公司:runtime.example.com
需要頒發的網址:runtime.example.com
郵箱:123@123.com
openssl x509 -text -in cacert.pem
mkdir certs new certs crl
touch index.txt && echo 01 > serial
2.客戶端(需要的服務器端),生成密鑰
cd /etc/httpd && mkdir ssl && cd ssl
(umask 077;openssl genrsa -out httpd.key 2048)
生成證書簽署請求
openssl req -new -key httpd.key -days 365 -out httpd.csr
客戶端把證書請求文件發給CA
scp httpd.csr root@CA端ip:/root
CA簽署客戶端提交上來的證書
openssl ca -in /root/httpd.csr -out httpd.crt -days 365
3.配置httpd.conf
取消以下內容的注釋
LoadModule ssl_module
Include /etc/httpd/extra/httpd-vhost.conf
Include /etc/httpd/extra/httpd-ssl.conf
4 .在httpd-vhost.conf配置虛擬主機 (httpd-ssl.conf設置也可以)
DocumentRoot "/usr/local/htdocs/wang"
Servername
https://wang.example.com/
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
5.在httpd-ssl.conf配置證書的路徑
SSLCertificateFile /etc/httpd/conf/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl/httpd.key
6.檢查配置文件是否有語法錯誤。apachectl -t 或 httpd -t
7.啟動或重啟服務
8.客戶端設置hosts並以域名驗證
vim /etc/hosts
192.168.43.143 wang.example.com