在网络遍布的今天,面对http大家应该都不陌生,作为网址最前边的定义的格式,大家理所当然的认为那是访问网址的前段标记。而http是什么,代表的是什么意思我想不是所有人都了解的.
下面先来介绍一下最基本的概念知识:
http协议:Hyper Text Transfer Protocol 既超文本传输协议
浏览网页时在浏览器地址栏中输入的URL前面都是以"http://"开始的。HTTP定义了信息如何被格式化、如何被传输,以及在各种命令下服务器和浏览器所采取的响应。 传输文本:HTML
html: Hyper Text Mark Language 超文本标记语言
html文本框架:
<html> <head> <title>TITLE</title> </head> <body> <h1>H1</h1>
<h2>H1</h2>
<a href="admin.html">ToGoogle
---------超文本链接 </body> </html>
html文档的生成方式有两种: 静态和动态
静态:实现超文本方式编辑好的。
动态:编程语言( php, jsp, asp .net )编写的程序可输出html格式的结果。
HTML的执行依赖脚本解释器:
php: php解释器
jsp: jvm
http的协议报文:
request: 请求不同html文档 用浏览器(Browser)发出请求User Agent
response: 响应Server
http协议的版本:
http 0.9 :仅用于传输html文档
http 1.0 :引入MIME机制,从而支持多媒体数据;引入keep-alive(持久连接);缓存
MIME: Multipurpose Internet Mail Extesions 多用途因特网邮件扩展
http 1.1 :更多请求方法,更精细缓存控制;持久连接(persistent);
http 2.0 :2的版本算是比较新的版本了,目前有2.0,2.2,2.4三个版本
资源名称:URI (Uniform Resource Idnentifier)
URL:描述一个特定服务器上某资源的特定位置
http://www.magedu.com:80/download/bash-4.3.1-1.rpm
分为三部分:
scheme(方案):http://
服务器:www.magedu.com:80
特定服务器上的资源:/download/bash-4.3.1-1.rpm
CGI:Common Gateway Interface 公共网关接口
简化版的http
http事务:一次请求及对应的响应
http方法:
GET:请求获取一个资源,需要服务器发送
HEAD:跟GET近似,但其不需要服务响应请求的资源,而返回响应首部
POST:基于HTML表单向服务器提交数据,服务器通常需要存储此数据;(位置:通常为关系型数据库)
PUT:与GET相反,向服务器发送资源;服务器通常需要存储此资源;(位置:通常为文件系统)
DELETE:删除URL指向的资源
OPTIONS:探测服务器端对请求的URL所支持使用的请求方法
TRACE:跟一次请求中间所经过的代理服务器、防火墙或网关等
http状态码: 也就是http执行的状态信息,以便于执行错误时能快速定位问题所在。
1XX:信息性状态码
2XX:成功状态码
200:OK
201:CREATED
3XX: 重定向类的状态码
301: Moved Permanently, 永久重定向
302: Found, 临时重定向,会在响应报文中使用“Location: 新位置”;
304: Not Modified 未被修改
4XX:客户端类错误
403:Forbidden 请求被拒
404: Not Found 请求资源不从在
405: Method Not Allowed 不许使用此方法请求次资源
5XX:服务器类的错误
500:Internal Server Error, 服务器内部错误
502:Bad Gateway, 代理服务器从上游服务器收到一条伪响应;
503:Service Unavailable, 服务暂时不可用
http协议:协议首部格式
Name: Value 可以有很多个首部。
例子:Content-Type(内容类型): images/gif
http协议首部:
通用首部
请求首部
响应首部
实体首部
扩展首部:非标准首部,可由程序员自行创建;X-Forward-For, X-Via
http请求报文:
<method(方法)> <request-URL(请求的资源URL)> <version(版本)>
<HEADERS(首部,可是多个)>
“空白行”
<entity-body(请求实体,基于get的请求实体为空一般)>
http响应报文:
<version> <status> <reason-phrase>
<HEADERS>
“空白行”
<entity-body>
解释:
<method>:请求方法
<request-URL>: 请求的资源,可以是相对路径,如/images/log.jpg,也可以绝对路径,
如http://www.magedu.com/images.banner.jpg
<version>: http协议版本,格式HTTP/<major>.<minor>,例如HTTP/1.0, HTTP/1.1
<headers>:各种所可以使用的首部
<status>: 状态码
<reason-phrase>: 原因短语,指状态码的易读信息
注意:http协议是无状态,stateless
用来储存用户密码的
cookie: Set-Cookie ,Set-Cookie2 , Cookie
通用首部:
Connection: 定义C/S之间关于请求、响应的有关选项
Connection: keep-alive 持续链接
Cache-Control: 缓存控制
请求首部:
Client-IP: 客户端IP地址
Host: 请求的主机
Referer: 指明了请求当前资源原始资源的URL
User-Agent: 用户代理
Accept首部:
Accept: 服务端能够发送的媒体的类型
Accept-Charset: 接受的字符集
Accept-Encoding: 编码格式
Accept-Language: 接受的语言
条件式请求:
跟安全相关请求:
Authorization:响应账号密码
Cookie:
响应首部:
Age: 资源可以使用的时间
Server: 向客户说明自己的程序名称和版本
协商首部:
Vary: 首部列表,服务器会根据列表中的内容挑一个最适用的版本发送给客户端
跟安全相关:
WWW-Authentication: 要求客户端提供账号密码
Set-Cookie
实体首部:
Location: 资源的新位置
Allow: 允许对此资源使用的请求方法
实体内容相关的首部:
Content-Encoding: 告诉是否压缩,根据是否接受的编码方式。
Content-Language: 内容编码格式
Content-Length: 内容长度
Content-Location: 内容所在位置
Content-Type: 内容的类型
缓存相关:
ETag :扩展标签
Expires :过期时间
Last-Modified: 上次的修改时间
一次Web资源请求的具体过程(服务器的角度):建立连接 ,接收请求 ,处理请求 ,访问资源 ,构建响应 ,发送响应 ,记录日志
连接方式是: 连接套接字(client, cport <--> server, sport)监听在80端口。
web服务器的I/O结构:
单进程模型:串行
多进程模型:每个进程响应一个用户请求实现并发的效果
复用的I/O机制:一个进程生成多个线程,每个线程响应一个用户请求
复用的I/O机制:多个线程,每个线程响应多个用户请求;
httpd: 是Apache的超文字传输协定常驻程式
httpd的特性:
高度模块化:core + modules
DSO: Dynamic Shared Object 动态共享对象
MPM:Multipath Processing Module 多路处理模块
统称,事实上有多个实现:
prefork: 每个进程响应一个用户请求,预先生成多个空闲进程;
select():1024
worker: 启动多个进程,每个进程生成多个线程,每个线程响应一个用户请求;
event: 启动多个线程,每个线程响应N个请求;
event-driven:事件驱动
httpd的功能特性:
丰富用户认证:基本认证和摘要认证
CGI:原生支持perl CGI (公共网关接口),虚拟主机: ,基于端口、IP、主机名 ,反向代理,负载均衡,用户站点,路径别名,支持第三方模块
CentOS 6: httpd
配置文件:
/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf
服务脚本:
/etc/rc.d/init.d/httpd
脚本配置文件:/etc/sysconfig/httpd
模块目录:
/etc/httpd/modules: 链接文件
/usr/lib64/httpd/modules
主程序:
/usr/sbin/httpd: prefork
/usr/sbin/httpd.event: event
/usr/sbin/httpd.worker: worker
日志文件目录:
/var/log/httpd
access_log: 访问日志
error_log: 错误日志
站点文档根目录:
/var/www/html/images/a.jpg
http://www.magedu.com/images/a.jpg
httpd的配置文件说明:
# grep "Section" httpd.conf
### Section 1: Global Environment 全局配置段,配置httpd 自己的工作特性,以及个虚拟主机共享的参数。
### Section 2: 'Main' server configuration 网站中心主机也叫主服务器的配置
### Section 3: Virtual Hosts 虚拟主机的配置
主服务器和虚拟主机一般不同时使用;默认仅启用了主服务器;
指令参数:不区分字符大小写,但其值有可能会区分大小写
/etc/httpd/conf/httpd.conf 的配置信息详解:
ServerTokens OS 显示httpd的版本
ServerRoot "/etc/httpd" 服务器运行目录,使用相对路径都相对它
PidFile run/httpd.pid pid文件相对路径
1、持久连接
KeepAlive {On|Off}
MaxKeepAliveRequests 100 请求最大数量
KeepAliveTimeout 15 请求最长时间
以上两个满足一个就关闭进程
2、MPM参数: server-pool的调节方式:
httpd -l:显示主要的httpd模块
httpd -D DUMP_MODULES:显示已装在的可动态加载的模块
<IfModule prefork.c> 判断模块是否生效
StartServers 8 启动多少空闲进程
MinSpareServers 5 最少多少空闲进程
MaxSpareServers 20 最多多少空闲进程
ServerLimit 256 最多启动进程数
MaxClients 256 最多运行同时处理多少个客户端请求
MaxRequestsPerChild 4000 子进程最多允许执行进程
</IfModule>
<IfModule worker.c>
StartServers 4 启动多少空闲进程
MaxClients 300 最多运行同时处理多少个客户端请求
MinSpareThreads 25 最少多少空闲线程
MaxSpareThreads 75 最多多少空闲线程
ThreadsPerChild 25 每个进程可以启动多少线程
MaxRequestsPerChild 0
</IfModule>
event.c 事件驱动模型
3、指定监听的地址和端口
Listen [IP:]PORT
此指令可重复指定多次;
4、DSO动态装载的模块
显示:# httpd -D DUMP_MODULES
LoadModule Module_Name /path/to/Module_File
Include conf.d/*.conf 指定包含的文件
以什么用户的身份来运行、
User apache
Group apache
ServerAdmin root@localhost 服务器管理员(邮箱地址)
ServerName www.example.com:80 主机名,如果不启用则去电脑反解,但不一定正确
5、指定站点根目录 http默认的访问目录
DocumentRoot "/var/www/html"
6、站点路径访问控制
基于本地文件系统路径:
<Directory "/path/to/somewhere"> 路径为/var/www/html/images/a.jpg 文件存在路径
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
基于URL访问路径做访问控制
<Location "/path/to/URL"> 路径为/images/a.jpg 地址访问访问路径
</Location>
7、于Directory中可用的访问控制
(1) Options
Indexes: 当访问的路径下无默认的主页面,将所有资源以列表形式呈现给用户;危险,慎用;取消用-号
FollowSymlinks: 跟踪符号链接,取消用-号
(2) AllowOverride
支持在每个页面目录下创建.htaccess用于实现对此目录中资源访问时的访问控制功能。
8、基于IP做访问控制
Order allow(运行谁访问),deny(拒绝访问) 默认是deny 先deny 后allow意思为明确deny的才拒绝,其他的都allow
Deny from 172.16.100.17
Allow from 172.16.0.0/16
from后面能接受的地址格式: 前提是directory 后[~]匹配
IP, Network Address
网络地址格式较为灵活:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
9、定义默认的主页面
DirectoryIndex index.html index.html.var
10、配置日志功能
ErrorLog "/path/to/error_log" 错误日志相对路径
LogLevel {debug|info|notice|warn|error|crit|alert|emerg} 日志级别轻------>重
最详细信息,常见信息,需要引起注意点 ,警告,错误,蓝色警告,橙色警告,红色警告
指定级别后,比指定级别高的都包括
LogFormat 日志格式
CustomLog "/path/to/access_log" LogFormat_Name(日志名称格式) 自定义日志,用来指定用户访问时产生的访问信息
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: 客户端地址
%l: 远程登录名,通常为-
%u: 认证时输入用户名,没有认证时为-
%t: 服务器收到 用户请求时的时间
%r:请求报名的起始行
%>s: 响应状态码
%b: 响应报文的长度,单位是字节
%{HEADER_NAME}i: 记录指定首部对应的值
11、路径别名
站点根目录:/www/html
http://www.magedu.com/images/logo/new.gif
此文件位置:/www/html/images/logo/new.gif
实现URL路径的映射,从而所访问的资源不再依赖于站点根目录;
Alias /URL/(访问路径名称) "/path/to/somewhere/" (访问路径路径)
12、设定默认字符集:http页面在解析式默认的语言格式
AddDefaultCharset UTF-8
13、CGI(公共网关接口)脚本 ,存在的目的是让网页提供动态页面
CGI脚本路径别名的方式来访问CGI脚本的,CGI脚本网页文件存放位置是/var/www/cgi-bin/
访问方法一般为http://server/cgi-bin/ 才能访问到/var/www/cgi-bin/目录下的CGI网页文件
所有请求到的特殊资源经由CGI协议交由程序执行解释权,程序解释权去磁盘载入要执行的页面程序并执行,将结果返回web服务器,最好返回给http。所以只要具有能遵循CGI规范,就可以作为开发网页语言
bash写CGI脚本:
所有文本都使用命令输出:echo, printf, cat
执行程序:命令引用
脚本格式:CGI脚本第一行
Content-Type: text/html 要指定说明你的内容类型
<pre> 页面程序内容要以pre开始 /pre结束。说明里边是要执行的语言
要执行的语言
</pre>
例子:一个bash 的CGI脚本
#!/bin/bashcat << EOFContent-Type: text/html<pre>THE HOSTNAME IS: $(hostname)</pre>EOF
FastCGI: 协议
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" 定义了CGI的存放的位置,和可执行的位置,访问cgi-bin就映射到/var/www/cgi-bin/目录下。
14、基于用户访问控制
上边我们知道有基于IP的访问机制,但是一但IP被攻破,那就很危险,所以下边我们来介绍一下基于用户的访问机制,这也是/etc/httpd/conf/httpd.conf中很重要的配置环节。不用担心IP的改变,
用户认证: 在任何情况下只要你输入正确的密码就可以访问。这就是实现的用户认证的功能。这里的用户指的是虚拟用户。
httpd支持两种方式的认证:基本认证Bisic(账号密码基于明文发送)、摘要认证digest(摘要加密认证)
虚拟用户:不是用来登陆账号系统的用户,仅用于访问某服务或获取某资源的凭证;
虚拟用户的账号存放地址:.htpasswd(文本文件,账号明文存放,密码需要加密存放) ,也可以放在SQL数据库中、还可以放在dbm数据库引擎,检索方式比较快。以API(应用程序接口)向外输出提供接口、ldap轻量级用户认证接口。
authentication provider: 账号和密码的存储机制; 简称authn 以上存放账号密码的地址都是基于authn
authorization provider: 授权提供者 简称authz
有基于文件和服务器的认证方式,文件认证是,服务器认证是你打开页面就要输入账号密码,否则无法看到信息,服务器的认证方式就是HTTP的认证方式,Bisic和digest的认证
案例:基于文件做访问控制
(1) 基于用户进行认证
加入我们在/var/www/html/admin/下有一个文件index.html.我们不想让人随便访问。所以我们要定义一个访问控制。随便找个位置。
<Directory "/var/www/html/admin"> Options none AllowOverride AuthConfig 表示做认证相关的配置。 AuthType Basic 认证类型baisc(兼容性比较好) AuthName "Admin Area." 认证名称说明干什么 #AuthBasicProvider file 认证provider的类型,默认file,基于文本认证时这一项可以不用指定。 AuthUserFile /etc/httpd/conf/.htpasswd 指明那个文件中放的账号文件账号密码。文件不存在,需要自己创建 Require valid-user 指定.htpasswd文件中的那些文件登陆。valid-user(允许所有的合法用户登陆) </Directory>
(2) 创建认证文件既.htpasswd 可以使用htpasswd工具来创建.htpasswd文件。
账号明文,密码加密 ,工具选项:
-c: 如果此文件事先不存在,则创建;注意,只能在创建第一个用户时使用;
-m:以md5的格式编码存储用户的密码信息
-D:删除指定用户
看一下我们创建出来的。
service httpd reload加载文件。
访问需要输入账号密码了。
<Directory "/var/www/html/admin"> Options none AllowOverride AuthConfig AuthType Basic AuthName "Admin Area." #AuthBasicProvider file AuthUserFile /etc/httpd/conf/.htpasswd 用户认证不要删除。 AuthGroupFile /etc/httpd/conf/.htgroup 基于组用户的认证 Require group GROUP_NAME </Directory>
组用户认证
租文件中写入:组名:user1 user2 user3
创建、/etc/httpd/conf/.htgroup
访问就会发现你test组里的用户都可以基于账号密码访问。
15、虚拟主机:
我们访问站点一般都是物理主机,在httpd上叫主服务器,但是它只能服务于一个站点。虚拟主机则是在一台物理主机上服务于多个站点,而不是多个进程。但是使用多个站点,我们就要使用不同的访问路径。1,我们可以基于端口访问,不过这种方式不常用,因为别人不知道你的访问端口是什么,2,可以基于IP访问,不过IP地址资源紧俏,代价过高,3 可以基于域名访问。
如果基于域名来解析的话意味着多个站点使用的是相同的IP:端口。又不能直接用域名访问。但是如果通过DNS访问的话域名会被解析为IP地址。哪又怎么办呢
HTTP请求报文的首部host(host:www.aolens.com)中定义了那个域名请求访问的,但是到达服务器之前还是基于IP的访问,只有到达后才能根据报文首部来判断是访问那个站点。
(1) 使用虚拟的前提:取消主服务器 ,所以要启用主服务的话一定要取消虚拟主机服务。
注释主服务器的站点根路径指定:DocumentRoot
(2) 定义虚拟主机
要基于主机名来实现虚拟主机还要启动(httpd2.2有。2.4没有)
NameVirtualHost IP:PORT 要监听所有的IP,用*号代替 <VirtualHost IP:PORT> ServerName 服务器名 DocumentRoot 根目录 ServerAlias -------------指定服务器别名 ErrorLog 错误日志 CustomLog 访问日志 </VirtualHost>
配置文件语法检查:
httpd -t
service httpd configtest
配置示例:
1)先基于端口来实现
配置/etc/httpd/conf/httpd.conf
首先添加Listen 8080端口
启用:NameVirtualHost 172.16.249.138:80
要保证/web/{hosta,hostb}目录存在。
配置见图
httpd -t检测有无错误
service httpd reload加载
80端口默认隐藏
2)先基于IP来实现
ifconfig eth0:0 172.16.249.139/16 添加一个地址
配置/etc/httpd/conf/httpd.conf
只修改IP地址
service httpd reload加载
地址是172.16.249.138
地址是172.16.249.139
3)基于主机名来实现
配置/etc/httpd/conf/httpd.conf
修改IP为一样的,主机名不同。
此时我们还不能就这样访问,因为没有DNS能正确解析出我们自定义的,所以我们可以在本地自建服务器,当然这太麻烦了,为了配合测试,我们修改/etc/hosts文件,自定义本地解析名称。
elinks 文本浏览器,我们用elinks 来测试
-dump: 获取到页面数据后直接退出进程;
elinks -dump http://www.aolens.com
而我们在windows里的浏览器访问的话就只会显示一个,那是应为我们windows的hosts没有配置DNS本地解析啊
配置此hosts
4)还可以IP端口主机名同时访问。
<VirtualHost 172.16.249.138:80> ServerName www.aolens.com DocumentRoot "/web/hosta" </VirtualHost> <VirtualHost 172.16.249.139:80> ServerName www.aolens.com DocumentRoot "/web/hostb" </VirtualHost> <VirtualHost 172.16.249.139:8080> ServerName mail.aolens.com DocumentRoot "/web/hostc" </VirtualHost>
16、如何使httpd能使用https协议:
ssl(安全的套接字层), tls(传输层安全)
http协议:文本编码 。http请求可以基于telnet来实现的。
验正:使用telnet发请求
# telnet 172.16.100.7 80 Trying 172.16.100.7... Connected to 172.16.100.7. Escape character is '^]'. GET /index.html HTTP/1.0 Host: www.b.org HTTP/1.1 200 OK Date: Fri, 08 Aug 2014 03:03:51 GMT Server: Apache/2.2.15 (CentOS) Last-Modified: Fri, 08 Aug 2014 02:14:52 GMT ETag: "e0009-12-50014c53e753f" Accept-Ranges: bytes Content-Length: 18 Connection: close Content-Type: text/html; charset=UTF-8 <h1> Host B </h1> Connection closed by foreign host.
HTTP/1.0的默认模式是一个请求一个连接,完成后断开,
如果使用HTTP/1.1的话,修改KeepAlive Off改为KeepAlive On
请求资源后不会断开而是等待下一次请求,或者达到等待时间上限。
httpd中ssl模块式单独成包的
ssl会话基于IP地址创建,所以,每一个IP仅创建一个SSL会话;所以有多个虚拟主机的话,只有一个主机可以使用ssl.
ssl回话要完成的步奏:
交换协议版本号
选择双方都支持的加密方式
客户端对服务器端实现身份验正
密钥交换
https协议是基于SSL二进制编码方式, 监听在443/tcp端口
因为https是加密方式传输,所以不能用telnet,可以使用openssl s_client 基于命令行来验证。
客户端验正服务器端证书:
有效性检测:证书是否仍然在有效期内 ,CA的可信度检测,证书的完整性检测 ,持有者的身份检测
下来我们来配置httpd工作于https:
(1) 安装mod_ssl模块
# yum install mod_ssl
我们用yum list all mod*查看一下mod_ssl有没有安装,mod_ssl后边用@标记,说明已安装,所以我们就不再安装了,如果没有安装的话就yum install mod_ssl 安装吧
我们看一下他都生成了那些配置文件。
我们来看一下/etc/httpd/conf.d/ssl.conf配置文件都定义了些什么!
LoadModule ssl_module modules/mod_ssl.so 加载了那些模块,及模块的位置
Listen 443 监听的端口SSLPassPhraseDialog builtin 建立ssl回话时密钥协商机制,builtinSSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) 会话缓存目录SSLSessionCacheTimeout 300 会话超时时间ErrorLog logs/ssl_error_log ssl专用错误日志TransferLog logs/ssl_access_log ssl访问日志SSLEngine on 是否启用ssl功能SSLProtocol all -SSLv2 使用所有不包括SSLv2协议SSLCipherSuite 。。。。 加密算法支持的SSLCertificateFile /etc/pki/tls/certs/localhost.crt 服务器端的证书文件SSLCertificateKeyFile /etc/pki/tls/private/localhost.key 服务器端的私钥文件<VirtualHost _default_:443> default默认的虚拟主机DocumentRoot "/var/www/html" 有多个虚拟主机的话,这一项可以指定使用ssl的虚拟主机。ServerName www.example.com:443 上边对应了,这里也要对应
(2) 为服务端生成私钥,并为其提供证书;
为了方便,我们的CA建立和签署就在一台主机上完成。
首先我们创建私有CA密钥:(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
生成的cakey.pem最好是600的权限。
下来生成自签署证书。私有CA的国家,地区什么的都要一样,不然没法签署。
#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem -days 1000
生成cacert.pem CA自己的证书就OK了。
我们还需要准备两个文件。touch serial index.txt 并且echo 01 > serial 、如果不是第一次签署证书就没有必要echo 01了。应为serial文件可能已经存在,也有值。
下面我们为http配置服务,第一创建一个目录/etc/httpd/ssl
# mkdir /etc/httpd/ssl && cd /etc/httpd/ssl
在创建一个私钥为我们web服务器使用的。
# (umask 077; openssl genrsa -out httpd.key 1024)
生成证书签署请求。
# openssl req -new -key httpd.key -out httpd.csr
签署证书:openssl ca -in httpd.csr -out httpd.crt -days 1000
证书生成文件在:/etc/httpd/ssl/httpd.crt 我们有两个虚拟主机IP唯一,所以我们只能为一台虚拟主机配置SSL
首先我们将DocumentRoot 路径和虚拟主机的路径对应起来,
修改/etc/httpd/conf.d/ssl.conf(ssl配置文件) 为DocumentRoot /web/hosta
ServerName为www.aolens.com
而<VirtualHost _default_:443>中的default指默认的虚拟主机,我们只为一台虚拟主机做ssl配置,所以就不改了。
还要修改说明证书所在位置和私钥所在位置
httpd -t检测语法。
没有问题就需要重启一下,因为监听了新的端口
service httpd restart
ss -tnl检测443端口是否在检测
先确保本地可以解析你的地址
这下我们试试https能不能访问。提示证书安全不收信任。
那是因为我们现在还没有信任这个CA
所以我们应该给windows上安装这个CA,把私有CA的cacert.pem放到桌面改名为cacert.crt
双击就可以安装了。
访问就发现为https加密成功了。
(3) 测试 ssl回话能不能正常工作
# openssl s_client -connect IP:PORT -CAfile /path/to/ca_certificate
17、status页面
httpd内嵌有handler用来处理一些特殊的场景,其中有一个handler用于输出当前httpd服务相关状态信息
我们在这使用的handler为: server-status
启用handler要使用SetHandler指令
handler处理器: 当文件被调用时,apache内部表示形式;一般每种文件类型都有其隐式处理器
我们先配置/etc/httpd/conf/httpd.conf。启用server-status。使用Location表示url为/server-status是启用server-status
配置允许访问的网段。
访问www.aolens.com/server-status
18、访问属性配置总结
配置文件系统访问路径:
<Directory [~] ""> 用波浪线表示后边可以用正则表达式做模式匹配。影响目录下的所有文件 </Directory> <File [~] ""> 只影响特定文件 </File> 配置URL访问路径: <Location [~] ""> 也可以模式匹配 相对于匹配到的某个或某类URL </Location> <LocationMatch ""> 明确指定使用模式匹配,不必用波浪线。 </LocationMatch>
19、curl命令
curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。
curl的常用选项:
-A/--user-agent <string> 设置用户代理发送给服务器 也就是模拟什么浏览器例如IE
-basic 使用HTTP基本认证
--tcp-nodelay 使用TCP_NODELAY选项
-e/--referer <URL> 来源网址
--cacert <file> CA证书 (SSL)
--compressed 要求返回是压缩的格式
-H/--header <line>自定义头信息传递给服务器
-I/--head 只显示响应报文首部信息
--limit-rate <rate> 设置传输速度
-u/--user <user[:password]>设置服务器的用户和密码
-0/--http1.0 使用HTTP 1.0
20、使用mod_deflate模块压缩页面优化传输速度 ,使用mod_deflate可以压缩页面 ,先要保证mod_deflate启用着 httpd -D DUMP_MODULES查看
经过压缩后的大小为64 ,比未压缩大大减小了宽带占用量,使用压缩方式是:Content-Enconding:gzip方式压缩
压缩配置如下,将配置数据放到/etc/httpd/conf/httpd.conf中。
SetOutputFilter DEFLATE 指定输出指令设定过滤器使用DEFLATE # mod_deflate configuration # Restrict compression to these MIME types 下边全是DEFLATE过滤器 AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/css # Level of compression (Highest 9 - Lowest 1) 压缩比,9最大,但是最消耗CUP DeflateCompressionLevel 9 # Netscape 4.x has some problems. 下边是指定浏览器用那种压缩方式 BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
-----------------------------------------END-----------------------------------------
本文出自 “aolens・程超” 博客,请务必保留此出处http://aolens.blog.51cto.com/7021142/1538281