web服務之Apache

二、Apache web服務

 

2.1 Apache介紹

Apache Software Fondation基金

httpd是apache的web服務器端軟件

 

2.2 相比nginx優缺點

2.2.1 缺點

資源佔用高

併發性能差

 

2.2.2 優點

rewrite,比nginx 的rewrite 強大

模塊多

少bug

穩定

處理動態請求能力優於nginx

 

2.3 MPM(多處理模塊)

可以通過httpd -V查看

[root@localhost ~]# httpd -V | grep -i "server mpm"
Server MPM:     Prefork

prefork(默認) 單進程模型

worker 單線程響應單用戶請求

event 單進程響應多用戶請求

 

2.3.1 prefork工作模式

(一個進程處理一個客戶端請求)

Apache在啓動之初,就預先fork一些子進程,然後等待請求進來。之所以這樣做,是爲了減少頻繁創建和銷燬進程的開銷。每個子進程只有一個線程,在一個時間點內,只能處理一個請求。

作用:用一個進程處理一個用戶請求。

優點:成熟穩定,兼容所有新老模塊。同時,不需要擔心線程安全的問題。

缺點:一個進程相對佔用更多的系統資源,消耗更多的內存。而且,它並不擅長處理高併發請求。

 

2.3.2 worker工作模式

(一個進程生成多個線程,一個線程處理一個客戶端請求)

使用了多進程和多線程的混合模式。它也預先fork了幾個子進程(數量比較少),然後每個子進程創建一些線程,同時包括一個監聽線程。每個請求過來,會被分配到1個線程來服務。線程比起進程會更輕量,因爲線程通常會共享父進程的內存空間,因此,內存的佔用會減少一些。在高併發的場景下,因爲比起prefork有更多的可用線程,表現會更優秀一些

作用:一個進程生成多個線程,一個線程處理一個用戶請求

優點:佔據更少的內存,高併發下表現更優秀。

缺點:必須考慮線程安全的問題。

 

2.3.3 event工作模式

(支持keepalive,數據傳送完畢自動斷開,但是不支持https)

用一個線程處理一個用戶請求。它和worker模式很像,最大的區別在於,它解決了keep-alive場景下,長期被佔用的線程的資源浪費問題。event MPM中,會有一個專門的線程來管理這些keep-alive類型的線程,當有真實請求過來的時候,

將請求傳遞給服務線程,執行完畢後,又允許它釋放。這樣增強了高併發場景下的請求處理能力。

HTTP採用keepalive方式減少TCP連接數量,但是由於需要與服務器線程或進程進行綁定,導致一個繁忙的服務器會消耗完所有的線程。Event MPM是解決這個問題的一種新模型,它把服務進程從連接中分離出來。在服務器處理速度很快,同時具有非常高的點擊率時,可用的線程數量就是關鍵的資源限 制,此時Event MPM方式是最有效的,但不能在HTTPS訪問下工作。

 
Apache針對不同的操作系統提供了多個不同的MPM模塊,例如:mpm_beos、mpm_event、mpm_netware、mpmt_os2、mpm_prefork、mpm_winnt、mpm_worker。

不同操作系統上默認的MPM模塊
操作系統 MPM模塊 描述
Windows mpm_winnt 它只創建一個單獨的子進程,並在這個子進程中輪流產生多個線程來處理請求。
Unix/Linux mpm_prefork (一個進程處理一個客戶端請求)
BeOS mpm_beos 由Be公司開發的一種多媒體操作系統,官方版已停止更新。
Netware mpm_netware 由NOVELL公司推出的一種網絡操作系統
OS/2 mpmt_os2 一種最初由微軟和IBM共同開發的操作系統,現由IBM單獨開發(微軟放棄OS/2,轉而開發Windows)

2.4 相關文件(2.4)

主配置文件: /etc/httpd/conf/httpd.conf 編譯安裝目錄/conf/httpd.conf

其他配置文件:

/etc/httpd/conf.d/*.conf

/etc/httpd/conf.modules.d/*.conf

網頁數據文件: /var/www/html 編譯安裝目錄/html/

 

2.5 監聽端口

http: tcp 80

https: tcp 443

 

2.6 主配置文件(httpd2.2)

httpd.apache.org

Section 1: Global Environment

  • ServerTokens OS

  • ServerRoot “/etc/httpd” 服務端相關文件默認目錄

  • PidFile run/httpd.pid 進程運行時將pid寫入文件

  • Listen 80 監聽端口

  • KeepAlive Off 是否開啓持久連接

  • Include conf.d/*.conf 將conf.d目錄下所有.conf結尾文件包含進來(Include conf.modules.d/*.conf)

  • User apache 服務進程(/usr/sbin/httpd)執行者

  • Group apache 服務進程執行組

 
Section 2: ‘Main’ server configuration 配置主站點

  • ServerAdmin root@localhost 網站管理員郵箱
  • ServerName www.pl.com 站點名稱
  • DocumentRoot “/var/www/html” 站點根目錄
  • DirectoryIndex index.html index.html.var 目錄首頁
  • ErrorLog logs/error_log 錯誤日誌
  • CustomLog logs/access_log combined 用戶訪問日誌
  • Alias /icons/ “/var/www/icons/” 別名,當訪問/icons目錄即訪問/var/www/icons(www.pl.com/icon/a.jpg、/var/www/icons/a.jpg)
  • 爲指定目錄定義功能
<Directory />
	Options FollowSymLinks
	#FollowSymLinks  是否允許追蹤符號鏈接
	#Indexes 索引,用於基於http協議的文件瀏覽
	AllowOverride None
</Directory>
  • 訪問控制

    Order allow,deny (默認拒絕所有)
    Allow from all

    Order deny,allow (默認允許所有)
    deny from 192.168.1.0/24
    allow from all

 

Section 3: Virtual Hosts

  • NameVirtualHost *:80 #開啓虛擬主機
  • <VirtualHost *:80>
  • DocumentRoot /var/www/html
  • ServerName www.pl.com
  • ErrorLog logs/www.pl.com-error_log
  • CustomLog logs/www.pl.com-custom_log common
  • </VirtualHost>
  • <VirtualHost *:80>
  • DocumentRoot /test
  • ServerName www.test.com
  • ErrorLog logs/www.test.com-error_log
  • CustomLog logs/www.test.com-custom_log common
  • <Directory /test/download>
  • options indexes #將download目錄作爲文件共享目錄,並生成索引頁面
  • </Directory>

web認證功能

<VirtualHost *:80>
<Directory /test/private>
        AuthName "Input your username and password,please!"
        AuthType Basic
        AuthUserFile /etc/httpd/testpasswd
        require valid-user
</Directory>
</VirtualHost>

生成用戶認證文件 htpasswd -cm /etc/httpd/testpasswd alice (第一次添加用戶需-c)

1.基於IP的虛擬主機

2.基於端口的虛擬主機

3.基於域名的虛擬主機

 

2.6.1 基於域名的虛擬主機

配置文件

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<Directory />
    AllowOverride none
    Require all granted # 修改這個
</Directory>
[root@localhost ~]# vim /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
	DocumentRoot "/data/pl"
	ServerName www.pl.com
	ErrorLog "logs/www.pl.com-error_log"
	TransferLog "logs/host.pl.com-access_log"
</VirtualHost>
<VirtualHost *:80>
	DocumentRoot "/data/haha"
	ServerName www.haha.com
	ErrorLog "logs/www.haha.com-error_log"
	TransferLog "logs/host.haha.com-access_log"
</VirtualHost>
<VirtualHost *:80>
	DocumentRoot "/data/hehe"
	ServerName www.hehe.com
	ErrorLog "logs/www.hehe.com-error_log"
	TransferLog "logs/host.hehe.com-access_log"
</VirtualHost>

創建文件

[root@localhost ~]# mkdir /data
[root@localhost ~]# mkdir /data/{pl,haha,hehe}
[root@localhost ~]# echo "<h>pl</h>" > /data/pl/index.html
[root@localhost ~]# echo "<h>haha</h>" > /data/haha/index.html
[root@localhost ~]# echo "<h>hehe</h>" > /data/hehe/index.html

寫入域名解析

[root@localhost ~]# vim /etc/hosts
192.168.217.155 www.pl.com www.haha.com www.hehe.com

測試

在這裏插入圖片描述

 

2.6.2 虛擬主機做文件共享以及認證

  1. www.pl.com 靜態頁面

  2. www.haha.com 文件共享

  3. www.hehe.com 認證

  4. 解析動態php請求

配置

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
<Directory />
    AllowOverride none
    Require all granted # 修改這個
</Directory>
[root@localhost ~]# vim /etc/httpd/conf.d/vhost.conf
<VirtualHost *:80>
	DocumentRoot "/data/pl"
	ServerName www.pl.com
	ErrorLog "logs/www.pl.com-error_log"
	TransferLog "logs/host.pl.com-access_log"
</VirtualHost>
<VirtualHost *:80>
	DocumentRoot "/data/haha"
	ServerName www.haha.com
	ErrorLog "logs/www.haha.com-error_log"
	TransferLog "logs/host.haha.com-access_log"
<Directory "/data/haha/share">
	Options Indexes 
</Directory>
</VirtualHost>
<VirtualHost *:80>
	DocumentRoot "/data/hehe"
	ServerName www.hehe.com
	ErrorLog "logs/www.hehe.com-error_log"
	TransferLog "logs/host.hehe.com-access_log"
<Directory "/data/hehe/secert">
	AuthName "Input your username and password,please!"
	AuthType Basic
	AuthUserFile /etc/httpd/testpasswd
	require valid-user
</Directory>
</VirtualHost>

文件共享

[root@localhost ~]# rm -rf /data/haha/index.html
[root@localhost ~]# mkdir /data/haha/share
[root@localhost ~]# cp -a /etc/*.conf /data/haha/share/

訪問

在這裏插入圖片描述

認證

[root@localhost ~]# htpasswd -cm /etc/httpd/testpasswd alice
New password: 
Re-type new password: 
Adding password for user alice
[root@localhost ~]# mkdir /data/hehe/secert
[root@localhost ~]# echo "this is secert" > /data/hehe/secert/index.html

訪問

在這裏插入圖片描述

可以看到

在這裏插入圖片描述

 

2.7 源碼編譯安裝httpd2.4

0.安裝相關編譯工具

[root@httpd ~]# yum install -y automake make autoconf gcc expat-devel gcc-c++
[root@httpd ~]# wget http://archive.apache.org/dist/apr/apr-1.5.1.tar.gz
[root@httpd ~]# wget http://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz
[root@httpd ~]# wget http://www.zlib.net/zlib-1.2.11.tar.gz
[root@httpd ~]# wget https://sourceforge.net/projects/pcre/files/pcre/8.38/pcre-8.38.tar.gz
[root@httpd ~]# wget https://www.openssl.org/source/old/1.0.2/openssl-1.0.2n.tar.gz
[root@httpd ~]# wget http://archive.apache.org/dist/httpd/httpd-2.4.29.tar.gz

 
1.下載源碼包

apr-1.5.1.tar.gz

[root@httpd ~]# tar -xzvf apr-1.5.1.tar.gz
[root@httpd ~]# cd apr-1.5.1 
[root@httpd apr-1.5.1]# ./configure --prefix=/usr/local/apr
[root@httpd apr-1.5.1]# make && make install

yum -y install libtool libtool-ltdl libtool-ltdl-devel

在這裏插入圖片描述

apr-util-1.6.1.tar.gz

[root@httpd ~]# tar -xzvf apr-util-1.6.1.tar.gz 
[root@httpd ~]# cd apr-util-1.6.1
[root@httpd apr-util-1.6.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@httpd apr-util-1.6.1]# make && make install

zlib-1.2.11.tar.gz

[root@httpd ~]# tar -xzvf zlib-1.2.11.tar.gz
[root@httpd ~]# cd zlib-1.2.11
[root@httpd zlib-1.2.11]# ./configure --prefix=/usr/local/apr
[root@httpd zlib-1.2.11]# make && make install

pcre-8.38.tar.gz

[root@httpd ~]# tar -xzvf pcre-8.38.tar.gz
[root@httpd ~]# cd pcre-8.38
[root@httpd pcre-8.38]# ./configure --prefix=/usr/local/pcre
[root@httpd pcre-8.38]# make && make install

openssl-1.0.2n.tar.gz

[root@httpd ~]# tar -xzvf openssl-1.0.2n.tar.gz
[root@httpd ~]# cd openssl-1.0.2n
[root@httpd openssl-1.0.2n]# ./config -fPIC --prefix=/usr/local/openssl enable-shared 
[root@httpd openssl-1.0.2n]# make && make install

httpd-2.4.29.tar.gz

[root@httpd ~]# tar -xzvf httpd-2.4.29.tar.gz   
[root@httpd ~]# cd httpd-2.4.29
[root@httpd httpd-2.4.29]# ./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-ssl --with-ssl=/usr/local/openssl --enable-cgi  --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --with-mpm=event --with-pcre=/usr/local/pcre   --with-apr=/usr/local/apr  --with-apr-util=/usr/local/apr-util --enable-expires --enable-deflate
[root@httpd httpd-2.4.29]# make && make install

yum install -y zlib-devel

apr-util版本太高

開啓服務

[root@httpd ~]# /usr/local/httpd/bin/apachectl start

 
訪問192.168.217.154:80

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章