1. 程式人生 > >httpd/apache編譯安裝配置詳解

httpd/apache編譯安裝配置詳解

apachectl 訪問 這一 block combined enable config yum 開發環境

一.httpd介紹

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編譯安裝配置詳解