linux之httpd与https详细介绍

时间:2022-07-28 15:04:31

在网络遍布的今天,面对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

linux之httpd与https详细介绍

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:删除指定用户

我们已经创建过了.htpasswd文件,所以就不用-c    
linux之httpd与https详细介绍

看一下我们创建出来的。

linux之httpd与https详细介绍

service httpd reload加载文件。

访问需要输入账号密码了。

linux之httpd与https详细介绍

linux之httpd与https详细介绍    
(3) 组认证 

<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

linux之httpd与https详细介绍

linux之httpd与https详细介绍

访问就会发现你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端口

linux之httpd与https详细介绍    
启用:NameVirtualHost 172.16.249.138:80

要保证/web/{hosta,hostb}目录存在。

配置见图

linux之httpd与https详细介绍

httpd -t检测有无错误

service httpd reload加载

linux之httpd与https详细介绍

80端口默认隐藏

linux之httpd与https详细介绍

2)先基于IP来实现

ifconfig eth0:0 172.16.249.139/16  添加一个地址

linux之httpd与https详细介绍

配置/etc/httpd/conf/httpd.conf

只修改IP地址

linux之httpd与https详细介绍

service httpd reload加载

地址是172.16.249.138

linux之httpd与https详细介绍

地址是172.16.249.139

linux之httpd与https详细介绍

3)基于主机名来实现

配置/etc/httpd/conf/httpd.conf

修改IP为一样的,主机名不同。

linux之httpd与https详细介绍

此时我们还不能就这样访问,因为没有DNS能正确解析出我们自定义的,所以我们可以在本地自建服务器,当然这太麻烦了,为了配合测试,我们修改/etc/hosts文件,自定义本地解析名称。    
linux之httpd与https详细介绍

elinks 文本浏览器,我们用elinks 来测试    
-dump: 获取到页面数据后直接退出进程;

elinks -dump http://www.aolens.com

linux之httpd与https详细介绍

而我们在windows里的浏览器访问的话就只会显示一个,那是应为我们windows的hosts没有配置DNS本地解析啊

linux之httpd与https详细介绍

配置此hosts

linux之httpd与https详细介绍

linux之httpd与https详细介绍

linux之httpd与https详细介绍

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.


linux之httpd与https详细介绍

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 安装吧

linux之httpd与https详细介绍

我们看一下他都生成了那些配置文件。

linux之httpd与https详细介绍

我们来看一下/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

linux之httpd与https详细介绍

首先我们将DocumentRoot 路径和虚拟主机的路径对应起来,

修改/etc/httpd/conf.d/ssl.conf(ssl配置文件)  为DocumentRoot  /web/hosta

ServerName为www.aolens.com

而<VirtualHost _default_:443>中的default指默认的虚拟主机,我们只为一台虚拟主机做ssl配置,所以就不改了。

linux之httpd与https详细介绍

还要修改说明证书所在位置和私钥所在位置

linux之httpd与https详细介绍

httpd -t检测语法。

没有问题就需要重启一下,因为监听了新的端口

service httpd restart

ss -tnl检测443端口是否在检测

linux之httpd与https详细介绍

先确保本地可以解析你的地址

linux之httpd与https详细介绍

这下我们试试https能不能访问。提示证书安全不收信任。

linux之httpd与https详细介绍

那是因为我们现在还没有信任这个CA

所以我们应该给windows上安装这个CA,把私有CA的cacert.pem放到桌面改名为cacert.crt

双击就可以安装了。

linux之httpd与https详细介绍

linux之httpd与https详细介绍

访问就发现为https加密成功了。

linux之httpd与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

配置允许访问的网段。

linux之httpd与https详细介绍

访问www.aolens.com/server-status

linux之httpd与https详细介绍

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查看

我们可以看到,没有经过压缩的文本文件传输大小为745    
linux之httpd与https详细介绍

经过压缩后的大小为64 ,比未压缩大大减小了宽带占用量,使用压缩方式是:Content-Enconding:gzip方式压缩

linux之httpd与https详细介绍


压缩配置如下,将配置数据放到/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