httpd安装、虚拟主机配置以及相关访问控制

(一)、Centos7系统下实现httpd-2.2的安装,并分别实现prefork、worker、event等几种工作方式.

  1. 尝试直接yum安装httpd程序
[root@CentOS7 ~]#yum install httpd-2.2
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.tuna.tsinghua.edu.cn
No package httpd-2.2 available.
Error: Nothing to do

注意: 众所周知CentOS 7上若yum安装httpd程序,默认的会是2.4的版本,而2.2的版本在配置方面会有不同,所以我们无法按传统方案yum来安装,因为安装2.2可能需要涉及到多个依赖关系,故我们直接使用源码安装.

  1. 调整服务器环境
[root@CentOS7 ~]#systemctl stop firewalld.service
[root@CentOS7 ~]#setenforce 0
  1. 安装开发组件等相关依赖环境
[root@CentOS7 ~]#yum groupinstall "Development Tools" "Serverplatform Development" -y
  1. 下载对应httpd-2.2源码包
[root@CentOS7 ~]#wget http://archive.apache.org/dist/httpd/httpd-2.2.34.tar.gz
  1. 解压缩tar包本地
[root@CentOS7 ~]#tar xf httpd-2.2.32.tar.gz
[root@CentOS7 ~]#ls
anaconda-ks.cfg  Documents  httpd-2.2.32         initial-setup-ks.cfg  Pictures  Templates
Desktop          Downloads  httpd-2.2.32.tar.gz  Music
  1. 进入对应的解压缩目录开始编译安装
[root@CentOS7 httpd-2.2.32]#./configure --prefix=/usr/local/httpd-2.2.32 --with-mpm=prefork 
[root@CentOS7 httpd-2.2.32]#make && make install
  1. 软链接到对应的目录中
[root@CentOS7 ~]#ln -sv /usr/local/httpd-2.2.32/ /usr/local/httpd
‘/usr/local/httpd’ -> ‘/usr/local/httpd-2.2.32/’
  1. 设定环境变量
[root@CentOS7 ~]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@CentOS7 ~]#PATH="$PATH:/usr/local/httpd/bin"
[root@CentOS7 ~]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/httpd/bin
[root@CentOS7 ~]#echo "PATH="$PATH:/usr/local/httpd/bin"" > /etc/profile.d/httpd
  1. 调整权限
[root@CentOS7 ~]#useradd -M -s /sbin/nologin httpd
[root@CentOS7 ~]#chown -R httpd.httpd /usr/local/httpd
[root@CentOS7 ~]#chown -R httpd.httpd /usr/local/httpd-2.2.32/
  1. 启动httpd服务并查看是否成功
[root@CentOS7 ~]#httpd
[root@CentOS7 ~]#ss -tunl
Netid State      Recv-Q Send-Q             Local Address:Port                            Peer Address:Port              
udp   UNCONN     0      0                              *:5353                                       *:*                  
udp   UNCONN     0      0                              *:887                                        *:*                  
udp   UNCONN     0      0                              *:53715                                      *:*                  
udp   UNCONN     0      0                  192.168.122.1:53                                         *:*                  
udp   UNCONN     0      0                       *%virbr0:67                                         *:*                  
udp   UNCONN     0      0                              *:68                                         *:*                  
udp   UNCONN     0      0                              *:111                                        *:*                  
udp   UNCONN     0      0                             :::887                                       :::*                  
udp   UNCONN     0      0      fe80::ebca:5abc:36ce:599c%ens33:546                                       :::*                  
udp   UNCONN     0      0                             :::111                                       :::*                  
tcp   LISTEN     0      128                    127.0.0.1:6012                                       *:*                  
tcp   LISTEN     0      128                            *:111                                        *:*                  
tcp   LISTEN     0      5                  192.168.122.1:53                                         *:*                  
tcp   LISTEN     0      128                            *:22                                         *:*                  
tcp   LISTEN     0      128                    127.0.0.1:631                                        *:*                  
tcp   LISTEN     0      100                    127.0.0.1:25                                         *:*                  
tcp   LISTEN     0      128                    127.0.0.1:6010                                       *:*                  
tcp   LISTEN     0      128                    127.0.0.1:6011                                       *:*                  
tcp   LISTEN     0      128                          ::1:6012                                      :::*                  
tcp   LISTEN     0      128                           :::111                                       :::*                  
tcp   LISTEN     0      128                           :::80                                        :::*                  
tcp   LISTEN     0      128                           :::22                                        :::*                  
tcp   LISTEN     0      128                          ::1:631                                       :::*                  
tcp   LISTEN     0      100                          ::1:25                                        :::*                  
tcp   LISTEN     0      128                          ::1:6010                                      :::*                  
tcp   LISTEN     0      128                          ::1:6011                                      :::*                  
[root@CentOS7 ~]#curl 192.168.30.105
<html><body><h1>It works!</h1></body></html>
  1. 更改对应模式worker和event
多模块处理MPM: Multipath process modules
prefork: process
预先创建进程,两级进程模型,父进程负责创建子进程,每个子进程响应一个用户请求
worker: thread
三级模型, 父进程管理子进程,子进程通过线程响应用户请求;每线程处理一个用户请求
event: thread
两级模型,父进程管理子进程,子进程通过event-driven机制直接响应n个请求

#####在编译安装的时候对应做模式变更即可,默认为prefork模式

./configure --prefix=/usr/local/httpd-2.2.32 --with-mpm=worker
./configure --prefix=/usr/local/httpd-2.2.32 --with-mpm=event

(二)、简述request报文请求方法和状态响应码.

request报文的请求方法:

请求方法 解释说明
GET 从服务器获取一个资源
HEAD 只从服务器获取文档的响应首部
POST 向服务器发送需要处理的数据
PUT 将请求的主体部分存储在服务器上
DELETE 请求删除服务器上的文档
TRACE 追踪请求到达目标服务器中间经过的代理服务器
OPTIONS 请求服务器返回对指定资源支持使用的请求方法

常用的状态响应码:

响应码 解释说明
200 成功,请求的所有数据通过响应报文的entity-body部分发送;ok
301 URL指向的资源已被删除,但在响应报文中通过首部Location指名了资源现在所处的新位置;Moved Permanently
302 与301相似,但在响应报文中通过Location指名资源现在的临时新位置;Found
304 客户端发出条件式请求,但是服务器上的资源没有发生改变,则通过响应码通知客户端; Not Modified
401 需要输入帐号和密码认证才能访问资源; Unauthorized
403 请求被禁止; Forbidden
404 服务器无法找到客户端请求的资源; Not Found
500 服务器内部错误; Internal Server Error
502 代理服务器从后端服务器收到一条伪响应; Bad Gateway

(二)、详细描述httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例.

i.虚拟主机:

把一台处于运行状态的物理服务器分割成多个"虚拟的服务器".

虚拟主机的实现方案:

  • 基于IP地址
  • 基于主机域名(FQDN)
  • 基于端口号

注意点:
1.一般虚拟主机不要与中心主机混用;要使用虚拟主机,得先禁用"main"主机,禁用方法: 注释中心主机的DocumentRoot指令即可.
2.配置VirtualHost,在httpd2.2中,NameVirtualHost这一项需启用,2.2以上版本不需要.

基于IP地址

第一步: 增加两个ip地址,确保网络ping通

[root@CentOS7 ~]#ip addr add 192.168.30.105/24 dev ens33
[root@CentOS7 ~]#ip addr add 192.168.30.200/24 dev ens33

第二步: 创建两个对应的数据目录并输入数据

[root@CentOS7 html]#mkdir -p /var/www/html/105
[root@CentOS7 html]#mkdir -p /var/www/html/200
[root@CentOS7 html]#echo "hello,ip address is "192.168.30.105"" > /var/www/html/105/index.html
[root@CentOS7 html]#echo "hello,ip address is "192.168.30.200"" > /var/www/html/200/index.html

第三步: 编辑主配置文件,修改虚拟主机和权限

<VirtualHost 192.168.30.105:80>
DocumentRoot "/var/www/html/105"
ServerName www.magedu105.com
<Directory "/var/www/html/105">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.30.200:80>
DocumentRoot "/var/www/html/200"
ServerName www.magedu200.com
<Directory "/var/www/html/200">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

第四步: 测试访问是否正常

[root@CentOS7 ~]#curl 192.168.30.105
hello,ip address is 192.168.30.105
[root@CentOS7 ~]#curl 192.168.30.200
hello,ip address is 192.168.30.200

基于端口号

第一步: 创建基于端口的目录和索引文件

[root@localhost ~]#mkdir -p /var/www/html/80
[root@localhost ~]#mkdir -p /var/www/html/10080
[root@localhost ~]#echo "hi,the ip Port is '80'" >/var/www/html/80/index.html
[root@localhost ~]#echo "hi,the ip Port is '10080'" >/var/www/html/10080/index.html

第二步: 修改主配置文件端口号及相关配置

Listen 80
Listen 10080

<VirtualHost 192.168.30.105:80>
DocumentRoot "/var/www/html/80"
ServerName "www.alinuxtest.com"
<Directory "/var/www/html/80">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.30.105:10080>
DocumentRoot "/var/www/html/10080"
ServerName "www.blinuxtest.com"
<Directory "/var/www/html/10080">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

第三步: 测试语法并重启httpd服务,然后测试对应结果

[root@localhost ~]#httpd -t
Syntax OK
[root@localhost ~]#systemctl restart httpd
[root@localhost ~]#curl 192.168.30.105:80
hi,the ip Port is '80'
[root@localhost ~]#curl 192.168.30.105:10080
hi,the ip Port is '10080'

基于主机域名

第一步: 创建基于主机域名的目录和索引文件

[root@localhost ~]#mkdir -p /var/www/html/ilinux
[root@localhost ~]#mkdir -p /var/www/html/iunix
[root@localhost ~]#echo "domain name is 'www.ilinux.com'" >/var/www/html/ilinux/index.html
[root@localhost ~]#echo "domain name is 'www.iunix.com'" >/var/www/html/iunix/index.html

第二步: 修改主配置文件相关配置

<VirtualHost 192.168.30.105:80>
DocumentRoot "/var/www/html/ilinux"
ServerName www.ilinux.com
<Directory "/var/www/html/ilinux">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.30.105:80>
DocumentRoot "/var/www/html/iunix"
ServerName www.iunix.com
<Directory "/var/www/html/iunix">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

第三步: 更改本地hosts文件对应关系或自建DNS做对应修改

[root@localhost named]#vim /etc/hosts
192.168.30.105 www.ilinux.com www.iunix.com

第四步: 测试语法并重启httpd服务,然后测试对应结果

[root@localhost ~]#httpd -t
Syntax OK
[root@localhost ~]#systemctl restart httpd
[root@localhost named]#curl www.ilinux.com
domain name is 'www.ilinux.com'
[root@localhost named]#curl www.iunix.com
domain name is 'www.iunix.com'

ii.站点访问控制

禁止ip:192.168.30.200访问

[root@localhost conf.d]#vim deny.conf 
<VirtualHost 192.168.30.105:80>
        ServerName www.ilinux.com
        DocumentRoot "/var/www/html"
        <Directory "/var/www/html">
                <Requireall>
                        Require all granted
                        Require not ip 192.168.30.200
                </Requireall>
        </Directory>
</VirtualHost>

iii.基于用户的访问控制

第一步:创建密码账户和允许访问的用户

[root@localhost ~]#htpasswd -c /tmp/test.users tom
[root@localhost ~]#htpasswd -m /tmp/test.users jerry
[root@localhost ~]#htpasswd -m /tmp/test.users obama

第二步:把存放密码的文件移动到httpd目录下,且保存为隐藏文件

[root@localhost ~]#mv /tmp/test.users /etc/httpd/conf.d/.htpasswd

第三步:创建测试index页

[root@localhost conf.d]#mkdir -p /var/www/html/testusers
[root@localhost conf.d]#echo "Testusers Area" > /var/www/html/testusers/index.html

第四步: 创建模块化文件并且做对应配置

[root@localhost conf.d]#vim /etc/httpd/conf.d/testusers.conf
<Directory "/var/www/html/testusers">
        Options None
        AllowOverride None
        AuthType basic
        AuthName "Test Area,pls enter your username and password"
        AuthUserFile "/etc/httpd/conf.d/.htpasswd"
        Require user tom jerry obama
        #Require valid-user  #允许所有用户都能登录
</Directory>

第五步: 编辑主配置文件下的Directory路径

DocumentRoot "/var/www/html/testusers"
<Directory "/var/www/html/testusers">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

第六步: 检查语法错误并作测试

[root@localhost conf.d]#httpd -t
Syntax OK
[root@localhost conf.d]#systemctl restart httpd

若按组别进行访问限制:

第一步:在上述基础之上,把需要限制的用户添加进组别,并隐藏

[root@localhost conf.d]#vim /etc/httpd/conf.d/.htgroup
animals: tom jerry

第二步: 在原有模块化文件中做修改

[root@localhost conf.d]#vim /etc/httpd/conf.d/group.conf
<Directory "/var/www/html/testusers">
        Options None
        AllowOverride None
        AuthType basic
        AuthName "Test Area,pls enter your username and password"
        AuthUserFile "/etc/httpd/conf.d/.htpasswd"
        AuthGroupFile "/etc/httpd/conf.d/.htgroup"
        Require group animals
</Directory>

第三步:检查语法错误并作测试

[root@localhost conf.d]#httpd -t
Syntax OK
[root@localhost conf.d]#systemctl restart httpd

iiii.持久连接

1).什么是持久链接?

建立链接以后持续获取资源不断开,一直响应到把需要获取的资源都成功获取了以后才终止链接.

2).为什么要做持久链接?

http协议是无状态的,每一次的事务都是建立在一次请求和一次响应组成,http同时也是基于tcp传输协议的,所以每次建立链接交换数据之前都需要进行安全的三次握手,四次断开的过程,若数据交换频繁势必会导致资源的消耗.

3).创建模块化进行对应设置

[root@localhost ~]#vim /etc/httpd/conf.d/keepalive.conf
KeepAlive On
KeepAliveTimeout 35
MaxKeepAliveRequests 100

4).检查语法错误并做测试

[root@localhost conf.d]#httpd -t
Syntax OK
[root@localhost conf.d]#systemctl restart httpd
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容