httpd/apache編譯安裝配置詳解
1.httpd是http協議的一個經典實現,也是apache組織中的一個頂級項目,其官方站點為httpd.apache.org。
2.httpd的運行機制
高度模塊化(Core+Modules):采用核心模塊+擴展模塊的機制
DSO(Dynamic Shared Object)機制:可以按需動態的裝載模塊來實現相應的功能
采用MPM(Multipath Processing Moules):使用多路處理模塊,有三種工作模型
(1)prefork模型:多進程模型,一個主進程負責管理子進程,創建套接字,接受用戶請求,並將請求分發給子進程,由子進程具體負責處理用戶請求,工作方式為,事先生成幾個空閑的進程,隨時等待著處理用戶請求。
(2)worker模型:多進程,多線程模型,一個主進程負責管理子進程,創建套接字,接受用戶請求,並將用戶請求分發給每個子進程,而每個子進程又生成多個線程,每個線程負責具體的處理用戶請求。
(3)event:事件驅動,多進程模型,一個主進程負責管理子進程,創建套接字,接受用戶請求,並將用戶請求交給子進程,每個子進程基於事件驅動處理多個請求,並將結果返回給客戶端。
3.httpd有豐富的功能特性,常用的有:
支持CGI(Common Gataway Interface)協議
支持虛擬主機:可以基於ip,port,FQDN實現虛擬主機
支持反向代理機制
支持負載均衡功能
具有豐富的認證機制
支持第三方模塊支持路徑別名
三.httpd常用的配置
1.在httpd中實現虛擬主機
所謂的虛擬主機是指在通過在配置文件中提供不同的配置,從而可以實現在同一臺物理服務器上提供多個站點的訪問路徑,實現方式有三種,分別是:
IP地址相同,監聽的端口不同,通過不同的端口號來訪問
IP地址不同,端口可以相同,通過不同的IP來訪問
主機名不同,端口號和IP地址可以相同,通過不同的主機名稱來訪問。
使用虛擬主機的前提是關閉中心主機功能,即將主配置文件中的DocumentRoot這一指令註釋。
2.持久和非持久連接
當客戶端與服務器端進行長時間的通信時,客戶端會發出一系列的請求,服務器端要這些請求一一進行響應,而http協議基於tcp協議建立連接,於是對這一系列的請求和響應可以每次經過一個單獨的tcp連接發送,也可以都經過同一個tcp連接進行發送;每次(每個資源的傳輸)都使用不同的tcp進行發送的方式就叫做非持久連接,每次都經過同一個tcp連接發送的方式叫做持久連接。在httpd中實現持久功能:
KeepAlive {on|off}:開啟或關閉持久連接功能
MaxKeepAliveRequests 100 :允許建立持久連接的最大客戶端請求數量
KeepAliveTimeout 15 :每個連接的最大持久連接時長
3.監聽的端口號
Listen 80
4.控制訪問法則
法則 | 功能 |
---|---|
Require all granted | 允許所有主機訪問 |
Require all deny | 拒絕所有主機訪問 |
Require ip IPADDR | 授權指定來源地址的主機訪問 |
Require not ip IPADDR | 拒絕指定來源地址的主機訪問 |
Require host HOSTNAME | 授權指定來源主機名的主機訪問 |
Require not host HOSTNAME | 拒絕指定來源主機名的主機訪問 |
Require not ip | 拒絕指定ip主機訪問 |
httpd編譯安裝
實驗環境說明:
主機名 | IP |
---|---|
[root@linfan ~] | 192.168.24.157.24 |
###環境準備:
關閉防火墻和selinux
[root@linfan ~]# systemctl stop firewalld
[root@linfan ~]# systemctl disable firewalld
[root@linfan ~]# sed -ri ‘s/^(SELINUX=).*/\1disabled/g‘ /etc/selinux/config
[root@linfan ~]# setenforce 0
安裝開發環境:
[root@linfan ~]# yum groups mark install "Development Tools"
[root@linfan ~]# groupadd -r apache
[root@linfan ~]# useradd -M -s /sbin/nologin -g apache apache
[root@linfan ~]# yum -y install openssl-devel pcre-devel expat-devel libtool
下載並安裝apr-1.4+和apr-util-1.4+
[root@linfan ~]# cd /usr/src/
[root@linfan src]#yum -y install wget
wget http://mirrors.shu.edu.cn/apache//apr/apr-1.6.3.tar.bz2
wget http://mirrors.shu.edu.cn/apache//apr/apr-util-1.6.1.tar.bz2
ls
解壓軟件包:
tar xf apr-1.6.3.tar.bz2
tar xf apr-util-1.6.1.tar.bz2
ls
編譯安裝:
[root@linfan src]# cd apr-1.6.3cd apr-1.6.3
[root@linfan apr-1.6.3]# vim configure
cfgfile="${ofile}T"
trap "$RM \"$cfgfile\"; exit 1" 1 2 15
# $RM "$cfgfile //將此行#號取消 或刪除此行
[root@linfan apr-1.6.3]# ./configure --prefix=/usr/local/apr
[root@linfan apr-1.6.3]# make && make install
[root@linfan apr-1.6.3]# cd /usr/src/apr-util-1.6.1
[root@linfan apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@linfan apr-util-1.6.1]# make && make install
###編譯安裝httpd
[root@linfan ~]# wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.34.tar.bz2
[root@linfan ~]# ls
[root@linfan ~]# tar xf httpd-2.4.34.tar.bz2
[root@linfan ~]# cd httpd-2.4.34
[root@linfan httpd-2.4.34]# ./configure --prefix=/usr/local/apache \ //網站發布存放的目錄
> --sysconfdir=/etc/httpd24 \ //httpd編譯安裝的主配置文件
> --enable-so > --enable-ssl > --enable-cgi > --enable-rewrite > --with-zlib > --with-pcre > --with-apr=/usr/local/apr > --with-apr-util=/usr/local/apr-util/ > --enable-modules=most > --enable-mpms-shared=all > --with-mpm=prefork
[root@linfan ~]# make && make install
#虛擬主機:
虛擬主機有三種類型
相同IP不同端口
不同IP相同端口
相同IP相同端口不同域名
1.當相同IP不同端口時:
編輯httpd編譯安裝的主配置文件
[root@linfan ~]# vim /etc/httpd24/httpd.conf
//找到ServerName www.example.com:80 取消#號註釋
//找到Listen 80 在下面添加不同端口 Listen 81
//在最後面添加下面如下內容
#virtual host 1
<VirtualHost 192.168.24.157:80>
DocumentRoot "/usr/local/apache/htdocs/lin" //存放網站路徑
ErrorLog "logs/lin/error_log"
CustomLog "logs/lin/access_log" combined
<Directory "/usr/local/apache/htdocs/lin">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
#virtual host 2
<VirtualHost 192.168.24.157:81> //編輯此行端口號
DocumentRoot "/usr/local/apache/htdocs/fan"
ErrorLog "logs/fan/error_log"
CustomLog "logs/fan/access_log" combined
<Directory "/usr/local/apache/htdocs/fan">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
[root@linfan ~]# tail -25 /etc/httpd24/httpd.conf
[root@linfan ~]# cd /usr/local/apache/logs/ //建立與httpd主配置文件相同路徑的目錄
[root@linfan logs]# mkdir lin
[root@linfan logs]# mkdir fan
[root@linfan logs]# cd /usr/local/apache/htdocs/ //在網站存放目錄下 也創建與之相同的目錄
[root@linfan htdocs]# mkdir lin
[root@linfan htdocs]# mkdir fan
[root@linfan htdocs]# chown -R apache.apache /usr/local/apache/htdocs/
//給網站存放的目錄更改屬主屬組為apache
ll
[root@linfan htdocs]# echo ‘hello lin‘ > lin/index.html
[root@linfan htdocs]# echo ‘hello fan‘ > fan/index.html
[root@linfan ~]# pkill httpd
[root@linfan ~]# ps -ef|grep httpd
[root@linfan ~]# ss -natl
[root@linfan ~]# cd /usr/local/apache/bin
[root@linfan bin]# ./apachectl start 啟動httpd服務
[root@linfan bin]# ./apachectl -t
//檢查是否有語法錯誤
###在客戶端檢測
2.不同IP相同端口
[root@linfan ~]# vim /etc/httpd24/httpd.conf
找到ServerName www.example.com:80 取消#號註釋
找到listen 80 刪除之前的 listen 81
在最後面添加下面如下內容
#virtual host 1
<VirtualHost 192.168.24.157:80>編輯此行的IP
DocumentRoot "/usr/local/apache/htdocs/lin"
ErrorLog "logs/lin/error_log"
CustomLog "logs/lin/access_log" combined
<Directory "/usr/local/apache/htdocs/lin">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
#virtual host 2
<VirtualHost 192.168.24.180:80>
DocumentRoot "/usr/local/apache/htdocs/fan"
ErrorLog "logs/fan/error_log"
CustomLog "logs/fan/access_log" combined
<Directory "/usr/local/apache/htdocs/fan">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
[root@linfan ~]ip addr add 192.168.24.180/24 dev eth0
//建立與編輯文件對應的臨時IP
[root@linfan ~]# pkill httpd
[root@linfan ~]# ps -ef|grep httpd
[root@linfan ~]# ss -natl
[root@linfan ~]# cd /usr/local/apache/bin
[root@linfan bin]# ./apachectl start 啟動httpd服務
[root@linfan bin]# ./apachectl -t
//檢查是否有語法錯誤
在客戶端檢測
###3.相同IP相同端口不同域名
[root@linfan ~]vim /etc/httpd24/httpd.conf
找到ServerName www.example.com:80 取消#號註釋
找到Listen 80 刪除之前的 Listen 81
在最後面添加下面如下內容
#virtual host 1
<VirtualHost 192.168.24.157:80>
ServerName www.doudou.com:80 //添加此行
DocumentRoot "/usr/local/apache/htdocs/lin"
ErrorLog "logs/lin/error_log"
CustomLog "logs/lin/access_log" combined
<Directory "/usr/local/apache/htdocs/lin">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
#virtual host 2
<VirtualHost 192.168.24.157:80>
ServerName www.dou.com:80 //添加此行
DocumentRoot "/usr/local/apache/htdocs/fan"
ErrorLog "logs/fan/error_log"
CustomLog "logs/fan/access_log" combined
<Directory "/usr/local/apache/htdocs/fan">
<RequireAll>
Require all granted
</RequireAll>
</Directory>
</VirtualHost>
[root@linfan ~]# pkill httpd
[root@linfan ~]# ps -ef|grep httpd
[root@linfan ~]# ss -natl
[root@linfan ~]# cd /usr/local/apache/bin
[root@linfan bin]# ./apachectl start 啟動httpd服務
[root@linfan bin]# ./apachectl -t
//檢查是否有語法錯誤
##在客戶端檢測
在mac電腦上修改/etc/hosts/文件
ip 域名
ip 域名
在windows電腦上修改
C:\Windows\System32\drivers\etc 文件
ip 域名
ip 域名
在客戶端檢測
httpd/apache編譯安裝配置詳解