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 Areaplz 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.178linux.com/101168

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班