httpd的安裝并分別實現三種工作模式、request報文請求的簡述、httpd的虛擬機、站點訪問控制、用戶訪問控制、持久連接配置

系統版本 Centos 7

安裝httpd 2.4

1、編譯安裝:

2、yum倉庫安裝

~]# yum -y insatll httpd

程序環境配置文件;

httpd主配置文件。
  • /etc/httpd/conf/httpd.conf
自建配置文件。

在不修改主配置文件的情況下新增一個配置文件。

  • /etc/httpd/conf.d/*.conf
Systemd 服務配置文件。
  • /usr/lib/systemd/system/httpd.service
主程序文件:
  • /usr/sbin/httpd httpd-2.4支持的MPM的動態切換;
日志文件:
  • /var/log/httpd;
    • access_log; 訪問日志
    • error_log; 錯誤日志
站點文檔
  • /var/www/html ; 即幫助文件
模塊文件路徑
  • /uar/lib64/httpd/modules
服務控制命令:
  • systemctl enable | disable httpd.service 是否自動啟動
  • systemctl { start | stop | restart | status } httpd.service 服務是否 開啟、停止、重啟、狀態

多處理模塊(MPM)

  • prefork:多進程模型,一個進程響應一個請求;
  • worker:多進程多線程模型,一個線程響應一個請求;
  • event:事件驅動模型,一個進程響應n個請求;
分別啟用prefork、worker、event工作方式

默認開啟的狀態是prefork,一旦啟動/etc/sysconfig/httpd里的worker、event模式便自動切換.

1、開啟worker模式

[root@localhost ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf 

...
...
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so    禁用
...
...
LoadModule mpm_worker_module modules/mod_mpm_worker.so   啟用
...
...
#LoadModule mpm_event_module modules/mod_mpm_event.so    禁用

重啟服務并檢查語法錯誤
[root@localhost ~]# systemctl restart httpd.service
[root@localhost ~]# httpd -t 
Syntax OK
[root@localhost ~]# httpd -M | grep mpm
 mpm_worker_module (shared)
2、開啟event模式

[root@localhost ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf 

...
...
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so    禁用
...
...
#LoadModule mpm_worker_module modules/mod_mpm_worker.so   禁用
...
...
LoadModule mpm_event_module modules/mod_mpm_event.so    啟用

重啟服務并檢查語法錯誤
[root@localhost ~]# systemctl restart httpd.service
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# httpd -M | grep mpm
 mpm_event_module (shared)
3、開啟prefork模式

[root@localhost ~]# vim /etc/httpd/conf.modules.d/00-mpm.conf 

...
...
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so    啟用
...
...
#LoadModule mpm_worker_module modules/mod_mpm_worker.so   禁用
...
...
#LoadModule mpm_event_module modules/mod_mpm_event.so    禁用

重啟服務并檢查語法錯誤
[root@localhost ~]# systemctl restart httpd.service
[root@localhost ~]# httpd -t
Syntax OK

查看啟用的模式
[root@localhost ~]# httpd -M | grep mpm
 mpm_prefork_module (shared)

錯誤修復辦法:AH00558:
[root@localhost ~]# httpd -t
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Syntax OK


...
...
#
ServerName www.example.com:80  95 去掉前面的 # 
#
...
...


系統版本 Centos 6.7

安裝httpd 2.2

1、編譯安裝:

2、yum倉庫安裝

~]# yum -y install httpd

程序環境配置文件;

配置文件:

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

服務腳本

  • /etc/rc.d/init.d/httpd
  • /etc/sysconfig/httpd 腳本配置文件

主程序文件:

  • /usr/sbin/httpd
  • /usr/sbin/httpd.worker
  • /usr/sbin/httpd.event

日志文件:

  • /var/log/httpd;
    • access_log; 訪問日志
    • error_log; 錯誤日志

站點文檔:

  • /var/www/html

模塊文件路徑:

  • /usr/lib64/httpd/modules

服務啟動

  • chkconfig httpd on | off

服務控制

  • service { start | stop | restart | status | configterst | reload } httpd

多處理模塊(MPM)

  • prefork:多進程模型,一個進程響應一個請求;
  • worker:多進程多線程模型,一個線程響應一個請求;
  • event:事件驅動模型,一個進程響應n個請求;
分別啟用prefork、worker、event工作方式

默認開啟的狀態是prefork,一旦啟動/etc/sysconfig/httpd里的worker、event模式便自動切換.

1、開啟worker模式
[root@localhost ~]# vim /etc/sysconfig/httpd


...
...

HTTPD=/usr/sbin/httpd.worker      啟用
#HTTPD=/usr/sbin/httpd.event     #停用

...


[root@localhost ~]# service httpd restart    重啟服務

停止 httpd                                               [確定]
正在啟動 httpdhttpd.worker: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
                                                           [確定]
                                                           
                                                          
[root@localhost ~]# ps aux | grep httpd

root       6270  0.0  0.4 184100  4040 ?        Ss   13:29   0:00 /usr/sbin/httpd.worker
apache     6273  0.3  0.5 528360  5368 ?        Sl   13:29   0:00 /usr/sbin/httpd.worker
apache     6274  0.2  0.5 593896  5360 ?        Sl   13:29   0:00 /usr/sbin/httpd.worker
apache     6275  0.2  0.5 528360  5360 ?        Sl   13:29   0:00 /usr/sbin/httpd.worker
root       6388  0.0  0.0 103320   860 pts/0    S+   13:29   0:00 grep httpd
2、開啟event模式
[root@localhost ~]# vim /etc/sysconfig/httpd


...
...

#HTTPD=/usr/sbin/httpd.worker     #停用
HTTPD=/usr/sbin/httpd.event        啟用

...

[root@localhost ~]# service httpd restart 

停止 httpd                                               [確定]
正在啟動 httpdhttpd.event: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
                                                           [確定]
                                                           

[root@localhost ~]# ps aux | grep httpd

root       6422  0.0  0.4 184108  4040 ?        Ss   13:32   0:00 /usr/sbin/httpd.event
apache     6425  0.0  0.5 528368  5332 ?        Sl   13:32   0:00 /usr/sbin/httpd.event
apache     6426  0.0  0.5 528368  5348 ?        Sl   13:32   0:00 /usr/sbin/httpd.event
apache     6427  0.0  0.5 528368  5336 ?        Sl   13:32   0:00 /usr/sbin/httpd.event
root       6510  0.0  0.0 103320   860 pts/0    S+   13:32   0:00 grep httpd
3、開啟prefork模式
[root@localhost ~]# vim /etc/sysconfig/httpd


...
...

#HTTPD=/usr/sbin/httpd.worker      #停用
#HTTPD=/usr/sbin/httpd.event       #停用

...

[root@localhost ~]# service httpd restart 

停止 httpd                                               [確定]
正在啟動 httpdhttpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
                                                           [確定]

[root@localhost ~]# ps aux | grep httpd

root       6542  0.0  0.3 183892  3844 ?        Ss   13:35   0:00 /usr/sbin/httpd
apache     6545  0.0  0.2 183892  2492 ?        S    13:35   0:00 /usr/sbin/httpd
apache     6546  0.0  0.2 183892  2476 ?        S    13:35   0:00 /usr/sbin/httpd
apache     6547  0.0  0.2 183892  2476 ?        S    13:35   0:00 /usr/sbin/httpd
apache     6548  0.0  0.2 183892  2476 ?        S    13:35   0:00 /usr/sbin/httpd
apache     6549  0.0  0.2 183892  2476 ?        S    13:35   0:00 /usr/sbin/httpd
apache     6550  0.0  0.2 183892  2476 ?        S    13:35   0:00 /usr/sbin/httpd
apache     6551  0.0  0.2 183892  2476 ?        S    13:35   0:00 /usr/sbin/httpd
apache     6552  0.0  0.2 183892  2476 ?        S    13:35   0:00 /usr/sbin/httpd
root       6555  0.0  0.0 103320   860 pts/0    S+   13:36   0:00 grep httpd

簡述request

request對象是http事物中用于客戶端發出獲取數據請求,在獲取數據后返回至客戶端;

request報文語法格式:

request請求:
<medhod> <request-URL> <version>
<HEADERS>

<entity-boby>


request響應報文
<version> <status> <reason-phrase>
<HEADERS>

<entity-boby>

method方法:

  • GET: 從服務器獲取一個資源;
  • HEAD: 只從服務器獲取文檔的響應首部;
  • POST: 向服務器發送要處理的數據;
  • PUT: 將請求的主題部分存儲在服務器上;
  • DELETE: 請求刪除服務器上的指定文檔;
  • TRACE: 追蹤請求到達服務器中間經過的代理服務器;
  • OPTIONS: 請求服務器返回對指定資源的支持使用的請求方法;
協議查看或分析工具:
  • tcpdump
  • tshark
  • wireshark

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:與301相似,但在響報文中通過Location指明資源所處臨時新位置;Found
  • 304:客戶端發出了條件式請求,但服務器上的資源未曾發生改變,則通過響應此響應狀態碼通過通知客戶端:Not Modified
  • 401:需要輸入賬號和密碼r認證方能訪問資源:Unauthorized
  • 403:請求被禁止;Forbidden
  • 404:服務器無法找到客戶端請求的資源:Not Found
  • 500:服務器內部錯誤;Internal Server Error
  • 502:代理服務器從后端服務器收到一條偽響應;Bad Gateway

httpd 虛擬機

httpd虛擬機是將多個網站運行到一臺服務器上,。

實現的三種方案:
  • 基于ip:虛擬主機至少擁有一個獨立的ip地址;
    • IP相同;但端口不同;
  • 基于port:虛擬主機至少擁有一個獨立的port;
    • IP不同;但端口均為默認端口;
  • 基于FQDN:虛擬主機至少擁有一個FQDN:
    • 請求報文首部不同;

注意:

  • httpd-2.2 虛擬主機不可與中心主機混用;使用前要先禁用’main’主機;注釋掉中心主機的DocumentRoot指令即可;
  • httpd-2.4 配置即可使用。

虛擬主機的配置方法:

<VirtualHost IP:PORT>
    ServerName FQDN
    DocumentRoot "/PATH/"
    <Directory "/PATH/">
            Options None
            AllowOverride None
            Require all granted 
    </Directory>
</VirtualHost>

CentOS 7 虛擬機:

關閉防火墻和SELinux

IP不同

配置兩臺虛擬機:

  • 虛擬機A
  • 虛擬機B

1、首先創建abc,xyz網站文件目錄

[root@localhost web]# mkdir -pv /data/web/{abc,xyz}

abc訪問主頁配置
[root@localhost web]# vim /data/web/abc/index.html

<h1>Welcome www.abc.io</h1>

xyz訪問主頁配置
[root@localhost web]# vim /data/web/xyz/index.html

<h1> Welcome www.xyz.io </h1>

2、確定電腦有兩個ip

[root@localhost web]# ip addr add 192.168.199.185/24 dev ens33

3、配置A、B主配置服務文件

A、
[root@localhost conf.d]# vim abc.conf

<VirtualHost 192.168.199.175:80>
	ServerName www.abc.io
	DocumentRoot "/data/web/abc"
	<Directory "/data/web/abc">
		Options None
		AllowOverride None
		Require all granted
	</Directory>
	CustomLog "logs/abc_access_log" combined
</VirtualHost>

B、
[root@localhost conf.d]# vim xyz.conf

<VirtualHost 192.168.199.185:80>
	ServerName www.xyz.io
	DocumentRoot "/data/web/xyz"
	<Directory "/data/web/xyz">
		Options None
		AllowOverride None
		Require all granted
	</Directory>
	CustomLog "logs/xyz_access_log" combined
</VirtualHost>

4、驗證語法錯誤:

[root@localhost conf.d]# httpd -t
Syntax OK
[root@localhost conf.d]# apachectl reload

5、瀏覽器分別訪問

A、192.168.199.175

B、192.168.199.185

注意如果提示錯誤檢查是否關閉了SELinux 和防火墻。

端口不同

1、修改B主機的ip 及添加端口

[root@localhost conf.d]# cat /etc/httpd/conf.d/xyz.conf 
listen 8090      不要忘記添加端口
<VirtualHost 192.168.199.175:8090>  修改ip地址及端口
	ServerName www.xyz.io
	DocumentRoot "/data/web/xyz"
	<Directory "/data/web/xyz">
		Options None
		AllowOverride None
		Require all granted
	</Directory>
	CustomLog "logs/xyz_access_log" combined
</VirtualHost>
[root@localhost conf.d]# 

2、訪問測試

192.168.199.175

192.168.199.175:8090

主機名不同

修改A 配置文件:

<VirtualHost 192.168.199.175:80>  
	ServerName www.abc.io
	DocumentRoot "/data/web/abc"
	<Directory "/data/web/abc">
		Options None
		AllowOverride None
		Require all granted
	</Directory>
	CustomLog "logs/abc_access_log" combined
</VirtualHost>

修改B 配置文件:

<VirtualHost 192.168.199.175:80>  
        ServerName www.xyz.io
        DocumentRoot "/data/web/xyz"
        <Directory "/data/web/xyz">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/xyz_access_log" combined
</VirtualHost>

測試: 由于沒有做DNS解析訪問可以修改本機的hosts文件

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.175	www.abc.io www.xyz.io   添加解析

瀏覽器輸入

www.abc.io

www.xyz.io


CentOS 6 有時間弄

注意: 如果是httpd-2.2,則使用基于FQDN的虛擬主機時,需要事先使用如下指令:

NameVirtualHost IP:PORT


其他命令使用格式:

<VirtualHost *:80>
        ServerAlias www.x.io www.y.io www.z.io   網站別名
        ServerName www.xyz.io
        DocumentRoot "/data/web/xyz"
        <Directory "/data/web/xyz">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/xyz_access_log" combined
        ErrorLog "logs/xyz_Error_log"    錯誤日志
</VirtualHost>

安裝httpd

~]# yum -y insatll httpd

1、修改站點目錄

1、創建目錄及測試文件。

~]# mkdir -pv /data/web/www
...
...
~]# vim /data/web/www/index.html

<h1> Hello World </h1>

2、修改配置文件的默認目錄并賦權給目錄

~]# vim /etc/httpd/conf/httpd.conf
...
...
ServerName www.example.com:80   95 啟用本行.
...
...
賦權給目錄訪問權限
#DocumentRoot "/var/www/html"
DocumentRoot "/data/web/www"   120;修改目錄.
...
...
...
#<Directory "/var/www/html">
<Directory "/data/web/www">   133行;授權目錄權限.
...
...
</Directory>

3、重啟服務瀏覽器測試

[root@VM_35_189_centos conf]# httpd -t 
Syntax OK
[root@VM_35_189_centos conf]# systemctl start httpd.service

網頁 image

2、IP站點授權訪問

1、全部連接授權管理

<Directory "/data/web/www">
    ...
    #Require all granted  全部允許
    Require all denied    全部禁止
    ...
</Directory>

2、限制固定IP、網段訪問,多個地址可用空格分開。

#IP禁止訪問
<Directory "/data/web/www">
    ...
    <RequireAll>
        Require all granted
        Require not ip 192.168.1.100 192.168.1.200
    </RequireAll>
</Directory>

#網段禁止訪問
<Directory>
    <RequireAll>
        Require not ip 192.168 172.16
    </RequireAll>
</Directory>


3、僅允許IP、網段訪問

#允許IP訪問
<Directory>
    <RequireAll>
        Require ip 27.215.227.213
    </RequireAll>
</Directory>

#允許網段訪問
<Directory>
    <RequireAll>
        Require all granted
        Require not ip 192.168 172.16
    </RequireAll>
</Directory>

4、限制用戶訪問

<Directory>
    <RequireAll>
        Require all granted
        Require not host DESKTOP-811RO48
    </RequireAll>
</Directory>

5、僅允許用戶訪問

<Directory>
    <RequireAll>
        Require all granted
        Require host DESKTOP-811RO48
    </RequireAll>
</Directory>

Options :定義訪問特性

  • Indexes:允許索引,指明的URL路徑不存在或沒有與主頁面資源相匹配的文件時,返回給用戶索引列表。
  • FollowSymLinks:允許跟蹤符號鏈接文件所指向的源文件。
  • None:禁止訪問
  • All:啟用除了MultiViews所有選項
定義格式:

1、允許索引,允許跟蹤符號鏈接文件

<Directory>
    Options Indexes FollowSymLinks
</Directory>
測試
創建符號鏈接文件
[root@VM_35_189_centos conf]# ln -sv /etc/fstab /data/web/www/fstab.html
/data/web/www/fstab.html -> /etc/fstab

創建索引列表文件夾
[root@VM_35_189_centos www]# mkdir /data/web/www/images
[root@VM_35_189_centos www]# find /usr/share/ -iname "*.jpg" -exec cp {} /data/web/www/images/ \;

瀏覽器訪問:IP/images 或 IP/fstab.html查看效果

2、禁止訪問設置

<Directory>
    Options None
</Directory>

定義站點主頁面:默認資源優先訪問

  • DirectoryIndex 具有最高優先級;
  • index.html 次級優先級;
  • index.html.var 當以上兩者不純在時;
分別定義:
[root@VM_35_189_centos images]# vim  data/web/www/iamges/DirectoryIndex
         <h1> one </h1>
         
[root@VM_35_189_centos images]# vim data/web/www/iamges/index.html
         <h1> two </h1>

[root@VM_35_189_centos images]# vim data/web/www/iamges/index.html.var
         <h1> three </h1>

修改配置文件:
[root@VM_35_189_centos images]# vim /etc/
...
DirectoryIndex DirectoryIndex   后邊的是文件名
...


瀏覽器輸入 IP/images 顯示為 one

自上而下屏蔽后查看效果。

定義路徑別名

<IfModule alias_module>
    Alias /usr/ "/PATH/TO/SOMEDIR/"
</IfModule>
測試
創建鏈接文件
[root@VM_35_189_centos images]# find /usr/share -iname "*.jpg"
修改配置文件
[root@VM_35_189_centos images]# vim /etc/httpd/conf/httpd.conf

輔助配置信息:
<Directory "/usr/share/backgrounds/">  修改鏈接路徑
    AllowOverride None
    Options Indexec FollowSymLinsk
    Requirw all grented
</Directory>

<IfModule alias_module>
    Alias /images/ "/usr/share/backgrounds/"
</IfModule>

1、進入瀏覽器打開IP/images,測試;

2、屏蔽別名打開瀏覽器IP/images,測試;

參考:馬哥筆記 網絡資料

基于用戶的訪問控制

1 、用戶密碼訪問控制

生成賬號密碼文件:
[root@VM_35_189_centos conf.d]# htpasswd -c /data/web/www/admin/.htpasswd tom
New password: 
Re-type new password: 
Adding password for user tom
[root@VM_35_189_centos conf.d]# htpasswd /data/web/www/admin/.htpasswd jerry
New password: 
Re-type new password: 
Adding password for user jerry

[root@VM_35_189_centos conf.d]# cd /etc/httpd/cond.d/

[root@VM_35_189_centos conf.d]# vim admin.conf   配置一個用戶管理配置文件

<Directory "/data/web/www/admin">
        Options None
        AllowOverride None
        AuthType basic
        AuthName "Admin Area,plz enter username and password."
        AuthUserFile "/etc/httpd/conf.d/.htpasswd"
        Require user jerry obama
</Directory> 


瀏覽器打開:輸入IP/amdin 訪問測試

2、用戶組訪問控制:

[root@VM_35_189_centos conf.d]# cd /etc/httpd/cond.d/

[root@VM_35_189_centos conf.d]# vim .htgroup 添加組文件

adminals: tom jerry 增加組成員


[root@VM_35_189_centos conf.d]# vim admin.conf   修改剛剛添加的配置文件,

<Directory "/data/web/www/admin">
        Options None
        AllowOverride None
        AuthType basic
        AuthName "Admin Area,plz enter username and password."
        AuthUserFile "/etc/httpd/conf.d/.htpasswd"
        AuthGroupFile "/etc/httpd/conf.d/.htgroup"
        Require group adminals
</Directory> 
瀏覽器打開:輸入IP/amdin 訪問測試

htpasswd 賬戶密碼文件生成工具

語法: htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE usernamed passwd

常用命令:

  • -c:僅首次創建此處指定的文件,當文件存在時則會清空文件。
  • -m: md5格式加密;
  • -s:格式加密;
  • -D: 刪除指定用戶
  • -b: 批模式添加用戶

批模式添加用戶: htpasswd -b [options] /PATH/TO/HTTPD_PASSWD_FILE username passwd

定義服務配置文件:

  • /etc/http/conf/
  • /etc/httpd/conf.d/
<Directory"">
    Options None
    AllowOverride None
    AuthType basic
    AuthName "Admin Area,plz enter username and password."
    AuthUserFile "/PATH/TO/HTTPD_PASSWD_FILE"
    Require user Name1 Name2 ...
</Directory>

組賬號進行認證: (1) 定義安全區域:

<Directory"">
    Options None
    AllowOverride None
    AuthType Basic
    AuthName "string"
    AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
    AuthGroupFiel "/PAHT/TO/HTTPD_GROUP_FILE"
    Require group grpname1 grpname2 ...
</Directory>

(2) 創建用戶賬號和組賬號文件; 組文件:每一行定義一個組 GRP_NAME: username1 username2 …


持久連接配置

[root@localhost conf.d]# vim /etc/httpd/conf.d/kepalive.conf

keepAlive on | off   是否啟用長連接
keepAliveTimeout 30    超時
maxkeepaliveRequests 100  可以保持多少個長連接

[root@localhost conf.d]#  httpd -t 

測試鏈接:

[root@localhost conf.d]# telnet 192.168.199.175 80   輸入服務器ip port
Trying 192.168.199.175...
Connected to 192.168.199.175.
Escape character is '^]'.
GET /index.html HTTP/1.1                    輸入命令
HOST:192.168.199.175                        連續按兩次Enter

HTTP/1.1 200 OK
Date: Fri, 15 Jun 2018 04:05:25 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Fri, 15 Jun 2018 00:52:41 GMT
ETag: "1d-56ea3a211091a"
Accept-Ranges: bytes
Content-Length: 29
Content-Type: text/html; charset=UTF-8

<h1>Welcome www.abc.io</h1>

參考資料:馬哥筆記

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101168

(0)
N28_剛好遇到小熊貓N28_剛好遇到小熊貓
上一篇 2018-06-19 09:00
下一篇 2018-06-19 10:57

相關推薦

欧美性久久久久