必赢手机app下载 / Blog / 必赢手机app下载 / 常用配置
必赢手机app下载 28

常用配置

hpptd

前言

这篇主要介绍HTTP服务程序环境

可能有一些介绍不到,博主能力有限,欢迎大神来纠正改进

HTTP协议从http/0.9到如今的http/2.0中间发生了很大的改变,现在主流的事http/1.1

必赢手机app下载 1

在很多面试当主就会问起http协议各个版本的不同之处,这里就不介绍它们之间的区别了,有想要了解的可以百度下,面试的时候看下

HTTP工作机制:
http请求:http request
http响应:http response
一次http事务:请求<–>响应

在上篇中基本简单说了下

http服务器程序:
       httpd apache
       nginx
       lighttpd

http服务器应用

http服务器程序
httpd
apache
nginx
lighttpd

应用程序服务器
IIS .asp
tomcat .jsp
jetty 开源的servlet容器,基于Java的web容器
Resin CAUCHO公司,支持servlets和jsp的引擎
webshpere(IBM), weblogic(BEA), jboss,oc4j(Oracle)

市场占有率统计 www.netcraft.com

httpd
20世纪90年代初,国家超级计算机应用中心NCSA开发
1995年开源社区发布apache(a patchy server)
ASF: apache software foundation
FSF:Free Software Foundation
特性:
高度模块化:core + modules
DSO: Dynamic Shared Object 动态加/卸载
MPM:multi-processing module多路处理模块(支持多种I/O模型)

Httpd介绍

MPM工作模式

prefork:多进程I/O模型,每个进程响应一个请求,默认模型
一个主进程:生成和回收n个子进程,创建套接字,不响应请求
多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024(系统中默认并发进程数)个

worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型
一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

event:事件驱动模型(worker模型的变种)
一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力
httpd-2.2: event 测试版, centos6默认
httpd-2.4:event 稳定版,centos7默认

httpd:

20世纪90年代初,国家超级计算机应用中心NCSA开发

httpd功能特性

虚拟主机:一个物理服务器搭建多个网站
IP、Port、FQDN
CGI:Common Gateway Interface,通用网关接口
(网关:连接不同网段、不同协议之间的通信)
反向代理
负载均衡
路径别名
丰富的用户认证机制
basic
digest
支持第三方模块

特性:

高度模块化:core + modules

DSO: Dynamic Shared Object 动态加/卸载

MPM:multi-processing module多路处理模块

httpd安装

版本:
CentOS 6: 2.2
CentOS 7: 2.4
安装方式:
rpm:centos发行版,稳定,建议使用
编译:定制或特殊需求
CentOS 6
程序环境:httpd-2.2

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

检查配置语法:
httpd –t
service httpd configtest

服务脚本:
/etc/rc.d/init.d/httpd

脚本配置文件:
/etc/sysconfig/httpd

服务控制和启动:
chkconfig httpd on|off service
{start|stop|restart|status|configtest|reload} httpd

站点网页文档根目录: /var/www/html

模块文件路径:
/etc/httpd/modules
/usr/lib64/httpd/modules

主程序文件:
/usr/sbin/httpd
/usr/sbin/httpd.worker
/usr/sbin/httpd.event

主进程文件:
/etc/httpd/run/httpd.pid

[root@CentOS6 run]#cat httpd.pid 
2367
#服务启动时自动创建,存放服务的主进程编号
#当服务停止文件自动删除

日志文件目录:
/var/log/httpd access_log: 访问日志
error_log:错误日志

帮助文档包: httpd-manual(yum下载httpd的官方文档)
下载完成以后,重新加载服务配置文件,通过浏览器访问本机的IP/manual目录。
配置文件目录树:

[root@CentOS6 ~]#tree /etc/httpd
/etc/httpd
├── conf
│   ├── httpd.conf
│   └── magic
├── conf.d
│   ├── mod_dnssd.conf
│   ├── README
│   └── welcome.conf
├── logs -> ../../var/log/httpd
├── modules -> ../../usr/lib64/httpd/modules
└── run -> ../../var/run/httpd

MPM工作模式

Httpd 2.2常见配置

修改配置文件之前,先备份

prefork:

1、多进程I/O模型,每个进程响应一个请求,默认模型

2、个主进程:生成和回收n个子进程,创建套接字,不响应请求

3、多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个

如图:

必赢手机app下载 2

httpd配置文件的组成:

[root@CentOS6 ~]$ grep "Section" /etc/httpd/conf/httpd.conf              #主配置文件
Section 1: Global Environment           #全局环境设置
Section 2: 'Main' server configuration  #主服务器配置
Section 3: Virtual Hosts                #虚拟主机

worker:

1、复用的多进程I/O模型,多进程多线程,IIS使用此模型

2、一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

如图:

必赢手机app下载 3

配置格式

directive value
directive: 不区分字符大小写
value: 为路径时,是否区分大小写,取决于文件系统

event:

1、事件驱动模型(worker模型的变种)

2、一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求:m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力

如图:

必赢手机app下载 4

备注:MPM模式也是面试中常问的问题

1、显示服务器版本信息

关键字:ServerTokens
ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full
ServerTokens Prod[uctOnly] :Server: Apache
ServerTokens Major: Server: Apache/2
ServerTokens Minor: Server: Apache/2.0
ServerTokens Min[imal]: Server: Apache/2.0.41
ServerTokens OS: Server: Apache/2.0.41 (Unix)
ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix)
PHP/4.2.2 MyMod/1.2

This setting applies to the entire server and cannot be enabled or
disabled on a virtualhost-by-virtualhost basis. After version 2.0.44,
this directive also controls the information presented by the
ServerSignature directive.
建议使用:ServerTokens Prod(安全考虑不显示太详细的版本信息)

[root@CentOS6 ~]#curl -I 172.18.45.6
HTTP/1.1 200 OK
Date: Fri, 29 Sep 2017 01:42:20 GMT
Server: Apache/2.2.15 (CentOS)  #修改之前
Server: Apache      #修改结果
Last-Modified: Sat, 05 Aug 2017 11:36:50 GMT
ETag: "1a015f-3a-55600078b343c"
Accept-Ranges: bytes
Content-Length: 58
Connection: close
Content-Type: text/html; charset=UTF-8

HTTP安装

2、修改监听IP,Port端口

Listen [IP:]PORT

(1) 省略IP表示为0.0.0.0;

(2) Listen指令至少一个,可重复出现多次 Listen 80 Listen 8080

(3) 修改监听socket,重启服务进程方可生效

版本

CentOS 6:默认2.2版本(官方以停止支持)

CentOS 7:默认2.4版本

3、持久连接

关键字:KeepAlive
Persistent
Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接
。一个TCP三次握手建立连接以后,每个资源获取完成以后不会立即断开连接,超过定义的超时时间或者超过传输的资源个数,才会断开连接状态。

断开条件:
数量限制:100
时间限制:以秒为单位, httpd-2.4 支持毫秒级
副作用:对并发访问量较大的服务器,持久连接功能会使用有
些请求得不到响应
折衷:使用较短的持久连接时间

设置: KeepAlive On|Off
KeepAliveTimeout 15 #设置超时时间
MaxKeepAliveRequests 100 #设置一次连接请求资源数量

测试:
telnet WEB_SERVER_IP PORT
GET /URL HTTP/1.1
Host: WEB_SERVER_IP

安装方式

rpm:centos发行版,稳定,建议使用
编译:定制或特殊需求

备注:后面会介绍编译安装—-

4、MPM( Multi-Processing Module)多路处理模块

prefork, worker, event(试验阶段)
httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现
对不同MPM机制的支持
确认方法:
ps aux | grep httpd
默认为/usr/sbin/httpd, 即prefork模式

查看模块列表
查看静态编译的模块 httpd -l

[root@CentOS6 ~]#httpd -l |grep 'prefork'
  prefork.c     #表示正在使用的模块prefork.c

查看静态编译及动态装载的模块 httpd –M
动态模块加载:不需重启即生效
动态模块路径 /usr/lib64/httpd/modules/

更换使用的httpd程序
/etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker #默认该行被注释
重启服务生效
pstree -p|grep httpd 查看进程和线程

Httpd 2.4 与之不同 以动态模块方式提供
配置文件:/etc/httpd/conf.modules.d/00-mpm.conf
httpd –M |grep mpm
重启服务生效
pstree -p|grep httpd 查看进程和线程

prefork的默认配置: 在主配置文件中
关键字:MPM

worker的默认配置:

HTTP-CentOS 7程序环境

5、DSO: Dynamic Shared Object

关键字:LoadModule
加载动态模块配置
/etc/httpd/conf/httpd.conf
配置指定实现模块加载格式:
LoadModule <mod_name> <mod_path>
模块文件路径可使用相对路径:
相对于ServerRoot(默认/etc/httpd)
模块文件路径:/etc/http/modules
添加模块可以在主配置文件中直接添加,也可以按照相应的格式在/etc/httpd/conf.d/目录下单独配置,便于管理

新版本2.4特性

MPM支持运行为DSO机制;以模块形式按需加载

event MPM生产环境可用

异步读写机制

支持每模块及每目录的单独日志级别定义

每请求相关的专用配置

增强版的表达式分析式

毫秒级持久连接时长定义

基于FQDN的虚拟主机不需要NameVirutalHost指令

新指令,AllowOverrideList

支持用户自定义变量

更低的内存消耗

6、定义’Main’ server的文档页面路径

关键字:DocumentRoot “/path”
文档路径映射:
DocumentRoot指向的路径为URL路径的起始位置
示例: DocumentRoot “/app/data”

–> /app/data/test/index.html
注意:SELinux和iptables的状态
/etc/httpd/conf.d/welcome.conf
文件定义了当用户访问页面不存在,也就是出现403错误时默认跳转的页面。

配置文件:

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/*.conf

7、定义站点主页面

关键字:DirectoryIndex
DirectoryIndex index.html index.html.var

检查配置语法:

httpd –t
service httpd configtest

8、站点访问控制常见机制

可基于两种机制指明对哪些资源进行何种访问控制
访问控制机制有两种:客户端来源地址,用户账号
文件路径:

<Directory  “/path">    #对于本地目录的访问控制
...         
</Directory> 
<File  “/path/file”>    #对于本地文件的访问控制
... 
</File> 
<FileMatch "PATTERN">   #对于匹配文件的访问控制
... 
</FileMatch>

RUL路径:

<Location  "">                  #对于URL的访问控制
... 
</Location> 
<LocationMatch "">              #对于匹配的URL的访问控制
... 
</LocationMatch>

示例:

<FilesMatch ".(gif|jpe?g|png)$"> 
<Files “?at.*”>  通配符 
<Location /status> 
<LocationMatch "/(extra|special)/data">

通配符匹配比较消耗服务器的性能,客户端每次请求资源都会对资源进行比较,降低了服务器的性能,定义的规则越复杂服务器的维护也不会越难

模块相关的配置文件:

/etc/httpd/conf.modules.d/*.conf

9、

(1) Options:后跟1个或多个以空白字符分隔的选项列表
在选项前的+,- 表示增加或删除指定选项
常见选项:
Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户
(当用户访问的URL不存在index文件时是否显示一个目录页面)
FollowSymLinks:允许访问符号链接文件所指向的源文件
None:全部禁用
All: 全部允许
示例:

[root@CentOS6 ~]#vim /etc/httpd/conf.d/test.conf
<Directory /var/www/html/test>  #受控目录
Options -Indexes        #不允许返回目录索引
Options -FollowSymLinks #不允许访问软链接文件
</Directory>

(2) AllowOverride
与访问控制相关的哪些指令可以放在指定目录下的
.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令
.htaccess:在指定目录中创建该文件,只控制该目录的访问
只对

(3) order和allow、deny
放在directory, .htaccess中
order:定义生效次序;写在后面的表示默认法则
Order allow,deny
Order deny,allow
Allow from, Deny from
IP (四种写法)
网络:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
示例:

<files "*.txt">             #控制所有*.txt文件
order deny,allow 
deny from 172.16.100.100    #拒绝该IP访问所有以.txt结尾的文件
allow from 172.16
</files>
allow,DENY DENY,ALLOW
ONLY ALLOW ALLWO ALLOW
ONLY DENY DENY DENY
BOTH DENY ALLOW
NONE DENY ALLOW

systemd unit file:

/usr/lib/systemd/system/httpd.service

10、日志设定

日志类型:
​ 访问日志
​ 错误日志

错误日志:
​ ErrorLog logs/error_log
​ LogLevel warn loglevel 可选值:
​ debug, info, notice, warn,error crit, alert, emer

访问日志:
定义日志格式:LogFormat format strings
LogFormat “%h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i””
combined

使用日志格式:
CustomLog logs/access_log combined
参考帮助:
.html#formats

%h 客户端IP地址
%l 远程用户,启用mod_ident才有效,通常为减号“-”
%u 验证(basic,digest)远程用户,非登录访问时,为 一个减号“-”
%t 服务器收到请求时的时间
%r First line of
request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本
%>s 响应状态码
%b 响应报文的大小,单位是字节;不包括响应报文http首部
%{Referer}i
请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的
%{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的应用程序

主程序文件:

/usr/sbin/httpd
httpd-2.4支持MPM的动态切换

11、设定默认字符集

关键字:AddDefaultCharset UTF-8
中文字符集:GBK, GB2312, GB18030

日志文件:

/var/log/httpd
access_log:访问日志
error_log:错误日志

12、定义路径别名

格式: Alias /URL/ “/PATH/”
DocumentRoot “/www/htdocs”
==>/www/htdocs/download/bash.rpm
Alias /download/ “/rpms/pub/”
==>/rpms/pub/bash.rpm

==>/www/htdocslogo.png

站点文档:

/var/www/html

13、基于用户的访问控制

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

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

认证方式两种:
basic:明文
digest:消息摘要认证,兼容性差

安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因

用户的账号和密码
虚拟账号:仅用于访问某服务时用到的认证标识
存储:文本文件,SQL数据库,ldap目录存储,nis等

basic认证配置示例:

(1) 定义安全域

<Directory “/path"> 
    Options None 
    AllowOverride None 
    AuthType Basic          #验证类型
    AuthName "String“       #提示符
    AuthUserFile  "/PATH/HTTPD_USER_PASSWD_FILE" 
    Require  user  username1  username2 ... 
</Directory> 

允许账号文件中的所有用户登录访问:
Require valid-user

(2) 提供账号和密码存储(文本文件)
使用专用命令完成此类文件的创建及用户管理
htpasswd [options] /PATH/HTTPD_PASSWD_FILE username
-c:自动创建文件,仅应该在文件不存在时使用
-m:md5格式加密,默认方式
-s: sha格式加密
-D:删除指定用户

[root@CentOS6 ~]#vim /etc/httpd/conf.d/test.conf
<Directory /var/www/html/test>
authtype basic
authname "hehe"
authuserfile "/etc/httpd/conf.d/.httpusers"
require user hehe 
</Directory>

基于组账号进行认证

(1) 定义安全域

<Directory “/path"> 
    AuthType Basic 
    AuthName "String“ 
    AuthUserFile "/PATH/HTTPD_USER_PASSWD_FILE" 
    AuthGroupFile "/PATH/HTTPD_GROUP_FILE" 
    Require  group  grpname1  grpname2 ... 
</Directory> 

(2) 创建用户账号和组账号文件;
组文件:每一行定义一个组
GRP_NAME: username1 username2 …
这里无论是用户还是组都是对于httpd服务来说的,与的用户与组linux无关

远程客户端和用户验证的控制
Satisfy ALL|Any
ALL 客户机IP和用户验证都需要通过才可以
Any客户机IP和用户验证,有一个满足即可

模块文件路径:

/usr/lib64/httpd/modules

14、虚拟主机

站点标识: socket
IP相同,但端口不同
IP不同,但端口均为默认端口
FQDN不同;
请求报文中首部
Host: www.huxiaoqi.com

有三种实现方案:
基于ip:为每个虚拟主机准备至少一个ip地址
基于port:为每个虚拟主机使用至少一个独立的port
基于FQDN:为每个虚拟主机使用至少一个FQDN
注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,
一般先禁用main主机
禁用方法:注释中心主机的DocumentRoot指令即可

虚拟主机配置方法:

<VirtualHost IP:PORT>
    ServerName FQDN 
    DocumentRoot “/path" 
</VirtualHost> 

建议:上述配置存放在独立的配置文件中
其它可用指令:
ServerAlias:虚拟主机的别名;可多次使用
ErrorLog: 错误日志
CustomLog:访问日志
<Directory “/path”>

Alias
基于IP的虚拟主机示例:

<VirtualHost 172.16.100.6:80> 
    ServerName www.a.com 
    DocumentRoot "/www/a.com/htdocs" 
</VirtualHost> 

<VirtualHost 172.16.100.7:80> 
    ServerName www.b.net 
    DocumentRoot "/www/b.net/htdocs" 
</VirtualHost> 

<VirtualHost 172.16.100.8:80> 
    ServerName www.c.org 
    DocumentRoot "/www/c.org/htdocs" 
</VirtualHost>

基于端口的虚拟主机:
可和基于IP的虚拟主机混和使用

listen 808 
listen 8080 
<VirtualHost 172.16.100.6:80> 
    ServerName www.a.com 
    DocumentRoot "/www/a.com/htdocs" 
</VirtualHost> 

<VirtualHost 172.16.100.6:808> 
    ServerName www.b.net 
    DocumentRoot "/www/b.net/htdocs" 
</VirtualHost> 

<VirtualHost 172.16.100.6:8080> 
    ServerName www.c.org 
    DocumentRoot "/www/c.org/htdocs" 
</VirtualHost>

基于FQDN的虚拟主机示例:

[root@CentOS6 ~]#vim /etc/httpd/conf.d/test.conf 
  1 NameVirtualHost *:80
  2 <VirtualHost *:80> 
  3         servername www.huxiaoqi.com
  4         DocumentRoot "/app/www.huxiaoqi.com/"
  5 </VirtualHost>
  6 
  7 <VirtualHost *:80> 
  8         servername mile.huxiaoqi.com
  9         DocumentRoot "/app/mile.huxiaoqi.com/"
 10 </VirtualHost>
 11 
 12 <VirtualHost *:80> 
 13         servername zhengzhou.huxiaoqi.com
 14         DocumentRoot "/app/zhengzhou.huxiaoqi.com/"
 15 </VirtualHost>

服务控制:

systemctl enable|disable httpd.service
systemctl {start|stop|restart|status} httpd.service

15、status页面

模块:LoadModule status_module modules/mod_status.so

<Location /server-status> 
SetHandler server-status 
Order allow,deny 
Allow from 172.16 
</Location> 
#定义的URL:/server-status不是固定不变的,可以更改

主配置文件中添加:ExtendedStatus On
在server-status中显示服务器详细信息

查看模块列表

http协议

http协议:stateless 无状态
服务器无法持续追踪访问者来源
解决http协议无状态方法
cookie :
重cookie:服务器将用户的所有的用户信息以文本文件的形式记录下来封装生成cookie信息和一个唯一编号保留下来,然后将cookie通过http协议发送给客户端,客户端将收到了cookie保存在磁盘当中。客户端每次访问服务器都会在请求报文中携带自己的cookie上传给服务器,服务器通过cookie信息来确认用户的信息并且每次访问都会更新,添加cookie信息。这种方法有两个缺点,一个是每次用户访问网站都会上传自己的cookie信息,占用了大量的网络带宽增加了服务器负担。此外由于cookie信息保留在客户端的原因,也就以为这同一个用户如果换一台电脑去访问同样的网站,该用户的用户信息还是无法被服务器识别。所以目前,重cookie这种方式比较落后很少应用。
轻cookie:轻cookie相比重cookie的区别在于,轻量级的cookie不再存放用户的所有用户信息,而是给每个用户生成一个ID,根据用户每次访问携带的ID来进行身份确认,同时配合session将用户的用户信息与ID匹配并存放在服务器的磁盘和内存中,以此来弥补重cookie的缺陷。
session 服务端存放
http事务:一次访问的过程
请求:request
响应:response

查看静态编译的模块

httpd -l

请求报文

必赢手机app下载 5

查看静态编译及动态装载的模块

httpd –M

HTTP响应报文

必赢手机app下载 6

动态模块加载:不需重启即生效

动态模块路径
/usr/lib64/httpd/modules

必赢手机app下载 7

报文语法格式

request报文

response报文

method: 请求方法,标明客户端希望服务器对资源执行的动作
GET、HEAD、POST等
​ GET:从服务器获取一个资源
​ HEAD:只从服务器获取文档的响应首部
​ POST:向服务器输入数据,通常会再由网关程序继续处理
​ PUT:将请求的主体部分存储在服务器中,如上传文件
​ DELETE:请求删除服务器上指定的文档
​ TRACE:追踪请求到达服务器中间经过的代理服务器
​ OPTIONS:请求服务器返回对指定资源支持使用的请求方法

协议查看或分析的工具: tcpdump, wireshark,tshark

version: 服务器版本
HTTP/

status: 状态码,三位数字,如200,301, 302, 404, 502;
标记请求处理过程中发生的情况
status(状态码): 面试考点
​ 1xx:100-101 信息提示
​ 2xx:200-206 成功
​ 3xx:300-305 重定向
​ 4xx:400-415 错误类信息,客户端错误
​ 5xx:500-505 错误类信息,服务器端错误
​ 200: 成功,请求数据通过响应报文的entity-body部分发送;OK
​ 301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部
Location指明了资源现在所处的新位置;Moved Permanently永久跳转
​ 302: 响应报文Location指明资源临时新位置 Moved Temporarily
​ 304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变
,则通过响应此响应状态码通知客户端;Not Modified
​ 401: 需要输入账号和密码认证方能访问资源;Unauthorized
​ 403: 请求被禁止;Forbidden
​ 404: 服务器无法找到客户端请求的资源;Not Found
​ 500: 服务器内部错误;Internal Server Error
​ 502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad
Gateway
​ 503 – 服务不可用,临时服务器维护或过载,服务器无法处理请求
​ 504 – 网关超时

reason-phrase: 状态码所标记的状态的简要描述

headers:
每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟一个可选空格,接着是一个值

entity-body:请求时附加的数据或响应时附加的数据

Httpd 2.4常见配置

备注:在这我用两台主机进行实验,分别是:192.168.43.57、192.168.43.67,57当http服务器,67当客户端,首先yum安装HTTP服务器

http协议首部

1、版本号修改

备注:要是别人查询到你的网站事用http那个版本,是不是不好,容易利用版本漏洞进行攻击,所以让他不显示版本号

1、首先得有个主页,在这我就随便创建个index.httml

echo /var/www/html/index.html > /var/www/html/index.html

2、我们先来看一下没有进行版本设置时候得情况,在67主机上

curl -I 192.168.43.57

必赢手机app下载 8

版本信息一目了然

3、在服务器端(57)隐藏版本信息设置

cd /etc/httpd/conf.d/
vim texe.conf

备注:写在主配置文件里也可,推荐写在以上目录下,方便来管理,主配置文件中标记了/conf.d/目录,写在/conf.d/目录下得配置优先生效

ServerTokens Prod
# 写入

systemctl restart httpd

systemctl reload httpd

#重启服务最好用reload

4、再次测试验证

必赢手机app下载 9

OK

首部的分类:

通用首部
请求首部
响应首部
实体首部
扩展首部

2、修改监听的IP和Port

1) 省略IP表示为本机所有IP

2) Listen指令至少一个,可重复出现多次

示例:

Listen 192.168.1.100:8080

Lsten 80

通用首部:

Date: 报文的创建时间
Connection:连接状态,如keep-alive, close
Via:显示报文经过的中间节点(代理,网关)
Cache-Control:控制缓存,如缓存时长
MIME-Version:发送端使用的MIME版本

3、持久连接

必赢手机app下载,Persistent
Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接
断开条件:数量限制:100

       时间限制:以秒为单位, httpd-2.4 支持毫秒级

副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应

折衷:使用较短的持久连接时间

请求首部:

Accept:通知服务器自己可接受的媒体类型
Accept-Charset: 客户端可接受的字符集
Accept-Encoding:客户端可接受编码格式,如gzip
Accept-Language:客户端可接受的语言

Client-IP: 请求的客户端IP
Host: 请求的服务器名称和端口号
Referer:跳转至当前URI的前一个
URL User-Agent:客户端代理,浏览器版本

设置:

KeepAlive On|Off
KeepAliveTimeout 15
MaxKeepAliveRequests 100

条件式请求首部

Expect:允许客户端列出某请求所要求的服务器行为
If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改
If-Unmodified-Since:与上面相反
If-None-Match:本地缓存中存储的文档的ETag标签是否与
服务器文档的Etag不匹配
If-Match:与上面相反

测试:

telnet 192.168.43.57 80

必赢手机app下载 10

安全请求首部:

Authorization:向服务器发送认证信息,如账号和密码
Cookie: 客户端向服务器发送cookie
Cookie2:用于说明请求端支持的cookie版本

4、切换使用的MPM-开启100个线程

1、编辑

vim /etc/httpd/conf.modules.d/00-mpm.conf

必赢手机app下载 11

2、重读配置文件或重启服务

systemctl reload httpd
systemctl restart httpd

3、查看确认

httpd –M |grep mpm
重启服务生效
pstree -p|grep httpd 查看进程和线程

备注:

1)设置进程为100个,在我们

必赢手机app下载 12

StartServers   100

2)重启服务并查看

systemctl reload httpd
ps aux

代理请求首部:

Proxy-Authorization: 向代理服务器认证

5、定义HTTP主目录

响应首部:

信息性: Age:从最初创建开始,响应持续时长
Server:服务器程序软件名称和版本
协商首部:某资源有多种表示方法时使用
Accept-Ranges:服务器可接受的请求范围类型
Vary:服务器查看的其它首部列表
安全响应首部: Set-Cookie:向客户端设置cookie Set-Cookie2: 以上面相似
WWW-Authenticate:来自服务器对客户端的质询列表

1、默认得主目录在

/var/www/html/

实体首部:

Allow: 列出对此资源实体可使用的请求方法
Location:告诉客户端真正的实体位于何处
Content-Encoding:对主体执行的编码
Content-Language:理解主体时最适合的语言
Content-Length: 主体的长度
Content-Location: 实体真正所处位置
Content-Type:主体的对象类型,如text 缓存相关:
ETag:实体的扩展标签
Expires:实体的过期时间
Last-Modified:最后一次修改的时间

2、更改主目录

1)首先创建目录

mkdir /data/website -pv

2)创建index.html首页

echo /data/website/index.html > /data/website/index.html

3)设置配置文件

vim /etc/httpd/conf.d/texe.conf

必赢手机app下载 13

DocumentRoot "/data/website"
<Directory "/data/website">
Require all granted
</Directory>

4)重启服务

5)测试

必赢手机app下载 14

注意:SELinux和iptables的状态

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 [options] [URL…]

选项:
-A/–user-agent

6、定义站点主页面

默认是找index.html文件最为主页得,也可更改把以下代码加入texe.conf配置文件就可

DirectoryIndex index.php 
# 值可以是多个。找步到第一个找第二个

elinks工具:

语法:
elinks [OPTION]… [URL]…
选项:
-dump: 非交互式模式,将URL的内容输出至标准输出
-source:打印源码

7、基于IP的访问控制:

1、conf结尾的文件只能特定IP才能访问(如只允许192.168.43.67)

<FilesMatch ".+.(conf|ini)$">
<RequireAny>                                                                                                                  
Require all denied ##拒绝所有
require ip 192.168.43.67 ##只允许
</RequireAny>
</FilesMatch>

2、重启服务

备注:

加上这项

options indexes

说明要是这个网站主页面访问不了就显示目录下所有文件列表

也可限定目录只对特定用户访问

<location /admin> ##URL路径
<RequireAny>
Require all denied
require ip 192.168.31.6
</RequireAny>
</location>

mod_deflate(压缩)模块

使用mod_deflate模块压缩页面优化传输速度
适用场景:

(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持

(2) 压缩适于压缩的资源,例如文本文件

配置文件写法:
LoadModule deflate_module modules/mod_deflate.so #加载模块
SetOutputFilter DEFLATE #启动压缩功能
# Restrict compression to these MIME types #支持压缩的文件格式
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)
DeflateCompressionLevel 9

排除特定旧版本的浏览器,不支持压缩
Netscape 4.x 只压缩text/html
BrowserMatch ^Mozilla/4 gzip-only-text/html
Netscape 4.06-08三个版本 不压缩
BrowserMatch ^Mozilla/4.0[678] no-gzip
Internet Explorer标识本身为“Mozilla /
4”,但实际上是能够处理请求的压缩。如果用户代理首部匹配字符串
“MSIE”(“B”为单词边界”),就关闭之前定义的限制
BrowserMatch bMSI[E] !no-gzip !gzip-onlytext/html

8、自定义日志格式

https

https:http over ssl

日志类型:

访问日志
错误日志

SSL会话的简化过程

(1) 客户端发送可供选择的加密方式,并向服务器请求证书

(2) 服务器端发送证书以及选定的加密方式给客户端

(3) 客户端取得证书并进行证书验证 如果信任给其发证书的CA
​ (a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名
​ (b) 验证证书的内容的合法性:完整性验证
​ (c) 检查证书的有效期限
​ (d) 检查证书是否被吊销
​ (e) 证书中拥有者的名字,与访问的目标主机要一致

(4)
客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换

(5) 服务用此密钥加密用户请求的资源,响应给客户端
注意:SSL是基于IP地址实现,单IP的主机仅可以使用一个https虚拟主机

错误日志:

路径:ErrorLog logs/error_log(这是相对路径基于/etc/httpd/)

推荐设置为:LogLevel warn(级别,从警报级别开始记录)

LogLevel 可选值:

debug, info, notice, warn,error

crit, alert, emerg

备注:最往后严重性越高

https实现

(1) 为服务器申请数字证书
测试:通过私建CA发证书
​ (a) 创建私有CA
​ (b) 在服务器创建证书签署请求
​ (c) CA签证

(2) 配置httpd支持使用ssl,及使用的证书
yum -y install mod_ssl
配置文件:/etc/httpd/conf.d/ssl.conf
​ DocumentRoot #主站点目录,默认会从httpd主配置文件全局设定获取
​ ServerName
​ SSLCertificateFile
​ SSLCertificateKeyFile

(3) 测试基于https访问相应的主机 openssl s_client [-connect host:port]
[-cert filename] [CApath directory] [-CAfile filename]

实验:实现HTTPS,HSTS
一、实验部署:
使用三台虚拟机,一台提供DNS服务和CA,一台提供httpd服务,一台验证客户端
二、部署DNS服务:
在第一台服务器安装BIND实现DNS服务
编辑主配置文件,允许验证客户端机器访问查询

[root@CentOS6 ~]#vim /etc/named.conf
options {
        listen-on port 53 { localhost; };
        #设置本机所有IP都对53端口监听
        allow-query     { 172.18.45.7; };
        #允许验证客户端查询本机的DNS服务,只修改必要项即可
};

在区域配置文件中添加要解析的域

[root@CentOS6 ~]#vim /etc/named.rfc1912.zones 
zone "huxiaoqi.com" IN {
        type master;
        file "huxiaoqi.com.zone";
};

配置解析库文件:

[root@CentOS6 ~]#vim /var/named/huxiaoqi.com.zone
$TTL 86400      ; 1 day
@   IN   SOA    dns1.huxiaoqi.com. rname.invalid. (
                                1          ; serial
                                86400      ; refresh (1 day)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                10800      ; minimum (3 hours)
                                )
                        NS      dns1.huxiaoqi.com.
dns1                    A       172.18.45.6
www                     A       172.18.45.61
#添加A记录,将域名为www.huxiaoqi.com的IP地址解析为提供httpd服务的服务器IP地址:172.18.45.61

将验证客户端机器的DNS指向DNS服务器172.18.45.6

[root@CentOS7 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0 
#DNS1=172.18.0.1
DNS2=172.18.45.6
#注意:如果该机器之前已经设置了DNS服务器,那么需要注释掉之前配置的DNS服务器,否则系统默认使用第一个DNS服务器去解析FQDN,如果第一台DNS服务器不能解析该FQDN系统也不会去调用另外一台DNS服务器,除非第一台DNS服务器宕机系统才会主动去调用DNS2.

三、搭建CA颁发证书:
(一)创建所需要文件
touch /etc/pki/CA/index.txt 生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号

(二)CA自签证书

  1. 生成私钥
    cd /etc/pki/CA/
    (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

    [root@CentOS6 CA]#(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
    Generating RSA private key, 2048 bit long modulus
    ...........................+++
    e is 65537 (0x10001)
    # -out /etc/pki/CA/private/cakey.pem 必须按照配置文件指定目录以及文件名 
    
  2. 生成自签名证书
    openssl req -new -x509 –key
    /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem

    [root@CentOS6 CA]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 7300
      -key /etc/pki/CA/private/cakey.pem私钥位置
      -out /etc/pki/CA/cacert.pem自签名证书的位置以及文件名
      -req -new: 生成新证书签署请求 
      -x509: 专用于CA生成自签证书 
      -key: 生成请求时用到的私钥文件 
      -days n:证书的有效期限 
      -out /PATH/TO/SOMECERTFILE: 证书的保存路径
    

(三)颁发证书

  1. 在需要使用证书的主机生成证书请求给web服务器生成私钥
    (umask 066; openssl genrsa -out /etc/pki/tls/private/test.key 2048)

    [root@CentOS7 certs]#(umask 066;openssl genrsa -out /etc/pki/tls/private/app.key 2048)
    -out /etc/pki/CA/private/app.key #指定生成私钥位置、文件名
    
  2. 利用私钥生成证书申请文件
    openssl req -new -key /etc/pki/tls/private/test.key -days 365 -out
    etc/pki/tls/test.csr

    [root@CentOS7 tls]#openssl req -new -key /etc/pki/tls/private/app.key -days 365 -out /etc/pki/tls/app.csr
    -key /etc/pki/tls/private/app.key   #自己的私钥
    -out /etc/pki/tls/app.csr           #申请书的位置以及文件名
    
  3. 将证书请求文件传输给CA

  4. CA签署证书,并将证书颁发给请求者
    openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days
    365

    [root@CentOS6 CA]#openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt
    -out /etc/pki/CA/certs/app.crt 生成证书的文件名以及路径
    

    四、配置httpd支持使用ssl,及使用的证书
    安装httpd,然后准备一个测试的默认页面,开启服务:

    [root@Centos6 ~]#vim /var/www/html/index.html 
    hello,world
    hahahahahahaha
    

    使用浏览器访问效果如下:
    必赢手机app下载 15

配置ssl:
首先安装httpd的ssl模块:yum -y install mod_ssl
然后编辑ssl配置文件:/etc/httpd/conf.d/ssl.conf
这里需要准备三个文件,CA的自签名证书、httpd服务器的私钥以及httpd服务的证书,在ssl的配置文件中指明这三个文件的所在位置,为了方便管理建议将这三个文件存放在一起,比如直接在/etc/httpd/conf.d,目录下创建一个ssl目录存放这三个文件。

[root@Centos6 ssl]#tree
.
├── app.crt
├── app.key
└── cacert.pem

编辑/etc/httpd/conf.d/ssl.conf 文件:

[root@Centos6 ~]#vim /etc/httpd/conf.d/ssl.conf 
SSLCertificateFile /etc/httpd/conf.d/ssl/app.crt
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/app.key
SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem
#取消注释这三项并指明对应文件的对应位置

https在ssl.conf中默认定义监听443端口

[root@Centos6 ssl]#ss -tnl
State    Recv-Q Send-Q  Local Address:Port Peer Address:Port 
LISTEN   0      128              :::80            :::*     
LISTEN   0      128              :::443           :::*     
#端口开启说明配置没有错误

重启httpd服务
再次使用浏览器访问加密模式的httpd服务效果如下:
必赢手机app下载 16

五、在浏览器中导入证书信任
证书导入受信以后的浏览效果:
必赢手机app下载 17

至此就可以说httpd服务实现了https,但是访问时需要用户手动输入https属性,不能自动跳转。
六、实现HSTS:
在/etc/httpd/conf.d/目录下创建独立的hsts配置文件并编辑:

[root@Centos6 ~]#vim /etc/httpd/conf.d/hsts.conf
Header always set Strict-Transport-Security "maxage=15768000"
RewriteEngine on 
RewriteRule ^(/.*)$  https://%{HTTP_HOST}$1 [redirect=301]

编辑完成以后,重读配置文件,在次访问直接输入网址就能实现https的自动跳转了

访问日志

1、定义日志格式:

LogFormat "%h %l %u %{%Y-%m-%d %H:%M:%S}t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" testlog

备注:根据环境需求来定义

2、使用日志格式:

CustomLog "logs/access_log" testlog

参考帮助:

man 3 strftime

http重定向https

将http请求转发至https的URL
重定向
Redirect [status] URL-path URL
status状态:
Permanent(永久跳转):Returns a permanent redirect status (301)
indicating that the resource has moved permanently
Temp(临时跳转):Returns a temporary redirect status (302). This is the
default
示例:
Redirect temp /
#将原有的网站根目录跳转到加密的访问页面
这种跳转的方式比较简单,但是性能还有优化空间。利用这种跳转方式,用户访问未加密页面的时,首先服务器会返回给客户端一个信息,告诉客户端要访问的页面已经跳转,并返回跳转的地址。然后客户端再向跳转的页面发送访问请求。这样用户每次访问都会重复以上步骤,影响效率。HSTS技术则可以有效优化此步骤。

9、设定默认字符集

AddDefaultCharset UTF-8
中文字符集:GBK, GB2312, GB18030

HSTS

HSTS:HTTP Strict Transport Security
服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程,但是该用户第一次访问该网站时还是需要通过之前的复杂步骤。

HSTS preload list :
是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、
Edge浏览器也会采用这个列表
实现HSTS示例:

vim /etc/httpd/conf/httpd.conf 
Header always set Strict-Transport-Security "maxage=15768000" 
RewriteEngine on 
RewriteRule ^(/.*)$  https://%{HTTP_HOST}$1 [redirect=301]

10、定义路径别名

意思是说:

当用户访问192.168.43.57/data目录时,出现的数据不在website/data目录下,其实是在/website/app/stud目录下

实现方式:

Alias /data  /app/stud

备注:别忘了授权文件夹

<Directory "/app/stud">
Require all granted
</Directory>

重启服务

httpd自带的工具程序

httpd自带的工具程序
htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具

apachectl:httpd自带的服务控制脚本,支持start和stop

apxs:httpd-devel包提供,扩展httpd使用第三方模块工具

rotatelogs:日志滚动工具
access.log –> access.log, access.1.log –> access.log,
acccess.1.log, access.2.log

suexec:访问某些有特殊权限配置的资源时,临时切换至指 定用户身份运行

11、实现身份验证

说明:只有经过验证的用户才能访问某个目录

httpd的压力测试工具

httpd的压力测试工具
ab, webbench, http_load, seige
Jmeter 开源
Loadrunner 商业,有相关认证
tcpcopy:网易,复制生产环境中的真实请求,并将之保存
ab [OPTIONS] URL 来自httpd-tools
-n:总请求数
-c:模拟的并行数
-k:以持久连接模式测试
ulimit –n # 调整能打开的文件数

认证方式两种:

basic:明文
digest:消息摘要认证,兼容性差

安全域:

需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因

用户的账号和密码

虚拟账号:仅用于访问某服务时用到的认证标识

存储:文本文件,SQL数据库,ldap目录存储,nis等

备注:用虚拟用户来访问特定的目录,虚拟账号可以放到文件里或数据库里

方法一

说明:我们针对admin目录来访问

1、修改配置文件:

vim /etc/httpd/conf.d/test.conf

<Directory /data/website/admin>
AuthType Basic ##验证方式
AuthName "Secure login" ##加的一段话,只要经过验证的用户才能访问
AuthUserFile "/etc/httpd/conf.d/.htpasswd" ##存放位置加‘.’是隐藏改目录,要是目录不存在,就创建出来
Require user bob  ##希望所访问的用户                                                                                                 
</Directory>

2、创建用户

htpasswd -c /etc/httpd/conf.d/.htpasswd alice
htpasswd   /etc/httpd/conf.d/.htpasswd bob
htpasswd   /etc/httpd/conf.d/.htpasswd jack

备注:第一次创建用户必须加“-c”之后就不需要加了

3、重启服务

方法二

1、在要设置权限的目录下创建一个文件存放验证信息

vim /data/website/admin/.htaccess

AuthType Basic
AuthName "Secure login"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require user bob 

2、编辑配置文件

vim /etc/httpd/conf.d/test.conf

<Directory /data/website/admin>
AllowOverride authconfig #允许覆盖                                                                                                  
</Directory>

3、重启服务

基于组验证

示例:
<Directory "/www/htdocs/admin">
 Options None
 AllowOverride None
 AuthType Basic
 AuthName "Administator private"
 AuthUserFile "/etc/httpd/conf.d/.htpasswd"
 AuthGroupFile "/etc/httpd/conf.d/.htgroup"
 Require group g1
</Directory>

创建用户

和上面创建方法一样

给用户分组

必赢手机app下载 18

备注:

在/etc/httpd/conf.d目录下创建

ctrl+D结束

备注:

远程客户端和用户验证的控制

Satisfy ALL|Any

ALL 客户机IP和用户验证都需要通过才可以

Any客户机IP和用户验证,有一个满足即可

12、ServerSignature On | Off | EMail

说明:

当客户请求的网页并不存在时,服务器将产生错误文档,缺省情况下由于打开了
ServerSignature选项,错误文档的最后一行将包含服务器的名字、Apache的版本等信息

如果不对外显示这些信息,就可以将这个参数设置为Off

设置为Email,将显示ServerAdmin 的Email提示

13、status页面

说明:

用来判断服务器的状态

依赖于这个模块

httpd -M |grep status_module

1、编辑配置文件

<Location /status>
SetHandler server-status
Order allow,deny
Allow from 172.18
</Location>

2、重启服务

3、测试

192.168.43.57/status

14、虚拟主机

说明:在一台物理机上实现多个网站

有三种实现方式:

基于ip:为每个虚拟主机准备至少一个ip地址

基于port:为每个虚拟主机使用至少一个独立的port

基于FQDN:为每个虚拟主机使用至少一个FQDN

备注:假如有三台虚拟主机分别是“www.a.com、www.b.com、www.c.com”
分别在web1、web2、web3文件夹中

准备

1)首先创建三个文件夹

mkdir /data/web{1,2,3}

2)创建三个主页

echo /data/web1 > /data/web1/index.html
echo /data/web2 > /data/web2/index.html
echo /data/web3 > /data/web3/index.html

基于端口实现

分别对应8001、8002、8003

1、编辑配置文件

vim /etc/httpd/conf.d/texe.conf



listen 8001  #端口
listen 8002  #
listen 8003  #
<virtualhost *:8001> #定义
documentroot /data/web1 #主站点
servername www.a.com 
<directory /data/web1> #定义授权
require all granted # 都授权
</directory>
</virtualhost>

<virtualhost *:8002>
documentroot /data/web2
servername www.b.com
<directory /data/web2>
require all granted
</directory>
</virtualhost>

<virtualhost *:8003>                                                                                                          
documentroot /data/web3
servername www.c.com
<directory /data/web3>
require all granted
</directory>
</virtualhost>

2、重启服务

3、测试

必赢手机app下载 19

基于IP地址实现

1、在物理机上增加三个IP地址

ip a a 192.168.43.101/24 dev ens33
ip a a 192.168.43.102/24 dev ens33
ip a a 192.168.43.103/24 dev ens33

2、修改配置文件

vim /etc/httpd/conf.d/texe.conf



<virtualhost 192.168.31.101:80>
documentroot /data/web1
servername www.a.com
<directory /data/web1>
require all granted
</directory>
</virtualhost>

<virtualhost 192.168.31.102:80>
documentroot /data/web2
servername www.b.com
<directory /data/web2>
require all granted
</directory>
</virtualhost>

<virtualhost 192.168.31.103:80>
documentroot /data/web3
servername www.c.com
<directory /data/web3>
require all granted
</directory>
</virtualhost>

3、重启服务并测试

必赢手机app下载 20

基于FQDN(主机头)实现

说明:想要主机名访问必须使用DNS解析或hosts文件解析

在这我们写到hosts文件中

vim /etc/hosts

必赢手机app下载 21

1、编辑配置文件

vim /etc/httpd/conf.d/texe.conf



<virtualhost *:80>
documentroot /data/web2
servername www.b.com
<directory /data/web2>
require all granted
</directory>
ErrorLog "logs/b_error_log" #错误日志分开
CustomLog "logs/b_access_log" combined #访问日志分开
</virtualhost>

<virtualhost *:80>
documentroot /data/web3
servername www.c.com
<directory /data/web3>
require all granted
</directory>
ErrorLog "logs/c_error_log"
CustomLog "logs/c_access_log" combined
</virtualhost>

<virtualhost *:80>
documentroot /data/web1
servername www.a.com 
ServerAlias  a.com *.a.com #别名也就是泛域名
<directory /data/web1>
require all granted
</directory>
ErrorLog "logs/a_error_log"
CustomLog "logs/a_access_log" combined
</virtualhost>

2、重启服务并测试

必赢手机app下载 22

备注:如果用IP地址访问,那么配置文件中谁靠前谁就是默认地址

15、实现https加密访问

说明:要是你的网站涉及到“¥”那么就必须加https加密访问

生产中是向CA机构花钱申请的,在这里我们自己搭建一个CA服务器,我们用67当CA服务器

1、CA服务器端(67)安装yum包

yum install mod_ssl

2、httpd服务器申请证书

cd /etc/pki/CA

1)生成私钥

(umask 077;openssl genrsa -out private/cakey.pem 2048)

2)自签名

openssl req -new -x509 -key private/cakey.pem -out cacert.pem

3)CA主机创建目录

touch index.txt
echo 01 > serial
#存放序列号

4)在57HTTP服务器主机创建目录来存放证书与私钥并生产自己的私钥

cd /etc/httpd/conf.d/
# 在这个目录下创建存放目录
mkdir ssl

[root@centos7_05 ssl]# (umask 077;openssl genrsa -out heepd.key 2048)

5)57HTTP主机生成请求

openssl req -new -key heepd.key -out httpd.csr

必赢手机app下载 23

6)CA服务器给HTTP颁发证书

备注:把57主机生成的申请文件scp传送给CA主机

scp httpd.csr 192.168.43.67:/etc/pki/CA/

CA给HTTP签名

openssl ca -in httpd.csr -out certs/httpd.csr
#颁发证书

7)把HTTP的证书和CA的证书传送到(57)HTTP服务器

scp certs/httpd.csr cacert.pem 192.168.43.57:/etc/httpd/conf.d/ssl/

8)修改ssl.cof配置文件

[root@centos7_05 conf.d]# vim ssl.conf

必赢手机app下载 24

9)重启服务测试

必赢手机app下载 25

必赢手机app下载 26

必赢手机app下载 27

16、http跳转到https

说明:当我们输入 “www.a.com”
自动跳转到””

1、修改配置文件

[root@centos7_05 conf.d]# vim texe.conf



RewriteEngine on  #启动这个引擎
rewritecond %{SERVER_PORT} !^443 #条件跳转--如果不是443的时候我就进行跳转
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301] #这是跳转规则

2、重启测试

必赢手机app下载 28

17、使用mod_deflate模块压缩页面优化传输速度

适用场景:

(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持

(2) 压缩适于压缩的资源,例如文本文件

1、编辑配置文件

vim /etc/httpd/conf.d/texe2.conf



AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
DeflateCompressionLevel 9
SetOutputFilter DEFLATE

2、重启测试

http协议常用的状态码

200: 成功,请求数据通过响应报文的entity-body部分发送;OK

301:
请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved
Permanently

302: 响应报文Location指明资源临时新位置 Moved Temporarily

304:
客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not
Modified

401: 需要输入账号和密码认证方能访问资源;Unauthorized

403: 请求被禁止;Forbidden

404: 服务器无法找到客户端请求的资源;Not Found

500: 服务器内部错误;Internal Server Error

502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad
Gateway

503 – 服务不可用,临时服务器维护或过载,服务器无法处理请求

504 – 网关超时

结语:后续更精彩

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图