超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
1960年Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和Internet工作小组(Internet Engineering Task Force)共同合作研究,最终发布了一系列的RFC,其中最著名的就是RFC 2616。RFC 2616定义了HTTP协议的我们今天普遍使用的一个版本——HTTP 1.1。 由于Ted Nelson对HTTP技术的发展做出的突破性历史贡献,他被称为“HTTP之父”。
HTTP/0.9是第一个版本的HTTP协议,已过时。它的组成极其简单,只允许客户端发送GET这一种请求,且不支持请求头。由于没有协议头,造成了HTTP/0.9协议只支持一种内容,即纯文本。不过网页仍然支持用HTML语言格式化,同时无法插入图片。
HTTP/0.9具有典型的无状态性,每个事务独立进行处理,事务结束时就释放这个连接。由此可见,HTTP协议的无状态特点在其第一个版本0.9中已经成型。一次HTTP/0.9的传输首先要建立一个由客户端到Web服务器的TCP连接,由客户端发起一个请求,然后由Web服务器返回页面内容,然后连接会关闭。如果请求的页面不存在,也不会返回任何错误码。
HTTP协议的第二个版本,第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用。相对于HTTP/0.9增加了如下主要特性:
HTTP协议的第三个版本是HTTP/1.1,是目前使用最广泛的协议版本。HTTP/1.1是目前主流的HTTP协议版本,相对于HTTP/1.0新增了以下内容:
(1) 默认为长连接HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection:keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
(2) 提供了范围请求功能(宽带优化)HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。这是支持文件断点续传的基础。
(3) 提供了虚拟主机的功能(HOST域)在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
(4) 多了一些缓存处理字段HTTP/1.1在1.0的基础上加入了一些cache的新特性,引入了实体标签,一般被称为e-tags,新增更为强大的Cache-Control头。
(5) 错误通知的管理在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
HTTP协议的第四个版本是HTTP/2.0,相对于HTTP/1.1新增了以下内容:
二进制分帧HTTP 2.0 的所有帧都采用二进制编码
帧:客户端与服务器通过交换帧来通信,帧是基于这个新协议通信的最小单位。
消息:是指逻辑上的 HTTP 消息,比如请求、响应等,由一或多个帧组成。
流:流是连接中的一个虚拟信道,可以承载双向的消息;每个流都有一个唯一的整数标识符(1、2 … N);
多路复用多路复用允许同时通过单一的HTTP/2.0 连接发起多重的请求-响应消息。有了新的分帧机制后,HTTP/2.0不再依赖多个TCP 连接去处理更多并发的请求。每个数据流都拆分成很多互不依赖的帧,而这些帧可以交错(乱序发送),还可以分优先级。最后再在另一端根据每个帧首部的流标识符把它们重新组合起来。HTTP 2.0 连接都是持久化的,而且客户端与服务器之间也只需要一个连接(每个域名一个连接)即可。
头部压缩HTTP/1.1 的首部带有大量信息,而且每次都要重复发送。HTTP/2.0 要求通讯双方各自缓存一份首部字段表,从而避免了重复传输。
请求优先级浏览器可以在发现资源时立即分派请求,指定每个流的优先级,让服务器决定最优的响应次序。这样请求就不必排队了,既节省了时间,也最大限度地利用了每个连接。
服务端推送服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。正因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式可以极大地提升速度。
在访问浏览页时,一个网页上有各种各样的资源。而资源分为两种:
根据上图来进行解释:
request报文
response报文
method:请求方法,标明客户端希望服务器进行对资源的操作
method有以下几种常见方法:
status:状态码,用来标记请求处理过程中发生的情况
status | 解释 |
---|---|
100-101 | 信息提示,一般很少出现 |
200-206 | 成功,表示请求的所有数据已经成功返回 |
300-305 | 重定向 |
400-415 | 错误,客户端错误 |
500-505 | 错误,服务器端错误 |
常见的几种状态码:
200:表示服务器端成功处理了请求。返回客户端想访问的网页
301:请求的URL指向的资源已经被删除,但在响应报文中首部的location处指明了资源现在所在的新位置。
302:与301相似,但在响应报文中的首部location处指明了资源现在所在的临时位置。
304:如果客户端发送了带有条件式的方法进行访问,而文档内容并没有发生改变,服务器就会响应此状态码
401:需要输入账号和密码的认证方式才能访问资源
403:请求被禁止
404:服务器无法找到客户请求的资源
500:服务器内部错误
502:代理服务器从后端服务器接收到了一条伪响应
Headers:每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟上一个可选空格,接着是一个值
首部的分类:通用首部,请求首部,响应首部,实体首部,扩展首部
Date:报文的创建时间
Connection:连接状态,如keepalive,close
Via:显示报文经过的中间节点(也就是代理服务器)
Cache-control:控制缓存
Accept:通过服务器自己可接受的媒体类型(如:text/html, application/xml…)
Accept-encoding:接收编码格式,一般指压缩机制,如:gzip,deflate,sdch等
Accept-language:接受的语言
Host:请求的服务器名称和端口
Referer:指当前的资源是由哪个资源转过来的
User-agent:客户端代理
if-modified-since: 自从指定时间后,请求的资源是否发生过修改
if-none-match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配;
Authorization:向服务器发送认证信息,如账号和密码
Cookie:客户端向服务器发送cookie
http是无状态的,无法追踪用户,那么服务器怎么来追踪用户?cookie就像独一无二的令牌,在用户访问浏览页时,将cookie发送给用户,并在服务器端建立一个文件专门存放用户的cookie。当用户重新访问时,服务器会根据匹配用户请求的cookie来追踪用户。
Proxy-Authorization: 向代理服务器认证
age:响应持续时长
Server:服务器程序软件名称和版本; 一般在服务器端要移除此项
accept-ranges:服务器可接受的请求范围类型
Vary:服务器查看其它首部列表
set-cookie:向客户端设置cookie
WWW-Authenticate:来自服务器的对客户端的质询认证表单
Allow:列出对此实体可使用的请求方法
Location:告诉客户端真正的实体位于何处
Content-Length: 主体的长度
Content-Location: 实体真正所处位置;
Content-Type:主体的对象类型
Apache HTTP Server(简称Apache),中文名:阿帕奇,是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。
Apache支持许多特性,大部分通过编译的模块实现。这些特性从服务器端的编程语言支持到身份认证方案。一些通用的语言接口支持Perl,Python, Tcl, 和 PHP。流行的认证模块包括 mod_access, mod_auth 和 mod_digest。其他的例子有 SSL 和 TLS 支持 (mod_ssl), 代理服务器 (proxy) 模块,很有用的URL重写(由 mod_rewrite 实现),定制日志文件 (mod_log_config),以及过滤支持(mod_include 和 mod_ext_filter)。Apache日志可以通过网页浏览器使用免费的脚本AWStats或Visitors来进行分析。
主要的特性如下:
MPM机制:
prefork:多进程模块,每个进程响应一个请求。
工作模式
一个主进程:负责生成和回收子进程;负责创建套接字,负责接收请求,并将请求派发给某子进程进行处理
n个子进程:每一个进程只能处理一个请求。
worker:多进程多线程模块,每个线程响应一个请求
工作模式
一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理;
n个子进程:负责生成多个线程
每个线程:负责响应用户请求
event:事件驱动模型,多线程模型,每个进程响应多个请求
工作模式
一个主进程:负责生成子进程;负责创建套接字;负责接收请求,并将其派发给某子进程进行处理
子进程:基于事件驱动机制直接响应多个请求;
httpd程序的主流版本:2.2和2.4
httpd直接在centos发行版中提供, 除非定制新功能等需要源码编译安装。否则尽量使用yum源来进行安装
centos6(http-2.2):
Name : httpd
Arch : x86_64
Version : 2.2.15
Release : 69.el6.centos
Size : 3.0 M
Repo : installed
From repo : base
Summary : Apache HTTP Server
URL : http://httpd.apache.org/
License : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
centos7(httpd-2.4):
名称 :httpd
架构 :x86_64
版本 :2.4.6
发布 :89.el7.centos
大小 :9.4 M
源 :installed
来自源 :updates
简介 : Apache HTTP Server
网址 :http://httpd.apache.org/
协议 : ASL 2.0
描述 : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
配置文件:
/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/logs/httpd:
access_log: 访问日志
error_log: 错误日志
站点文档:
/var/www/html
模块文件路径:
/usr/lib64/httpd/modules
服务控制和启动:
chkconfig httpd on|off
service {start|stop|restart|status|configtest|reload} httpd
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
systemd单元:
/usr/lib/systemd/system/httpd.service
主程序文件:
/usr/sbin/httpd
日志文件:
/var/logs/httpd:
access_log: 访问日志
error_log: 错误日志
站点文档:
/var/www/html
模块文件路径:
/usr/lib64/httpd/modules
模块相关的配置文件:
/etc/httpd/conf.modules.d/*.conf
服务控制和启动:
systemctl enable|disable httpd.service
systemctl {start|stop|restart|status} httpd.service
主配置文件:/etc/httpd/conf/httpd.conf
语法格式:Listen [IP-address:]portnumber [protocol]
1、省略IP表示为0.0.0.0
2、监听多个端口可以
3、 修改监听socket,重启服务进程方可生效;
4、 限制其必须通过ssl通信时,protocol需要定义为https
如果想要监听多个端口,直接在Listen的下一行添加一个即可
Listen 80
Listen 8080
检查语法使用:httpd -t
[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# ss -tnl
LISTEN 0 128 :::8080 :::*
LISTEN 0 128 :::80
2.4版本在配置文件中并没有显式写出。但是两个版本写的方式是一样的。
保持连接:TCP在连接之后,每个资源在获取之后不全断开连接,而是继续等待其它资源请求的进行。
但长连接自身的缺陷是会一直占用着连接不释放,所以必须得给出一个长连接的超时时间。这个超时时间由KeepAliveTimeout指令控制,进入长连接后如果在此时间间隔内客户端还没有发送新请求,则TCP连接自动断开。如果在长连接状态下,客户端再次发送了请求,则服务端处理请求,并在处理完请求后又再次进入长连接状态并计算KeepAliveTimeout。
KeepAlive on|off 设置保持连接
KeepAliveTimeout 15 保持连接
MaxKeepAliveRequests 100 保持 连接的最大请求数量
对于并发访问量较大的服务器应该把保持连接给关掉。
该指令设置httpd的安装位置,也就是常称之为的basedir,在此目录下应该具有module、logs等目录。此项为默认配置,bu不要去修改
DocumentRoot是文档的根目录,这个文档的意思是展现在网络上的文档。使用rpm包安装的httpd的DocumentRoot默认值为"/var/www"。设置DocumentRoot后,将需要在网络上访问的文件都放进此目录下即可。
DocumentRoot "/web/vhosts/" 如果改为这样,那么所有的网站文档全部放在此目录下,否则无法访问
SeverName用来标识web服务的主机名,只有在基于名称的虚拟机时该指令才是必须的。稍后配置基于名称的虚拟机时会用到此项。
例如: ServerName www.example.com
ServerAlias指令设置主机的备用名称,以便与基于名称的虚拟主机一起使用。该 ServerAlias可包含通配符,如果合适的话。
例如:
ServerName server.example.com
ServerAlias server server2.example.com server2
ServerAlias *.example.com
UseCanonicalName Off
# ...
#该处ServerName和ServerAlias的作用是一样的。
用于封装一组指令只作用于指定主机名或IP地址的虚拟主机上。
语法格式:
...
Addr可以是以下任何一种,可选地后跟冒号和端口号(或*):
DocumentRoot "/www/docs/host.example.com"
ServerName host.example.com
options用于开启网站索引选项,它的值有:All、None、ExecCGI、FollowSymLinks、Includes、IncludesNOEXEC、Indexes、MultiViews、SymLinksIfOwnerMatch。
一般options处于None值,如果需要开启下载选项时,一般会设置一个indexes选项。
AllowOverride 用于控制服务器是否读取".htaccess"配置文件。一般此处都设置为None值
Directory指令仅应用于指定目录,该目录的子目录以及相应目录中的文件。如上图,Directory下的所有指令只对/var/www有作用。
需要注意的是2.4版本中,每一个文件的需求都需要显式指定,如果不显式指定,将无法进行访问。而2.2版本不需要显式指定。
更多的指令可以去官网上查询 https://httpd.apache.org/docs/2.4/
以当前的题目来进行说明:
1、建立httpd服务,要求:
(1) 提供两个基于名称的虚拟主机:
www1.stuX.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1/error_log,访问日志为/var/log/httpd/www1/access_log;
www2.stuX.com,页面文件目录为/web/vhosts/www2;错误日志为/var/log/httpd/www2/error_log,访问日志为/var/log/httpd/www2/access_log;
(2) 通过www1.stuX.com/server-status输出其状态信息,且要求只允许提供账号的用户访问;
(3) www1不允许192.168.1.0/24网络中的主机访问;
2、为上面的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点;
(1) 要求使用证书认证,证书中要求使用国家(CN),州(Beijing),城市(Beijing),组织为(MageEdu);
(2) 设置部门为Ops, 主机名为www2.stuX.com;
启动httpd服务:
[root@localhost ~]# systemctl start httpd.service
[root@localhost ~]# systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since 一 2019-05-13 16:05:08 CST; 3h 7min ago
Docs: man:httpd(8)
man:apachectl(8)
修改主配置文件,让页面文件目录为/web/vhosts/。,2.4和2.2设置一样。按需创建制定的文件目录
DocumentRoot "/web/vhosts/" #修改根文件目录
# Further relax access to the default document root:
#修改页面放置文件目录
[root@localhost ~]# mkdir -pv /web/vhosts
mkdir: 已创建目录 "/web"
mkdir: 已创建目录 "/web/vhosts"
[root@localhost ~]# cd /web/vhosts
[root@localhost vhosts]# mkdir www{1,2}
基于名称的虚拟主机创建
(1)在www1和www2目录下分别创建index.html,(2.2和2.4都是如此操作)
[root@localhost www1]# cat index.html
hello,www1
[root@localhost www2]# cat index.html
hello www2
(2)为www1和www2进行httpd配置(2.4)
[root@localhost conf.d]# cat www1.conf
ServerName www1.stux.com
DocumentRoot "/web/vhosts/www1"
Options None
Allowoverride None
Require all granted
[root@localhost conf.d]# cat www2.conf
ServerName www2.stux.com
DocumentRoot "/web/vhosts/www2"
Options None
Allowoverride None
Require all granted
(3)为两个虚拟主机配置DNS解析
[root@localhost ~]# cat /etc/named.rfc1912.zones
zone "stux.com" IN {
type master;
file "stux.com.zone";
};
#在named.rfc1912.zones里添加zone区域
[root@localhost ~]# cat /var/named/stux.com.zone
$TTL 3600
@ IN SOA stux.com. admin.stux.com (
01
1H
10M
1D
1D
)
IN NS ns1.stux.com.
ns1 IN A 192.168.199.190
www1 IN A 192.168.199.190
www2 IN A 192.168.199.190
#添加区域数据文件
(4)测试按照名称进程主机访问
上述根据名称不同创建多个虚拟机。另外还有两种基于IP和基于PORT的不同来创建虚拟机。
(1)以IP不同来创建虚拟机,仍然以上边为例。
[root@localhost conf.d]# cat www1.conf
ServerName www1.stux.com
DocumentRoot "/web/vhosts/www1"
Options None
Allowoverride None
Require all granted
#上面为配置www1的虚拟机
[root@localhost conf.d]# cat www2.conf
ServerName www2.stux.com
DocumentRoot "/web/vhosts/www2"
Options None
Allowoverride None
Require all granted
#上面为配置www2的虚拟机
(2)以端口不同创建虚拟机
[root@localhost conf.d]# cat www1.conf
ServerName www1.stux.com
DocumentRoot "/web/vhosts/www1"
Options None
Allowoverride None
Require all granted
#上面为配置www1的虚拟主机
[root@localhost conf.d]# cat www2.conf
ServerName www2.stux.com
DocumentRoot "/web/vhosts/www2"
Options None
Allowoverride None
Require all granted
#上面为配置www2的虚拟主机
上述所有操作都是基于2.4版本。以下为2.2版本。只演示基于名称的虚拟主机
[root@ydong ~]# uname -r
2.6.32-642.el6.x86_64
#查看系统版本
只说最后一步,因为前面的步骤都一样。
这里记录一下遇到的问题,在修改完httpd.conf中的访问目录后,发现网址没有权限。这是因为SElinux和防火墙开着。关掉之后,一切正常。
[root@ydong conf.d]# cat www1.conf
ServerName www1.stux.com
DocumentRoot "/web/vhosts/www1"
#在/etc/httpd/conf.d/下创建www1的配置,此处跟2.4不一样,不用显式的给访问目录权限。2.4需要给出显式的权限
[root@ydong conf.d]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.199.155 www1.stux.com
#在hosts文件中填上解析地址
httpd的日志分为错误日志error_log和访问日志customlog。错误日志一般采用默认即可,最多改下错误日志的存放路径,而CustomLog因为量比较多,很可能需要定制。事实上,ErrorLog由httpd的核心模块提供,而CustomLog却提供了专门的模块mod_log_config来处理,该模块还支持TransferLog指令,该指令和CustomLog作用和用法基本类似,如有需要可查官方手册,本文略过。(转载)
错误日志error_log的级别logLevel:debug, info, notice, warn(默认), error, crit, alert, emerg。一般采用默认的即可,最多修改一下路径。
上图中Customlog决定了访问日志的存放位置,LogFormat是指定日志记录的事项。除非有特殊需求,一般使用默认即可。关于各个指令可以去官网查看http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats
为www1和www2添加日志,此处2.2和2.4一样。以下为2.4版本。
ServerName www1.stux.com
DocumentRoot "/web/vhosts/www1"
Options None
Allowoverride None
Require all granted
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Customlog "logs/www1/access_log" combined
Errorlog "logs/www1/error_log"
Loglevel warn
[root@localhost c
使用htpasswd生成用户的账号和密码、加密算法有MD5、SHA和系统上的crypt()函数。不指定算法时,默认使用MD5算法。
语法格式:htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username
常用选项 | 解释 |
---|---|
-c | 自动创建此处的文件,仅在不存在文件时使用 |
-m | md5加密格式 |
-s | SHA加密格式 |
-b | 批量式添加用户 |
创建用户和用户密码:
[root@localhost conf.d]# htpasswd -c /tmp/htpasswd tom
New password:
Re-type new password:
Adding password for user tom
[root@localhost conf.d]# htpasswd -b /tmp/htpasswd tiger dongyifeeng
Updating password for user tiger
[root@localhost conf.d]# mv /tmp/htpasswd ./.htpasswd
#需要将创建好的密码文件放置到某一个目录中,并将此重新定义为隐藏文件
定义安全区域:在原来www1.conf的基础上再次添加即可。2.2和2.4一样,以下为2.4版本
ServerName www1.stux.com
DocumentRoot "/web/vhosts/www1"
Options None
Allowoverride None
AuthType Basic
AuthName "plz enter your username and password"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require user tom jerry #此处为设置哪个用户可以访问
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Customlog "logs/www1/access_log" combined
Errorlog "logs/www1/error_log"
Loglevel warn
除了上述基于用户,也可以基于组的访问。就是将指定访问的用户放入一个组里。需要事先创建一个文件,里面按照GRP_NAME: username1 username2
的方式写入。username必须是htpasswd创建的用户。
[root@localhost conf.d]# htpasswd -c -b /etc/httpd/conf.d/.person.grup.pass wang 123456
Adding password for user wang
[root@localhost conf.d]# htpasswd -b /etc/httpd/conf.d/.person.grup.pass li 123456
Adding password for user li
#创建两个用户
[root@localhost conf.d]# cat person
person:wang li
#创建一个文本写入group名
ServerName www1.stux.com
DocumentRoot "/web/vhosts/www1"
Options None
Allowoverride None
AuthType Basic
AuthName "plz enter your username and password"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require user tom jerry
#下面为基于组控制访问
AuthUserFile "/etc/httpd/conf.d/.person.group.pass"
AuthGroupFile "/etc/httpd/conf.d/person"
Require group person
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Customlog "logs/www1/access_log" combined
Errorlog "logs/www1/error_log"
Loglevel warn
status页面主要用来显示apache的运行状态,这个页面不是任何人都可以访问的。应该对其进行账号控制访问。(2.2和2.4一样,以下为2.4)
[root@localhost conf.d]# cat status.conf
SetHandler server-status ##这个是Apache的内建命令,不能更改
AuthType Basic
AuthName "name and password"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require valid-user
控制来源访问
2.4版本 使用Require not ip 或者 not host。这里记录一下我遇到的问题,指名not ip时需要写上一个至少能成功的地址。这样指令才会生效
ServerName www1.stux.com
DocumentRoot "/web/vhosts/www1"
Options None
Allowoverride None
Require not ip 192.168.199.190
Require ip 192.168
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
Customlog "logs/www1/access_log" combined
Errorlog "logs/www1/error_log"
Loglevel warn
2.2版本
允许所有访问时,order allow,deny allow from all
下面为拒绝192.168.199.190的例子
[root@ydong conf.d]# vim www1.conf
[root@ydong conf.d]# cat www1.conf
ServerName www1.stux.com
DocumentRoot "/web/vhosts/www1"
Options None
Allowoverride None
order deny,allow #此处是拒绝的话,要把deny写在前面
deny from 192.168.199.190
Customlog "logs/www1/access_log" combiend
(1)创建私有CA
#生成密钥
[root@localhost CA]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
Generating RSA private key, 4096 bit long modulus
............................................................................++
....................................................................................................................................................................................++
e is 65537 (0x10001)
#生成自签证书
[root@localhost CA]# openssl req -new -x509 -key /etc/pki/CA/private/cdkey.pem -out /etc/pki/CA/cacert.pem -days 365
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BeiJing
Locality Name (eg, city) [Default City]:BeiJing
Organization Name (eg, company) [Default Company Ltd]:Magedu
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:a
Email Address []:[email protected]
#为CA提供文件和目录
[root@localhost CA]# touch serial index.txt
[root@localhost CA]# echo 01 > serial
#http请求签证,生成密钥
[root@localhost ssl]# (umask 077; openssl genrsa -out /etc/httpd/httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
......+++
.............................................+++
e is 65537 (0x10001)
#生成证书请求
[root@localhost ssl]# openssl req -new -key /etc/httpd/httpd.key -out /etc/httpd/httpd.csr -days 30
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BeiJing
Locality Name (eg, city) [Default City]:BeiJing
Organization Name (eg, company) [Default Company Ltd]:Magedu
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server's hostname) []:a
Email Address []:[email protected]
#CA主机签署证书
[root@localhost CA]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 30
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: May 15 01:53:56 2019 GMT
Not After : Jun 14 01:53:56 2019 GMT
Subject:
countryName = CN
stateOrProvinceName = BeiJing
organizationName = Magedu
organizationalUnitName = Ops
commonName = www1.stux.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
70:CD:AC:A4:37:A3:D1:77:E4:F3:78:21:28:B6:DC:67:E3:06:01:D9
X509v3 Authority Key Identifier:
keyid:10:92:B3:F5:10:BB:56:54:FA:99:1C:17:01:85:7F:32:E8:78:75:B5
Certificate is to be certified until Jun 14 01:53:56 2019 GMT (30 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
安装mod_ssl,配置SSL使用的证书
[root@www1 conf.d]# yum install -y mod_ssl
[root@www1 conf.d]# ls | grep ssl.conf
ssl.conf
#修改ssl.conf配置
将CA主机上的自签证书发送给需要https连接的服务器上。并导入到浏览器中。
[root@localhost CA]# ls | grep cacert.pem
cacert.pem
#将上述文件复制到需要https连接的服务器上
PS:其实写的不是很全面,有好多东西还没写到,大家可以上网多多查看,如有错误,望多多包涵。