分享

搭建HTTPD服务

 WindySky 2018-05-18

httpd服务

Httpd服务

httpd是一个开源软件,且一般用作web服务器来使用。目前最流行的web服务器软件叫做httpd,
在早期的http server就叫做apache,到了http server 2.0以后就改名为httpd了。
所以有时候听到apache服务器和httpd服务器其实都是指得是一个意思。
  • 1
  • 2
  • 3
  • 4

httpd生产的文件

httpd目前有多个版本,主流有两个版本分别为:2.2、2.4,在安装了httpd软件之后,会生成配置文件。
这些文件有:
    其中主配置文件:/etc/httpd/conf/httpd.conf
    分段配置文件:/etc/httpd/conf.d/*.conf(一般自己定义配置在此文件下重新建立)
    模块的目录:/etc/httpd/modules 
    日志目录:/etc/log/httpd/*
            访问日志为:./access_log
            错误日志为:./err_log
    网页的存放目录:/var/www/html 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

httpd的特性:

高度模块化: core + modules
DSO:dynamic shared object
MPM:Multipath processing Modules (多路处理模块)
prefork:多进程模型,每个进程响应一个请求、一个主进程:负责生成子进程及回收子进程;负责创建套接字;
负责接收请求,并将其派发给某子进程进行处理,每个子进程处理一个请求。
worker:多进程多线程模型,每线程处理一个用户请求、一个主进程:负责生成子进程、负责创建套接字、
负责接收请求、并将其派发给某子进程进行处理,每个子进程负责生成多个线程,每个线程负责响应用户请求;
并发响应数量为:子进程数量*子进程创建的最大线程数量。
event:事件驱动模型,多进程模型,每个进程响应多个请求、一个主进程 :负责生成子进程、负责创建套接字、
负责接收请求,并将其派发给某子进程进行处理,子进程基于事件驱动机制直接响应多个请求。

注:在/etc/httpd/conf.modules.d/00-mpm.conf切换工作模型
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

httpd的功能特性:

CGI:Common Gateway Interface
虚拟主机:IP,PORT, FQDN
反向代理
负载均衡
路径别名
丰富的用户认证机制
basic 
digest
支持第三方模块
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

服务控制:

systemctl  enable|disable  httpd.service #开机启动与否
systemctl  {start|stop|restart|status}  httpd.service #单次操作状态
  • 1
  • 2
  • 3
1、 监听地址端口
在主配置文件中/etc/httpd/conf/httpd.conf:
Listen IP:PORT,表示监听在该IP的PORT端口上,如果不写IP,表示监听本机所有可用IP地址,
另外,Listen指令可以出现多次,表示监听不同IP及不同端口上,修改完成后需要重启生效
注意:在修改完配置文件后需要使用:httpd –t 检查语法,语法没有问题才可继续其它操作
  • 1
  • 2
  • 3
  • 4
  • 5
2、 持久连接
Persistent Connection:tcp连续建立后,每个资源获取完成后不全断开连接,而是继续等待其它资源请求的进行。
副作用:对并发访问量较大的服务器,长连接机制会使得后续某些请求无法得到正常响应。
解决方案:使用较短的持久连接时长,以及较少的请求数量;
KeepAlive  On|Off 此功能开启|关闭
KeepAliveTimeout  15 时间限制15秒
MaxKeepAliveRequests  100 请求数量100

以上表示:当一个连接建立,时间超过15秒或请求数量超过100个时,服务器会主动断开。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
3、 MPM
文章开头已介绍,下面是配置选项与参数,
prefork的配置      
  • 1
  • 2
  • 3

这里写图片描述 
worker的配置: 
这里写图片描述 
修改模型选项:/etc/httpd/conf.modules.d/00-mpm.conf

4、 DSO
配置指令模块加载,格式如下:
LoadModule <module_name> <module_path>
模块路径可以是相对路径,相对ServerRoot指令指向的位置
配置文件:/etc/httpd/conf.modules.d/00-proxy.conf
  • 1
  • 2
  • 3
  • 4
  • 5
5、 定义Main server 文档页面路径
使用DocumentRoot指令,关联文档路径的映射
DocumentRoot指向路径问URL起始位置
如DocumetRoot “/var/www/html”
在本地有一个文件file在/var/www/html/filedir/file则URL访问路径为www.smartwy.com/filedir/file
  • 1
  • 2
  • 3
  • 4
  • 5
6、 站点路径访问控制
可基于两种机制指明对哪些资源进行何种访问控制:
文件系统路径
  • 1
  • 2
  • 3
1,<Directory  "/dir/">
        ...
  </Directory>
2,<File  "/dir/to/file">
        ...
  </File>
3, <FileMatch  "PATTERN">
        ...
  </FileMatch>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
下面以路径访问控制做简单介绍
  • 1
  • 2
<Directory "/var/www/cgi-bin">
        AllowOverride None 
        Options None
        Require all granted
</Directory> 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
AllowOverride:与访问控制相关的哪些执行可以放在.htacesss文件中,每个目录下都可以有一个 ,
但是使用.htacess会使得网站对目录下的资源解析变的非常慢,不推荐使用。ALL所有都可以放进去,None什么都不可以放。
Options:Indexs:指明的URL路径不存在与定义的主页面资源相符的资源文件时候,返回索引列表给用户,
目录浏览功能,一般关掉。
FollowSymLinks:允许跟踪符号链接文件所指向的源文件,跟踪符号链接,如果目录下存在软连接,则可以直接
访问软连接指向的文件
None:全部停用
All:全部启用

Httpd2.4使用:Require:对控制页面访问控制,
            Require all granted 全部允许访问
            Require ip *.*.*.* 指定ip允许访问
            Require host host_name 指定主机名允许方法
Httpd2.2使用:Order allow,deny 检查次序
            Deny(黑名单) from 172.16.12.1  不允许172.16.12.1地址访问
            Allow(白名单) from 172.16  仅允许172.16网段的地址访问

    注意:指定访问控制时较小集合域放在前面
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
7、 定义站点主页面
DirectoryIndex  index.html  index.html.var
从左到右匹配到的文件,将作为默认主页返回
  • 1
  • 2
  • 3
8、 日志
访问日志:access_log | -`date`
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent 
%h:客户端IP地址;
%l:Remote User, 通常为一个减号(“-”);
%u:Remote user (from auth; may be bogus if return status (%s) is 401);非为登录访问时,其为一个减号;
%t:服务器收到请求时的时间;
%r:First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本;
%>s:响应状态码;
%b:响应报文的大小,单位是字节;不包括响应报文的http首部;
%{Referer}i:请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的;
%{User-Agent}i:请求报文中首部“User-Agent”的值;即发出请求的应用程序。
错误日志:error_log | -`date`
    错误级别:debug, info, notice, warn, error, crit, alert, emerg,
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
9、 基于用户访问控制
认证质询:
    WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码;   
认证:
    Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源;
    认证方式有两种:
        basic:明文 
        digest:消息摘要认证
用户的账号和密码存放于何处?
    虚拟账号:仅用于访问某服务时用到的认证标识
    存储:
        文本文件;
        SQL数据库;
        ldap目录存储;
格式如下:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

这里写图片描述 
编写完成后,systemctl restart httpd.service重启httpd服务, 
在浏览器地址栏内输入相应域名,会出现以下界面,填入上方指定的用户与密码便可继续访问。 
这里写图片描述 
下面是账号与密码的创建与管理: 
Htpasswd:专用命令完成此类文件的创建及用户管理 
htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username 
-c:首次创建密码文件时使用,如再次使用会覆盖以前的密码文件 
-m:md5格式加密 
-s: sha格式加密 
-D:删除指定用户 
-b:批模式添加用户 
htpasswd -b [options] /HTTPD_PASSWD_FILE username password 
这里写图片描述 
自定义密码文件路径,配置文件内路径要与实际文件路径相同, 
使用组账号进行认证 
这里写图片描述 
组文件编写:group: user1 user2 …(一行定义一个组) 
组成员访问时与普通访问相同,密码创建也相同。 
注意:修改配置文件后,检查语法httpd –t ,没有问题,重启httpd服务,配置才可生效。

10、 虚拟主机
一个物理主机可以服务与多个站点,每个站点可以通过一个或多个虚拟主机来实现。
有三种实现方案:
基于ip:为每个虚拟主机准备至少一个ip地址;
基于port:为每个虚拟主机使用至少一个独立的port;
基于FQDN:为每个虚拟主机使用至少一个FQDN;

基于ip和基于port只做介绍说明,基于FQDN做实验说明:
基于IP的虚拟主机示例(在/etc/httpd/conf.d/下新建**.conf文件):
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
<VirtualHost 172.16.100.6:80> #端口相同,ip不同(确定主机有两个ip)
    ServerName www.a.com #虚拟服务器域名(基于IP与port实验没有影响)
    DocumentRoot "/www/dir" #指定站点根目录,实验时在根目录下新建index.html文件,
    写一点测试信息在里面,方便查看实验效果。
</VirtualHost>
<VirtualHost 172.16.100.7:80>
    ServerName www.b.net
    DocumentRoot "/www/dir"
</VirtualHost>
可在浏览器地址栏中输入IP查看。

基于端口的虚拟主机(在/etc/httpd/conf.d/下新建**.conf文件):
<VirtualHost 172.16.100.6:80> #IP相同,端口不同
    ServerName www.a.com
    DocumentRoot "/www/dir"
</VirtualHost>
Listen 808 #开启监听808端口
<VirtualHost 172.16.100.6:808>
    ServerName www.b.net
    DocumentRoot "/www/dir"
</VirtualHost>
可在浏览器地址栏中输入IP:PORT查看。

基于FQDN的虚拟主机(在/etc/httpd/conf.d/下新建**.conf文件):
<VirtualHost 172.16.100.6:80>
    ServerName www.a.com
    DocumentRoot "/www/dir"
</VirtualHost>
<VirtualHost 172.16.100.6:80>
    ServerName www.b.net
    DocumentRoot "/www/dir"
</VirtualHost>
可在浏览器地址栏中输入域名查看。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
基于FQDN的虚拟主机实验:
1.1在/etc/httpd/conf.d目录下新建两个配置文件:
  • 1
  • 2
  • 3

这里写图片描述 
这里写图片描述 
注意:如果是httpd-2.2,则使用基于FQDN的虚拟主机时,需要事先使用如下指令: 
NameVirtualHost IP:PORT

在设置的站点根目录下新建index.html文件, 
这里写图片描述 
编写完成后,httpd –t 检查语法,重启httpd服务。 
1.2DNS正向解析: 
将www.smartwy.com与www.magedu.com解析到172.16.253.190 
/etc/named.rfc1912.conf添加以下内容 
这里写图片描述 
新建区域解析库/var/named/smartwy.com.zone编辑如下: 
这里写图片描述 
新建区域解析库/var/named/magedu.com.zone编辑如下: 
这里写图片描述 
以上配置要确保172.16.252.205处于被监听状态,与172.16.253.190联通, 
执行named-checkconf, 
named-checkzone “smartwy.com” 区域解析库名, 
named-checkzone “magedu.com” 区域解析库名, 
rndc reload 重新加载。 
1.3 测试(使用的域名有可能在公网已被使用,可把DNS设为172.16.252.205防止公网影响) 
这里写图片描述

11、 内置的server-status页面
在虚拟主机内添加/server-status选项
  • 1
  • 2

这里写图片描述 
使用的是2.2版本,设置如下

<Location /server-status>
    SetHandler server-status
        Order allow,deny
        Allow from 172.16
</Location>
  • 1
  • 2
  • 3
  • 4
  • 5

Httpd –t 检查语法,重启服务, 
在浏览器地址栏输入www.smartwy.com/server-status

这里写图片描述

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多