網絡服務之Apache

httpd_logo_wide_new.png

  互聯網這個歷史已經不算很短了,它大大方便了人類獲取信息,開闊了人類的眼界,使得讓這個世界變得小了起來,人與人之間的距離感也不會存在了,娛樂也更加豐富,聽音樂、看電影等等這一系列,都能從網上進行,這些功能,都是由www服務器來提供服務,在Linux中,提供網絡的服務器有很多種,那么今天我們就講一個比較老牌,且依然能存活的服務器“阿帕奇”英文:Apache。


一、Apache簡介

  Apache HTTP Server(簡稱Apache)是Apache軟件基金會的一個開放源代碼的網頁服務器軟件,可以在大多數電腦操作系統中運行,由于其跨平臺和安全性。被廣泛使用,是最流行的Web服務器軟件之一。它快速、可靠并且可通過簡單的API擴充,將Perl/Python等解釋器編譯到服務器中。

二、特性

  Apache支持許多特性,大部分通過編譯的模塊實現。這些特性從服務器端的編程語言支持到身份認證方案。一些通用的語言接口支持Perl,Python,Tcl, 和PHP。流行的認證模塊包括mod_access,mod_auth和mod_digest。其他的例子有SSL和TLS支持(mod_ssl),代理服務器(proxy)模塊,很有用的URL重寫(由mod_rewrite實現),定制日志文件(mod_log_config),以及過濾支持(mod_include和mod_ext_filter)。Apache日志可以通過網頁瀏覽器使用免費的腳本AWStats或Visitors來進行分析。

三、工作流程

  Apache工作在應用層,是實現http協議的服務器軟件之一,http是超文本傳輸協議,工作于應用層tcp的80端口,用戶發起http協議的請求報文,服務器收到之后進行對客戶端的響應,客戶端收到之后,通過瀏覽器顯示,其背后為html語言。而html是超文本標記語言,那么一次完整的http報文請求處理過程以如下步驟進行:  
  1、建立或處理連接:接收請求或拒絕請求。  
  2、接收請求:接收來自于網絡上的主機請求報文中對某些特定資源的一次請求過程。  
  3、處理請求:對請求報文進行分析,獲取客戶端進行請求的資源以及請求方法等相關信息。  
  4、訪問資源:獲取請求報文中的請求資源。  
  5、構建響應報文。  
  6、發送響應報文。  
  7、記錄日志。  

頁面請求過程.png

四、版本的變革

  早期發布的是apache-1.3,不過現在已經停止支持,之后發布了2.2的版本,但不支持event事件驅動機制,現在最新的版本是2.4,我們就以2.4為例進行說明。

五、操作流程

5.1 安裝

  我們都知道在Linux系統當中的安裝方式無非有兩種,一種是RPM包(RedHat公司提供的二進制包)安裝,報名叫httpd,其服務程序也叫httpd,另一種是共官方網站上去下載源碼包來進行安裝,在本次的實驗中,這兩種方式我們都會進行,其配置方式也是不盡相同,如果你配置好yum倉庫,現在就可以很簡單的以RPM方式來進行安裝,我們使用以下命令:

[root@node1 ~]# yum -y install httpd

  就這一條命令,我們的RPM包就安裝好了,可以直接啟動程序打開瀏覽器來訪問

[root@node1 ~]# systemctl start httpd.service

  打開瀏覽器,訪問方式直接輸入IP地址就可以,因為http協議瀏覽器自動加上去的,如果看到了apache的測試頁,則證明你成功了。  

_$4$(5A9P_BAAB%QI1JTK1R.png  
  那么為什么可以成功?我們可以使用ss命令用來查看:

[root@node1 ~]# ss -tnl 
State Recv-Q Send-Q Local Address:Port Peer Address:Port    
LISTEN 0     128                 *:22                 *:* 
LISTEN 0     100                 127.0.0.1:25         *:* 
LISTEN 0     128                 :::80                :::*    
LISTEN 0     128                 :::22                :::* 
LISTEN 0     100                 ::1:25               :::*

  從以上命令顯示我們看出,當服務啟動時,就會開啟80端口,我們說過,80端口是提供WEB服務的。  
以上就是以RPM包方式的安裝,那么現在我們看一下如何以源碼包方式進行安裝,源碼包的安裝過程方式很是繁雜,但是其有點是可以自由定制功能,我們使用
--enable來使用是否開啟次功能,--with用來是否添加此功能,還可以用  --with-out用來取消此功能,意思是在安裝上默認添加的功能給去除掉,現在我們可以從官網上下載源碼包,其下載地址為:http://mirrors.cnnic.cn/apache//httpd/httpd-2.4.25.tar.gz,直接復制就能夠下載,在Linux上,使用wget就可以。

[root@node1 ~]# wget http://mirrors.cnnic.cn/apache//httpd/httpd-2.4.25.tar.gz

  下載完成之后,由于是壓縮包,所以我們必須要解壓才能夠使用安裝,把它解壓到/usr/src/目錄下。

[root@node1 ~]# tar -xf httpd-2.4.25.tar.gz -C /usr/src/

  之后我們下載兩個依賴包,一個是apr包,另一個是apr-util包,那么apr是什么?其實它是一個底層支撐Apache跨平臺特性的一個安裝包,有了這個包就可以不用修改整個程序,就像是一個虛擬機一樣,提供一個環境讓系統跑起來,apache也亦是如此,現在我們可以使用wget命令下載下來:

[root@node1 src]# wget http://mirrors.hust.edu.cn/apache//apr/apr-1.5.2.tar.gz    
[root@node1 src]# wget http://mirrors.hust.edu.cn/apache//apr/apr-util-1.5.4.tar.gz

  下載完成之后,由于都在/usr/src的目錄下,所以就直接加壓。

[root@node1 src]# tar -xf apr-1.5.2.tar.gz 
[root@node1 src]# tar -xf apr-util-1.5.4.tar.gz

  我們首先進入apr目錄,開始安裝,不過在安裝之前,我們首先要安裝開發包組:

[root@node1 ~]# yum -y groupinstall "Development Tools" "Server Platform Development"
[root@node1 src]# cd apr-1.5.2/ 
[root@node1 apr-1.5.2]# ./configure --prefix=/usr/local/apr-1.5    
[root@node1 apr-1.5.2]# make && make install 
[root@node1 src]# cd apr-util-1.5.4/    
[root@node1 apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util-1.5 --with-apr=/usr/local/apr-1.5

  如果以上程序包都安裝完成的話,恭喜你,可以安裝http了,首先進入該目錄,之后進行安裝,如果中途出現一些錯誤的話,是可以解決的。

[root@node1 httpd-2.4.25]# ./configure --prefix=/usr/local/apache-2.4 --enable-so    --enable-ssl --with-pcre --with-rewrite --with-mpm=prefork --enable-cgi --with-zlib    --with-libxml2=/usr --with-apr=/usr/local/apr-1.5 --with-apr-util=/usr/local/apr-util-1.5    --with-openssl --enable-modules=most --enable-mpms-shared=all 
[root@node1 httpd-2.4.25]#    make && make install

  之后打開瀏覽器,步驟一樣,輸入IP,只不過出現的是 It Works的頁面。  
  安裝過程中,可能會報錯,但這些錯誤都可以解決,以上成功的話,則代表第一階段完成。  
  接下來可以啟動源碼包安裝的程序,不過必要先要關閉RPM包的apache,因為一個端口不能為兩個程序所使用。

[root@node1 ~]# /usr/local/apache-2.4/bin/apachectl start

5.2 配置介紹

  其實兩種安裝方式任意選一種都可以,畢竟這只是實驗,并沒有好壞,最后的配置方法都是差不多的,接下來說一下配置文件的詳解,以及我們可以搭建什么服務,我們就以RPM包所安裝的來進行配置,我們的主配置文件在/etc/httpd/conf/etc/httpd/conf.d,注意:我們要把主配置文件復制出來進行備份,不然的話,如果到了不可挽回的余地,最起碼覆蓋掉,解決一下,從頭再來,那么其配置結構如下:

XG5ZR82}W)D`LR{F{O6{0ER.png 

  我們使用的響應模型是默認是prefork,它是開啟多個進程來處理不同的請求,其模式共有三個,另外兩個是workerevent模型,那么我們首先來介紹一下prework模型,它是一個多進程模型,由一個主進程和多個子進程組成,一個主進程負責創建和銷毀子進程以及套接字,也負責接收請求,并將請求轉發到子進程來進行處理。那么多個子進程,每一個子進程分別處理一個請求,其工作模型為會預先生成幾個空閑進程,用來等待處理用戶請求。  
  接下來是worker模型,它是多進程多線程的模型,有一個主進程和多個子進程,主進程和以上一樣,創建并銷毀子進程以及建立套接字并接受請求,然后將請求轉發給子進程,而多個子進程卻沒有直接處理請求,而是交給了它所生成的線程處理,每個子進程生成多個線程,每個線程都會去響應用戶請求。其并發的響應數量為  
m*n。  

worker_prefork.jpg

  最后一個是event模型,它是一個事件驅動的模型,每個進程響應多個用戶請求,也是由一個主進程個子進程組成,主進程的功能和以上的兩種模式一樣,那么子進程是基于事件驅動直接響應多個用戶請求,在httpd-2.4中是支持的。  
  以上就是對模式的介紹,那么接下來其它文件的位置,我們安裝完成之后就必然開啟它進行web服務,那么在  
CentOS 6中,它的服務腳本在/etc/rc.d/init.d/httpd路徑下,站點文件在/var/www/html的路徑下,為什么會配置在哪兒?因為在httpd.conf配置文件中,定義了DocumentRoot "/var/www/html"的文檔根目錄,日志文件保存在/var/log/httpd目錄下,訪問日志為access_log錯誤日志為error_log。服務控制和啟動在CentOS7是不一樣的,分別是:  
  CentOS 6:

[root@node1 ~] # service httpd { start | stop | restart | status }

  CentOS 7:

[root@node1 ~] # systemctl { start | stop | restart | status } https.service

5.3 配置別名及認證方式和虛擬主機

5.3.1 配置別名

在配置文件下使用alias來定義別名,其格式如下:

[root@node1 conf.d]# vim alias.conf 
Alias /web1/ /web/html1/ 
<Directory "/web/html1">    
    options None 
    allowOverride None 
    Require all granted 
</Directory> 
[root@node1 ~]# systemctl reload httpd.service

  接下來為定義的配置文件建立目錄。

[root@node1 conf.d]# mkdir /web/html1 -pv

  定義主頁。

[root@node1 conf.d]# cd /web/html1/ 
[root@node1 html1]# vim index.html 
<h1>Alias Page</h1>

  打開瀏覽器訪問。  

RIRT%BO2FTBOWXXQPRJ9({J.png

5.3.2 認證服務

  認證其實很好理解,就是讓用戶向服務器提供用戶名和密碼,這是證明自己的一種手段,其配置如下:

[root@node1 ~]# cd /etc/httpd/conf.d/ 
[root@node1 ~]# vim auth.conf 
Alias /apps/ "/apps/html/" 
<Directory "/apps/html"> 
    Options None 
    AllowOverride None    
    Authtype basic 
    AuthUserFile "/apps/html/.htpasswd" 
    AuthName "Admin String"    
    Require valid-user 
</Directory> 
[root@node1 conf.d]# cd /apps/html/ 
[root@node1 html]# vim index.html 
<h1>Auth Page</h1> 
[root@node1 ~]# systemctl reload httpd.service

  重新啟動打開瀏覽器進行訪問,輸入用戶名和密碼就可以,創建用戶和密碼的命令是htpasswd,格式如下:

[root@node1 conf.d]# htpasswd -c -m /apps/html/.htpasswd user1

9@39~JYBQ)BGPIWAB62_S`Y.png

~8{~OEQ$BUDEM_9LO37$H72.png

5.3.3 虛擬主機服務

  虛擬主機是可以在一個主機上提供多個訪問站點,共有三種實現方案,分別是基于IP、基于端口、基于域名,我們就以基于域名的方式來配置虛擬主機,配置如下:

[root@node1 conf.d]# vim vhost.conf 
<VirtualHost *:80>
    ServerName www1.stux.com
    DocumentRoot "/apps/www"
      <Directory "/apps/www"> 
          Options None 
          AllowOverride None
          Require all granted 
        </Directory> 
</VirtualHost> 
[root@node1 ~]# mkdir /apps/www 
[root@node1 ~]# vim /apps/www/index.html 
<h1>Test Virtual Page</h1> 
[root@node1 ~]# systemctl reload httpd.service

  現在我們可以測試一下,如果成功,那我恭喜你。

@Y%X{~8N2$2KTP{Y(1Q6Q67.png

原創文章,作者:劉 祥宇,如若轉載,請注明出處:http://www.www58058.com/66535

(0)
劉 祥宇劉 祥宇
上一篇 2017-01-13
下一篇 2017-01-14

相關推薦

  • N25-第6周博客作業

    N25-第6周博客作業 vim:     模式化的編輯器         基本模式:             編輯模式,…

    Linux干貨 2017-01-09
  • Linux終端類型

            終端是一種字符型設備,它有多種類型,通常使用tty來簡稱各種類型的終端設備。 [root@localhost ~]# ll /dev|egrep 'tty|pts' crw-rw-rw-. 1&nb…

    Linux干貨 2016-10-14
  • PHP中引用的詳解(引用計數、寫時拷貝)

    《PHP5中文手冊》內容中"引用的解釋"一文的摘要: 1. PHP中引用的特性 PHP中引用意味著用不同的名字訪問同一個變量內容,引用不是C的指針(C語言中的指針里面存儲的是變量的內容,在內存中存放的地址),是變量的另外一個別名或者映射。注意在 PHP 中,變量名和變量內容是不一樣的,因此同樣的內容可以有不同的名字。最接近的比喻是 Uni…

    Linux干貨 2015-04-10
  • N25期—第二周作業

    1、  Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。   一、文件權限管理類命令  chown:改變文件所有者  chown [OPTION]… [OWNER][:[GROUP]] FILE…  常用參數 -R:遞歸修改(改目錄就改目錄中的目錄及文件) &n…

    Linux干貨 2016-12-11
  • 網絡協議端口號查詢表

    TCP 0= ReservedTCP 1=TCP Port Service MultiplexerTCP 2=DeathTCP 5=Remote Job Entry,yoyoTCP 7=EchoTCP 11=SkunTCP 12=BomberTCP 16=SkunTCP 17=SkunTCP 18=消息傳輸協議,skunTCP 19=SkunTCP 20=F…

    Linux干貨 2017-08-15
  • shell編程之循環

           當需要重復運行特定的指令以滿足系統管理工作需要時,條件判斷語句if、case并不能很好地提供支撐,shell提供了for、while、until循環語句來滿足此需求。 一、for循環語句        for循環用于重復整個對象列表,依次遍歷對列…

    Linux干貨 2016-08-18
欧美性久久久久