httpd2.4版本的葵花宝典

httpd用来实现http协议的,可用来搭建web服务器的应用程序。下面就针对搭建web服务器的各种配置进行一一描述。

使用的操作系统为centos7.2

修改监听的ip端口

Listen [ip:]port

注意: 1>. Listen 默认监听在本机上的所有ip地址之上

2>. 可定义多个接听端口。

编辑地方:

Listen 127.0.0.1:80

测试结果:  192.168.203.157为服务器另外一个ip地址

[[email protected] 7 html]# curl http://192.168.203.157  
curl: (7) Failed connect to 192.168.203.157:80; Connection refused
[[email protected] 7 html]# curl http://127.0.0.1
magedu.com

编辑地方:

Listen 80
Listen 8080

测试结果:

[[email protected] 7 html]# curl http://192.168.203.157
magedu.com
[[email protected] 7 html]# curl http://192.168.203.157:8080
magedu.com

设置是否持久连接:

判断是否为持久连接:

1>. 首先telnet命令使用验证服务器当前支持的连接状态:

[[email protected] ~]# telnet 192.168.203.157 80
Trying 192.168.203.157...
Connected to 192.168.203.157.
Escape character is ‘^]‘.
GET /index.htmlhttp/1.1
Host: 192.168.203.157
 
HTTP/1.1 200 OK
Date: Thu, 29 Sep 2016 12:57:50 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 29 Sep 2016 12:36:35 GMT
ETag: "b-53da4ba7495b0"
Accept-Ranges: bytes
Content-Length: 11
Content-Type: text/html; charset=UTF-8
 
magedu.com
Connection closed by foreign host.

客户端接收到数据后,等待一会时间连接关闭,说明当前服务器支持的是长连接,只是有时间限制。

修改配置文件:

第一种情况:

]# vim /etc/httpd/conf.d/keepalive.conf
KeepAlive off

第二种情况:

]# vim /etc/httpd/conf.d/keepalive.conf
KeepAlive on

第三种情况(第二种情况的扩展):

]# vim keepalive.conf 
KeepAlive on
KeepAliveTimeout 20   //  请求时间超过20秒,则断开连接,默认秒为单位
MaxKeepAliveRequests 10 // 请求资源数量超过10个的话,则断开链接

DSO(动态的装载和卸载模块文件)

配置文件:/etc/httpd/conf.modules.d/

模块文件都被写入到/etc/httpd/conf.modules.d/*.conf文件中

httpd2.4版本管理模块的的配置文件都放在/etc/httpd/conf.modules.d/*.conf文件,而httpd2.2配置文件则放到/etc/httpd/modules/*.so文件

比如:

vim /etc/httpd/conf.modules.d/00-lua.conf
LoadModule lua_module modules/mod_lua.so

httpd默认是加载lua这个模块的。

[[email protected] 7 conf.modules.d]# httpd -M | grep lua
 lua_module (shared)

将/etc/httpd/conf.modules.d/00-lua.conf中这一条目注释后,再去查看。

vim /etc/httpd/conf.modules.d/00-lua.conf
#LoadModule lua_module modules/mod_lua.so

重新加载httpd程序。

systemctl reload httpd
httpd -M | grep lua

httpd并没有加载mod_lua这一模块。

日志文件配置

日志文件有两种类型:错误日志error_log、访问日志access_log

error_log   错误日志文件被定义在/etc/httpd/conf/httpd.conf文件中,且日志的级别为warn

access_log  文件的特别有用,在生产坏境下,可以分析到访问源的ip地址、从哪里跳转来等.

access_log非常有用,所以在实际生产坏境下,经常要自己特定日志的格式.

官方站点解析:http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#logformat

access_log日志中各参数表示的意思:

%h:访问源ip地址

%l:.....

%u:.....

%t: time 访问的时间

\”  \为转移字符,表示”

%r: First line of request.

%>s:  记录最后一次的状态码

%s: 第一次状态码

%{VARNAME}i:......

%{Referer}i: 从哪里跳转来。

使用本地官方站点文件

1>. 安装httpd-manual安装包。

2>. 重载服务。

通过http://ip/manual  来实现对官方文档的访问

DocumentRoot的配置

在httpd2.4版本,指定新的DocumentRoot后,必须再去指定相应目录的参数选项才可以。

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

在httpd2.2版本,指定新的DocumentRoot后,不需要指定目录的参数选项。

目录中常用选项总结:

(1) Options:用于定义资源的展示方式; 后跟以空白字符分隔的“选项”列表;

子选项:

Indexes (Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews)

None

All

注意:

1>.Indexes当系统没有给定相应的首页文件的话,会将DocumentRoot指定的目录中文件以列表的形式展示出来。

2>.Indexes有一定的安全的漏洞,在生产坏境下建议使用None功能将此功能关闭

(2) AllowOverride:httpd允许在网页文档的各目录下使用隐藏文件.htaccess来各自的访问控制;此指令定义哪此指令可以在.htaccess中定义

AllowOverride的各个选项:

FileInfo AuthConfig Limit

None

All

注意: Options也有安全漏洞,建议使用None选项将此功能关闭

(3) Require:

允许所有客户端访问:Require all granted

拒绝所有客户端访问:Require all denied

另外一种表示的方法:

<RequireAll>

Require ip 10.1.0.0/16

Require all denied

</RequireAll>

控制特定的客户端访问:

Require ip IP|NETWORK

Require not ip IP|NETWORK

Require host HOSTNAME

Require not  host HOSTNAME

HOSTNAME的表示方法:FQDN.或则是domain.tld.

定义站点主页面:

<IfModule dir_module>
    DirectoryIndex default.html
</IfModule>

路径别名

编辑配置文件/etc/httpd/conf/httpd.conf

 Alias /myweb/ /website/myweb/
 <Directory "/website/myweb/">
    AllowOverride None
    Require all granted
</Directory>

测试:

虚拟主机:

虚拟主机的实现可以基于ip、端口、主机名称实现虚拟主机。

第一种: 基于ip地址实现虚拟主机.

步骤: 给网卡添加一个别名地址

#ip a add 192.168.203.200 dev eno33554984
#ip a
inet 192.168.203.157/24 brd 192.168.203.255 scope global eno33554984
     valid_lft forever preferred_lft forever
inet 192.168.203.200/32 scope global eno33554984
     valid_lft forever preferred_lft forever

修改配置文件: vhost_ip.conf

<VirtualHost 192.168.203.157:80>
    DocumentRoot "/vhost/www1/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www1/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
 
<VirtualHost 192.168.203.200:80>
    DocumentRoot "/vhost/www2/html"
    ServerName www2.magedu.com
    <Directory "/vhost/www2/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

测试结果:

第二种情况:基于端口实现虚拟主机:

修改配置文件:

<VirtualHost 192.168.203.157:80>
    DocumentRoot "/vhost/www1/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www1/html">
Options None
        AllowOverride None
Require all granted
    </Directory>
</VirtualHost>
 
<VirtualHost 192.168.203.157:8080>
    DocumentRoot "/vhost/www3/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www3/html">
Options None
        AllowOverride None
Require all granted
    </Directory>
</VirtualHost>

测试结果:

第三种情况: 基于ServerName实现虚拟主机(这个是最常用的)

配置文件的修改:

<VirtualHost *:80>
    DocumentRoot "/vhost/www1/html"
    ServerName www1.magedu.com
    <Directory "/vhost/www1/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot "/vhost/www2/html"
    ServerName www2.magedu.com
    <Directory "/vhost/www2/html">
        Options None
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>
 
<VirtualHost *:80>
    DocumentRoot "/vhost/www3/html"
    ServerName www3.magedu.com
    <Directory "/vhost/www3/html">
        Options None
        AllowOverride None

测试结果:

status页面 (查看服务器的状态页面信息)

[[email protected] 7 conf.d]# vim status.conf

<Location /status>

SetHandler server-status

Requireall granted

</Location>

测试页面:

MPM: prework worker event ...

httpd主要的工作模式prework.

因为Linux系统下进程和线程的轻量级差不多。所以worker模式效果并不是很好

event还不是很稳定,所以生产线上使用prework工作模式。

如何修改httpd的工作模式.

这三种模式被修改为被做成内核模块。 只要加载相应的内核模块就OK了。

/etc/httpd/conf.modules.d/00-mpm.conf 模块中有三种模式。 注释或则起作用就OK了。
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines:
 
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
 
# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module moules/mod_mpm_worker.so
 
# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
#LoadModule mpm_event_module modules/mod_mpm_event.so

这三种模式有许多参数:

prefork
ServerLimit      主进程最多可开启进程数
StartServers     服务开启后, 开启多少个子进程
MinspareServers   至少有多少个进程空闲
MaxSpareServers   最多有多少个进程空闲
MaxConnectionsPerchild    一个进程处理多少个请求后,杀掉,产生一个新的进程
MaxRequestWorkers   最多有多少个连接请求
worker:
ServerLimit
StartServers
MinSpareThreads
MaxSpareThreads
MaxRequestWorkers
ThreadsPerChild
event:
ThreadsPerChild
MaxRequestWorkers
AsyncRequestWorkerFactor

修改配置文件:

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

StartServers 5

MinspareServers 3

MaxSpareServers 15

MaxConnectionsPerChild 0

MaxRequestWorkers 50

用户认证:

httpd认证分为表单认证和http协议的认证。

表单认证就是我们互联网上浏览网页经常遇到的,需要提供账号和密码。由服务器端的应用程序提供。

http协议认证:

认证质询:

WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码;

认证:

Authorization:客户端填入账号和密码后再次发送请求报文 ,认证通过后,服务端将响应请求的资源;

认证的方式有两种:

basic:明文

digest:摘要

虚拟账号:仅用于访问某服务使用。

用户信息存储于何处:文本文件、SQL数据库、ldap目录中。

基于basic认证实例:

基于用户身份认证:
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    AuthType basic
    AuthName "Admin Area, Enter your name/password."
    AuthUserFile "/etc/httpd/.htpasswd"
    Require valid-user
</Directory>

认证文件的生成:

htpasswd -c -m /etc/httpd/.htpasswd jack

htpasswd -m /etc/httpd/.htpasswd bob

基于组的认证:

配置文件:

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    AuthType basic
    AuthName "Admin Area, Enter your admin,admin_user"
    AuthUserFile "/etc/httpd/.htpasswd"
    AuthGroupFile "/etc/httpd/.grouppasswd"
    Require group admin
</Directory>

组认证是不是单纯的验证组信息,而是要结合用户验证来进行。

worker进程的运行者身份的验证:

User apache
Group apache

进程运行者和运行的所属组都是apache, 这样其实也比较好。

即使黑客截获了httpd的服务, 也只能获得httpd用户的权限,对整个系统构成不了毁灭性的破坏。

也不介意将网页文件的所属组或则所属者修改为httpd。这样一般文件可以随意删除网页文件,这样其实也不好。

时间: 2024-11-14 17:26:42

httpd2.4版本的葵花宝典的相关文章

httpd-2.2版本和httpd-2.4版本实现对文件和用户的权限控制以及网页的https的功能

博客作业:分别使用httpd-2.2和httpd-2.4实现 1.建立httpd服务,要求: (1)提供两个基于名称的虚拟主机www1.ipsecx.com,www2.ipsecx.com:有单独的错误日志和访问日志: (2)通过www1.ipsecx.com的/server-status提供状态信息,且仅允许tom用户访问: (3)www2.ipsecx.com不允许172.16.254.180主机访问: 2.为上面的第2个虚拟主机提供https服务: 第一种情况:在httpd-2.2情况下完

httpd-2.2及httpd-2.4版本实现对文件和用户的权限管理以及网页的https的功能

分别使用httpd-2.2和httpd-2.4实现   1.建立httpd服务,要求:     1) 提供两个基于名称的虚拟主机www1, www2:有单独的错误日志和访问日志:     2) 通过www1的/server-status提供状态信息,且仅允许link用户访问:     3) www2不允许192.168.1.0/24网络中任意主机访问:   2.为上面的第2个虚拟主机提供https服务: 首先在CentOS6.7中安装httpd-2.2版本的 在CentOS 7.2中安装http

httpd-2.2版本安装及配置

一.httpd-2.2版本安装及配置 1.安装httpd-2.2.3 #yun -y install httpd 2.查看httpd安装生成的文件 #rpm -ql httpd | less 3.启动服务 #service httpd start 4.开机自动启动服务 #chkconfig --add httpd #chkconfig --level 345 httpd on 5.建立测试页面 #cd /var/www/html #vim index.html 6.httpd服务的配置文件 #c

Apache httpd2.2版本以及2.4版本部分实验

环境准备 实验环境: 主机IP 描述 192.168.5.181 操作系统为CentOS7,安装httpd2.4版本 192.168.5.121 操作系统为CentOS6,安装httpd2.2版本,安装MySQL数据库 192.168.5.180 测试用Linux系统,安装有curl工具 192.168.5.190 测试用Linux系统,安装有curl工具 192.168.5.182 CA证书颁发机构 在两台主机上面先清空防火墙规则,关闭Selinux,然后用yum安装httpd,在CentOS

Centos7源码安装httpd2.4版本web服务器

我们的系统平台是在centos7.5的环境下安装httpd2.4版本的软件,2.4版本的软件有一个特征就是需要安装arp包以及arp-util包才可以. 1.首先是下载httpd2.4版本的包,以及安装开发环境,这里开发环境直接使用组安装"Development tools"即可,(注意centos6是安装"Development tools和Server Platform Development"两种开发环境) wget http://ftp.cuhk.edu.h

httpd2.4+版本安装步骤

1.准备相应版本的安装包: 所需的包自取 ----------------链接:http://pan.baidu.com/s/1o8HBL0m 密码:0ria------------------- #安装编译环境包组:Development Tools , Desktop Platform Development #查看包组:yum grouplist #安装包组:yum groupinstall Development Tools #yum groupinstall Desktop Platf

【Apache学习】httpd2.4 版本下 https配置

httpd2.4 编译安装请参考:http://adelazhu.blog.51cto.com/9455045/1682264 其中httpd2.4预编译时已安装了--enable-ssl模块,所以不需要像httpd2.2 单独安装mod_ssl. ./configure --prefix=/usr/local/httpd24 --sysconfdir=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --wi

WebServer 之apache(httpd2.2和httpd2.4)基础安装部署

一.Httpd2.2基础安装部署 1.httpd-2.2软件的基础配置说明: 2.HTTPD配置练习 1)修改监听的地址端口: 2)持久连接配置 3)MPM机制配置 4)DSO:支持动态装载和卸载 5)'Main' Server'配置 6)站点资源访问控制 7) 定义站点主页面 8) 定义路径别名: 9)日志设定 10)httpd-manual 手册软件 11)基于用户的访问控制机制 12)虚拟主机 13)status页面:httpd程序自带的能够不断的反馈刷新的方式显示内部状态页面 14)cu

httpd-2.2和httpd-2.4虚拟主机的实现

1.建立httpd服务,要求:  (1) 提供两个基于名称的虚拟主机www1, www2:有单独的错误日志和访问日志:   (2) 通过www1的/server-status提供状态信息,且仅允许tom用户访问:  (3) www2不允许192.168.0.0/24网络中任意主机访问:2.为上面的第2个虚拟主机提供https服务: 实验要求并不多,但是考虑到仅仅是为了测试,所以域名无需去互联网申请,也无需到互联网中的根CA注册证书,一切自给自足即可.为了达成实验要求,我准备了四台虚拟机,一台Ce