Centos 6 apache httpd 2.2 主要配置详解

实验环境:VMware Workstation Pro 14(试用版)
系统平台:
CentOS release 6.9 (Final)             内核  2.6.32-696.el6.x86_64
Server version: Apache/2.2.15 (Unix)

模块文件路径:

/etc/httpd/modules
/usr/lib64/httpd/modules

主程序文件:

/usr/sbin/httpd
/usr/sbin/httpd.work
/usr/sbin/httpd.even

主进程文件:

/etc/httpd/run/httpd

日志文件目录:

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

配置文件:

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

检查配置语法:

httpd –t
service httpd configtest

配置格式

directive value

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

例:

DocumentRoot "/var/www/html"

Apache HTTP 服务器 2.2 文档

http://httpd.apache.org/docs/2.2/

查看静态编译的模块

httpd -l

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

httpd -M

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

 动态模块路径

/usr/lib64/httpd/modules/

Httpd 2.2常见配置

显示服务器版本信息

默认:
ServerTokens OS

curl -I localhost
可选值 效果
Major Server: Apache/2
Minor Server: Apache/2.2
Min[imal] Server: Apache/2.2.15 (CentOS) DAV/2
Min Server: Apache/2.2.15
Prod Server: Apache
OS Server: Apache/2.2.15 (CentOS)
Full Server: Apache/2.2.15 (CentOS) DAV/2

修改监听的IP和Port

Listen [IP:]PORT
(1) 省略IP表示为本机所有IP
(2) Listen指令至少一个,可重复出现多次

默认:
Listen 80
修改指定IP会,必须重启服务才能生效,reload是不能生效。

定义服务器名称

默认未开启
ServerName hunk.tech:80
如果没有DNS解析,这里可以设置为IP地址。一般建议使用站点对外发布的FQDN名称。

KeepAlive持久连接

Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭

断开条件:数量限制:100

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

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

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

设置:

默认
KeepAlive Off
KeepAliveTimeout 15
MaxKeepAliveRequests 100

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

prefork, worker, event(2.2试验阶段,不建议使用)

要求更高伸缩性的站点可以选择使用线程的 MPM,即 worker 或 event; 需要可靠性或者与旧软件兼容的站点可以使用 prefork。

httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持

确认方法:

ps aux | grep httpd
默认为/usr/sbin/httpd, 即prefork模式

/usr/sbin/httpd.worker 默认为/usr/sbin/worker, 
修改为worker模式
/etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker

另外,/etc/httpd/conf/httpd.conf中以下模块配置与此相关

httpd-2.4 MPM模式修改在以下文件

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

prefork的默认配置:


StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 最多进程数,最大20000  。ulimit值会同时限制此项设置
MaxClients 256 最大并发
MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远
不释放)

worker的默认配置:


StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0 无限制

定义网站目录

默认
DocumentRoot "/var/www/html"

记得修改目录的属主与权限
此项修改只需要reload即可

定义默认搜索页面

默认
DirectoryIndex index.html index.html.var

从左至右顺序查找

定义启动httpd服务的账户与组

默认
User apache
Group apache

站点访问控制类型

目录


控制选项

文件

1.特定单个文件

控制选项
2.文件通配符模式

控制选项
3.正则匹配模式

控制选项


或者这种写法

控制选项

URL路径

1.特定URL

控制选项
2.URL正则匹配模式

控制选项

站点访问控制机制

语法格式:


Options:后跟1个或多个以空白字符分隔的选项列表
在选项前的+,- 表示增加或删除指定选项

常见选项:
Indexes:       指明的URL路径下不存在与定义声明中的默认搜索相符的资源文件时,返回索引列表给用户
FollowSymLinks:允许访问符号链接文件所指向的源文件
None:          全部禁用
All:           全部允许

示例:

#ll
-rw-r--r-- 1 root root 21 Feb 25 10:23 HTTP权威指南.pdf
lrwxrwxrwx 1 root root 11 Feb 25 10:27 ip.txt -> /app/ip.txt
-rw-r--r-- 1 root root 41 Feb 25 10:25 Python3程序开发指南(第二版).pdf

 设置如下:
  > 指定控制类型
Options Indexes FollowSymLinks   > 字符串不区分大小写。 控制机制选项:允许列出目录索引,允许访问软链接指向的源文件


   [ICO]              Name                 Last modified   Size Description                                                                           
   ═══════════════════════════════════════════════════════                                                                         
   [DIR] Parent Directory                                     -                                                                                       
   [   ] HTTP权威指南.pdf                25-Feb-2018 10:23   21                                                                                       
   [   ] Python3程序开发指南(第二版).pdf 25-Feb-2018 10:25   41                                                                                      
   [TXT] ip.txt                          03-Feb-2018 10:07   51        


Options -Indexes FollowSymLinks  > 禁止列出目录索引


#elinks http://192.168.5.102/books
 403 Forbidden 
 Forbidden                                                                       

   You don't have permission to access /books/ on this server.    
   ═════════════════════════════════════════════════              
    Apache Server at 192.168.5.102 Port 80 

AllowOverride

与访问控制相关的哪些指令可以放在指定目录下的.htaccess(默认文件名)文件中,覆盖之前的配置指令

一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的段中,而且更高效。

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。
通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档、文件夹密码保护等功能

Unix、Linux系统或者是任何版本的Apache Web服务器都是支持.htaccess的

启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。
如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器主配置文件中按以下方法配置:AccessFileName .config

.htaccess文件很容易被非授权用户得到,安全性不高。

主要应用场景:
一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。
如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,
尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。
配置指令
只对段有效

AllowOverride All: 所有指令都有效
AllowOverride None:.htaccess 文件无效
AllowOverride AuthConfig Indexes 只覆盖特定指令AuthConfig和Indexes,其它指令都无法覆盖

一个示例:
#vim /app/www/books/.htaccess
options -indexes

优先级

段中的AllowOverride > 主配置文件中的AllowOverride

更加精细的控制方法

1.客户端来源地址

order和allow、 deny

放在directory, .htaccess中

order:定义生效次序;写在后面的表示默认,当前面的不匹配时生效
Allow from:允许访问的客户端地址
Deny from:禁止访问的客户端地址

客户端地址可以是以下格式:
    apache.org      > 一个域
    foo.apache.org  > 一个域之中的某台主机
    172.18.0.200    > 一个IP 地址
    172.16.0.0/16   > 一个IP地址段
    172.16.0.0/255.255.0.0  > 一个IP地址段
    all             > 全部
匹配情形 配置为Allow,Deny 配置为Deny,Allow
仅匹配Allow 允许访问 允许访问
仅匹配Deny 拒绝访问 拒绝访问
没有匹配 拒绝访问 允许访问
Allow和Deny都匹配 匹配默认的Deny(拒绝访问) 匹配默认的Allow(允许访问)

例子:

设置如下:

options indexes followsymlinks
order allow,deny                > 定义了规则顺序
deny from 192.168.5.0/24        > 明确定义了拒绝列表


上面的规则意思为:其他的任何主机都拒绝访问
#curl -I http://192.168.5.102/books/ip.txt
HTTP/1.1 403 Forbidden                      > 拒绝访问

#curl -I http://192.168.7.201/books/ip.txt
HTTP/1.1 403 Forbidden

---

设置如下:

options indexes followsymlinks
order deny,allow                > 定义了规则顺序
deny from 192.168.5.0/24        > 明确定义了拒绝列表


上面的规则意思为:
只有明确在拒绝列表的主机禁止访问,其他的任何主机将允许访问

#curl -I http://192.168.5.102/books/ip.txt
HTTP/1.1 403 Forbidden                      > 拒绝访问

#curl -I http://192.168.7.201/books/ip.txt
HTTP/1.1 200 OK                             > 允许访问

---

设置如下

options indexes followsymlinks
order allow,deny
deny from 192.168.5.0/24        > 明确了拒绝列表
allow from 192.168.7.201        > 明确了允许访问主机列表


#curl -I http://192.168.5.102/books/ip.txt
HTTP/1.1 403 Forbidden

#curl -I http://192.168.7.201/books/ip.txt  > 访问的当前主机IP为192.168.7.202
HTTP/1.1 403 Forbidden      > 拒绝访问

#curl -I http://192.168.7.201/books/ip.txt  > 访问的当前主机IP为192.168.7.201
HTTP/1.1 200 OK             > 允许访问

#curl -I http://172.18.103.79/books/ip.txt  > 访问的当前主机IP为172.18.103.80
HTTP/1.1 403 Forbidden      > 拒绝访问
因为,访问的IP没有明确匹配allow和deny,就执行了默认的拒绝规则

配置如下:

定义了不允许访问.conf结尾的文件


order allow,deny
deny from all


allow from 127.0.0.1 localhost  > 仅仅允许本机访问

2.用户账号

####基于用户的basic认证

语法:


AuthType Basic      > 认证方法
AuthName "String"  > 认证提示字符串
AuthUserFile "认证用户数据库路径"
Require user username1 username2 ...  > 允许访问的认证用户


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

创建使用文本文件作为数据库

htpasswd [ -c ] [ -m ] [ -D ] passwdfile username
htpasswd -b [ -c ] [ -m | -d | -p | -s ] [ -D ] passwdfile username password

-c:自动创建文件,仅在文件不存在时使用
-m:md5格式加密,默认方式
-s: sha格式加密
-D:删除指定用户
-b: 批处理时使用,可以通过命令行直接读取密码而不是交互。
-n: 不更新文件,仅仅屏幕输出命令执行结果。

交互方式:
#htpasswd -c /etc/httpd/conf.d/.htpasswd hunk1
New password: 
Re-type new password: 
Adding password for user hunk1

非交互方式:
#htpasswd -bs /etc/httpd/conf.d/.htpasswd hunk2 1234567
Adding password for user hunk2

生成的密码是经过加密的
#cat .htpasswd 
hunk1:xLhgTub5K6Css
hunk2:{SHA}IOq+XWSw4hZ5boNPUtYf0LcDMvw=

仅仅显示命令执行效果
#htpasswd -nbs hunk3 1234567
hunk3:{SHA}IOq+XWSw4hZ5boNPUtYf0LcDMvw=

删除指定用户
#htpasswd -D /etc/httpd/conf.d/.htpasswd hunk2
Deleting password for user hunk2
示例:


options indexes followsymlinks
AuthType Basic
AuthName "请输入密码才允许访问"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require user hunk1 hunk2


#cat .htpasswd 
hunk1:k5HXZqDz4BLE.
hunk2:{SHA}IOq+XWSw4hZ5boNPUtYf0LcDMvw=
hunk3:{SHA}IOq+XWSw4hZ5boNPUtYf0LcDMvw=

#links http://192.168.5.102/books

Centos 6 apache httpd 2.2 主要配置详解_第1张图片

Centos 6 apache httpd 2.2 主要配置详解_第2张图片

日志中也会有记录

#tail /var/log/httpd/access_log

192.168.5.103 - hunk2 [27/Feb/2018:15:44:39 +0800] "GET /books/ HTTP/1.1" 200 1636 "http://192.168.5.102/books" "ELinks/0.12pre6 (textmode; Linux; 150x27-2)"

使用hunk3进行访问是没有权限的

Centos 6 apache httpd 2.2 主要配置详解_第3张图片

Centos 6 apache httpd 2.2 主要配置详解_第4张图片

#curl -I 192.168.5.102/books
HTTP/1.1 401 Authorization Required
Date: Tue, 27 Feb 2018 07:40:14 GMT
Server: Apache
WWW-Authenticate: Basic realm="请输入密码才允许访"
Connection: close
Content-Type: text/html; charset=iso-8859-1

日志中也会有记录
#tail /var/log/httpd/error_log

[error] [client 192.168.5.1] access to /books failed, reason: user 'hunk3' does not meet 'require'ments for user/valid-user to be allowed access

####基于组的basic认证

语法:


AuthType Basic      > 认证方法
AuthName "String"  > 认证提示字符串
AuthUserFile "认证用户数据库路径"
AuthGroupFile "认证组数据库路径"
Require group grpname1 grpname2 ... > 允许访问的认证用户,组内的用户必须是AuthUserFile存在的用户


定义组和用户对应关系

组名:用户1 用户2

#cat .htgroup 
admin:hunk1 hunk3
webgroups:hunk2

一行定义一个组

示例:


options indexes followsymlinks
AuthType Basic
AuthName "请输入密码才允许访"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
AuthGroupFile "/etc/httpd/conf.d/.htgroup"      > 指定组文件
Require group admin                              > 允许访问的组

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

Satisfy ALL|Any

    ALL 客户机IP和用户验证都需要通过才可以
    Any 客户机IP和用户验证,有一个满足即可

示例:


options indexes followsymlinks
AuthType Basic
AuthName "请输入密码才允许访"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require valid-user                           > 允许所有定义好的用户访问

Order allow,deny        
Allow from 192.168.1.0/24    > 定义允许访问的客户端IP范围
Satisfy All                 >  定义了只有192.168.1.0网段的IP,且通过了账户验证的才可以访问

日志设定

错误日志设置

ErrorLog logs/error_log      > 这里是相对路径

记录日志级别设置

LogLevel warn
可用值:
debug, info, notice, warn,error,crit, alert, emerg

定义日志格式

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

最后的单词就是定义的格式名称,给其他语句块调用的

使用日志格式

CustomLog logs/access_log combine

%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”的值;即发出请求的应用程序

更多的格式说明:
http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

设定默认字符集

默认
AddDefaultCharset UTF-8

中文字符集:GBK, GB2312, GB18030

定义路径别名

语法:
alias /URL /本地磁盘实际路径/
未定义别名前
#curl 192.168.5.102/books/
wwww/books/index.html

定义别名后
alias /books /app/www2/

#curl 192.168.5.102/books/
wwww2/index.html
正则表达式 语法:
aliasmatch 正则表达式 "实际访问路径"

aliasmatch ^/books/(.*)? /app/www2/new$1  > $1表示的是前面( )内匹配的内容

aliasmatch ^.*/(.*\.(jpe?g|gif|png|bmp))$ "/app/www2/imgs/$1"    > 自动将访问的图片目录跳转
#curl 192.168.5.102/books/index.html -lv
* Connected to 192.168.5.102 (192.168.5.102) port 80 (#0)
> GET /books/index.html HTTP/1.1

看,确实跳转到了新的文件名
wwww2/newindex.html
* Closing connection 0

实现用户家目录的http共享

基于模块mod_userdir.so实现

主配置文件中启用
LoadModule userdir_module modules/mod_userdir.so

#httpd -M|grep userdir
 userdir_module (shared)
Syntax OK
语法:

    UserDir 共享的目录      > 注意,这里的目录指的是系统账号家目录中的子目录。如:/home/hunk/userdir

注意事项:

如果配置文件语句是写在/etc/httpd/conf.d/目录下的话,需要将主配置文件中以下行注释掉。
#    UserDir disabled

示例:


    UserDir userhome


#tree /home/hunk
/home/hunk
└── userhome
    └── index.html

注意添加httpd服务账户访问权限   
#setfacl -m u:apache:x /home/hunk/  

#curl 192.168.5.102/~hunk/index.html
/home/hunk/userhome

ServerSignature错误信息显示

默认 on

当客户请求的网页并不存在时,服务器将产生错误文档,错误文档的最后一行将包含服务器的名字、 Apache的版本等信息
如果不对外显示这些信息,就可以将这个参数设置为Off
设置为Email,将显示ServerAdmin 的Email提示

可选值:On | Off | EMail
on 的显示:

#links http://192.168.5.102/a.html
404 Not Found 
Not Found                                                                       

   The requested URL /a.html was not found on this server.                                                                                            

   ════════════════════════════════════════════════════════
    Apache Server at 192.168.5.102 Port 80

off 的显示

#links http://192.168.5.102/a.html
404 Not Found 
Not Found                                                                       

   The requested URL /a.html was not found on this server.

ServerType 服务器运行模式

standalone 独立服务模式
inetd 非独立服务模式
只适用于Unix平台

status页面

基于模块LoadModule status_module modules/mod_status.so实现

注意控制允许访问的用户


    SetHandler server-status


ExtendedStatus On 开启扩展信息,这一条不能写入具体的配置块里面,在配置文件里加下即可。

Centos 6 apache httpd 2.2 主要配置详解_第5张图片

ServerName 绑定名称

ServerName hunk.tech
如果不绑定一个名称,启动服务时会有提示警告。实际并不影响正常启动服务。

ServerAlias 绑定多个域名

ServerAlias web.hunk.tech shop.hunk.tech > 多个域名,用空格隔开
只能通过指定的名称访问

VirtualHost 虚拟主机

所谓虚拟主机是指在一台服务器里运行几个网站,提供WEB、FTP等服务。

注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,一般先注释主配置文件中的以下选项

DocumentRoot
Listen

在使用虚拟主机的时候,建议不要在主配置文件中配置,为了管理上更加清晰,可以独立在/etc/httpd/conf.d目录下以虚拟主机站点名进行区分,如:

#tree ../conf.d
../conf.d
├── basic.conf
├── README
├── user.conf
├── www2.hunk.tech.conf
├── www3.hunk.tech.conf
└── www.hunk.tech.conf

有三种实现虚拟主机方案:

记得先把主配置中的Listen注释掉,在每个虚拟主机配置文件独立指定。

基于ip

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

应用场景:多用于内部网络

Listen 80
         > 定义了以主机IP为访问方法
    ServerAdmin [email protected]
    DocumentRoot /app/www/virtuahost/www.hunk.tech
    ServerName www.hunk.tech
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common

基于端口port

为每个虚拟主机使用至少一个独立的端口port

应用场景:多用于内部网络

Listen 80
Listen 8080
        
    ServerAdmin [email protected]
    DocumentRoot /app/www/virtuahost/www.hunk.tech
    ServerName www.hunk.tech
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common



    ServerAdmin [email protected]
    DocumentRoot /app/www/virtuahost/www2.hunk.tech
    ServerName www2.hunk.tech
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common


IP相同,但端口不同
IP不同,但端口均为默认端口

基于FQDN

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

应用场景:多用于公网,生产环境

NameVirtualHost *:80   > 这一行在2.2版本是必须添加的。2.4之后的版本,官方则去掉了这一个选项,但是功能是相同的。

    ServerAdmin [email protected]
    DocumentRoot /app/www/virtuahost/www3.hunk.tech
    ServerName www.hunk.tech
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common


区分在于 请求报文中首部

配置了3个虚拟主机之后,可以看到监听的端口号也变了

#ss -nlt
State      Recv-Q Send-Q                                           Local Address:Port                                             Peer Address:Port 
LISTEN     0      128                                                         :::8080                                                       :::*     
LISTEN     0      128                                                         :::80                                                         :::*     
LISTEN     0      128                                                         :::8081 

访问各自己的站点也是正常的
#curl 192.168.5.102
www.hunk.tech

#curl 192.168.5.102:8080
www2.hunk.tech

#curl 6-web-1.hunk.tech:8081
www3.hunk.tech

基于FQDN的模式配置示例:

注意,必须在主配置文件中设置以下2项,这个与上面的其他模式有些不同。

NameVirtualHost *:80
Listen 80
#cat /etc/httpd/conf.d/www*

站点1:

    DocumentRoot /app/www/virtuahost/www2.hunk.tech
    ServerName www2.hunk.tech   > 这里设置通过网络访问的FQDN


站点2:

    DocumentRoot /app/www/virtuahost/www3.hunk.tech
    ServerName www3.hunk.tech   > 这里设置通过网络访问的FQDN


站点3:

    DocumentRoot /app/www/virtuahost/www.hunk.tech
    ServerName www.hunk.tech    > 这里设置通过网络访问的FQDN

在充当测试客户机的主机上设置/etc/hosts

192.168.7.201 www.hunk.tech www2.hunk.tech www3.hunk.tech

可以实现通过不同的域名分别对应不同的虚拟主机。很多共享主机提供商用的就是这些技术啦。

#curl www.hunk.tech
www.hunk.tech

#curl www2.hunk.tech
www2.hunk.tech

#curl www3.hunk.tech
www3.hunk.tech

仅允许通过域名访问站点,禁止使用IP方式访问的实现

方法1:

#vim denyip-www.hunk.tech.conf

      > 指定IP
    ServerName 192.168.7.201        > 绑定访问方式
    
      order deny,allow
      deny from all                 > 拒绝所有
    


#curl 192.168.7.201

403 Forbidden
You don't have permission to access / on this server

方法2:

建一个首页文件,如index.hmtl,首面文件内容可以是一个声明不允许以IP访问,如果想更友好点,可以设置跳转。
#echo 'deny from ip ' > empty/index.html

#curl 192.168.7.201
deny from ip 

压缩页面

基于模块实现

LoadModule deflate_module modules/mod_deflate.so

优点:节约带宽

缺点:消耗CPU资源;有些浏览器并不支持;并不是所有文件都会有明显的压缩效果

语法选项

设置在server模块中

启用压缩功能
SetOutputFilter DEFLATE

定义压缩比
DeflateCompressionLevel 9         > 1-9 最高9

定义压缩文件类型
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

Https

SSL是基于IP地址实现,单IP的主机仅可以使用一个https虚拟主机

实现过程

#yum install mod_ssl
会在/etc/httpd/conf.d生成一个子配置文件ssl.conf

将创建好的私钥和证书文件放到一个目录里

编辑/etc/httpd/conf.d/ssl.conf,把以下内容按需修改,其他不要动。



ServerName www.hunk.tech:443
SSLCertificateFile /etc/httpd/conf.d/ssl/http.crt
SSLCertificateKeyFile /etc/httpd/conf.d/ssl/http.key


SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem  > CA的证书文件

只有以上这一行启用后,才会在客户端显示出完成的证书路径

image

http重定向

语法:

Redirect termanent|temp URL-path URL

Permanent:永久重定向301
temp:永久重定向302

写在配置文件中
redirect temp / http://www.baidu.com
redirect permanent / http://www.baidu.com

#curl -I www.hunk.tech
HTTP/1.1 302 Found
Location: https://www.hunk.tech

#curl -I www.hunk.tech
HTTP/1.1 301 Moved Permanently
Location: https://www.hunk.tech

RewriteRule

基于模块

LoadModule rewrite_module modules/mod_rewrite.so

需要在配置文件中启用,如果使用了虚拟主机,则配置在对应的虚拟主机server块内

RewriteEngine on
RewriteRule 规则 [redirect=301重定向状态码]

将http重定向到https

RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]

HSTS

HTTP Strict Transport Security

服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,
会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程

需要在配置文件中启用,如果使用了虚拟主机,则配置在对应的虚拟主机server块内

RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]
header always set Strict-Transport-Security: "max-age=3600"
#curl -ILk www.hunk.tech/index.html
HTTP/1.1 302 Found

Strict-Transport-Security: max-age=3600   > 这里

Location: https://www.hunk.tech/index.html

相关http的其他工具

rotatelogs:日志滚动工具

httpd的压力测试工具

 ab, webbench, http_load, seige
 Jmeter 开源
 Loadrunner 商业,有相关认证
 tcpcopy:网易,复制生产环境中的真实请求,并将之保存

ab [OPTIONS] URL
来自httpd-tools包
-n:总请求数
-c:模拟的并行数
-k:以持久连接模式测试

#ab -n 1000 -c 1000 www.hunk.tech/index.html

ulimit –n 数字(默认1024) 调整能打开的文件数

转载于:https://blog.51cto.com/191226139/2073716

你可能感兴趣的:(Centos 6 apache httpd 2.2 主要配置详解)