首页 > 代码库 > Httpd 配置相关基础详解
Httpd 配置相关基础详解
1、关闭欢迎页面
在浏览器中输入IP地址,则会出现Apache默认的欢迎页面,如果想关闭,则;
修改/etc/httpd/conf.d/welcome.conf……………………即重命名(不以.conf结尾)或删除
如:
[root@Burgess~]# cd /etc/httpd/conf.d/
[root@Burgessconf.d]# mv welcome.conf welcome.conf.burgess ……….将文件后缀更改,则不会再显示默认欢迎页面
[root@Burgessconf.d]# service httpd reload ………………………将文件reload之后,刷新页面,则欢迎页面没了
Reloadinghttpd:
2、指定监听的地址和端口
[root@Burgess ~]# cd /etc/httpd/conf
[root@Burgessconf]# ls
httpd.conf magic
[root@Burgess conf]#vim httpd.conf
#Listen80
Listen172.16.249.120:80
Listen8080
解析:脚本用/Listen回车找到Listen 80 ,此为监听本机所有IP的80端口,指定IP;在监听一个8080端口,表示监听本机的所有IP端口
[root@Burgessconf]# service httpd restart …………………………….此处需要restart,不能reload
Stoppinghttpd: [ OK ]
Startinghttpd: [ OK ]
[root@Burgessconf]# ss -tnl ……………………………………….查看监听是否生效
State Recv-Q Send-Q Local Address:Port PeerAddress:Port
LISTEN 0 128 :::8080 :::*
LISTEN 0 128 172.16.249.120:80 *:*
修改后:在浏览器上,输入172.16.249.120可以访问到网页;或者再加上 “:8080”也可以访问到相同内容
总结用法:Listen[IP:]PORT
注意:Listen可以出现多次
3、持久连接(persistent connection)
图示: (更多内容请参考:http://zh.wikipedia.org/wiki/HTTP%E6%8C%81%E4%B9%85%E8%BF%9E%E6%8E%A5;http://www.cnblogs.com/protorock/archive/2007/06/10/778298.html)
打开/etc/http/conf/httpd.conf文件,可修改下面信息
KeepAlive Off|On ………………关闭或打开持久连接
MaxKeepAliveRequests 100 数量上限;On的情况下生效
KeepAliveTimeout 15 时间上限,单位second;On的情况下生效
4、MPMs ( Multi-Processing Modules)多处理模块
选项查看帮助 httpd -h
httpd -l: 显示编译进核心的模块
httpd -M: 显示DSO模块 (动态装卸载)
以下内容查看及设定在httpd服务脚本/etc/sysconfig/httpd
<IfModule prefork.c>
StartServers 8……………………服务器默认启动进程数 (可以用psaux | grep httpd 查看;一个主进程,八个子进程,主进程只启动子进程)
MinSpareServers 5………………..最少空闲进程数
MaxSpareServers 20…………………..最大空闲进程数
ServerLimit 256…………………………(服务器能响应的最多进程数,即client同时请求超过256个时候,则需要等待;假设一个进程处理时间需要2秒;则一天可处理进程数量为30*60*24=11059200,但网站访问量有峰值的,所以根据此选择配置服务器数量及带宽;计算器命令bc;最大并发数为1024)
MaxClients 256……………………..与上面的道理一样,小于等于ServerLimit
MaxRequestsPerChild 4000 ……………每个子进程响应请求次数不能超过4000次,若超过了,则销毁之,再创建一个
</IfModule>
worker与上面的prefork差不多,不再赘述
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0 ………………不作次数限制
</IfModule>
思考:以上面为参考,worker最多可以启动多少个进程?
5、 DSO
查看模块:httpd -M (后面为static的表静态;后面为share的为动态模块)
卸载模块:打开/etc/sysconfig/httpd,查找模块信息,若不想用某模块,可在其前面用#注释掉
LoadModule foo_module(模块名称)modules/mod_foo.so(模块路径,相对路径,相对于/etc/httpd/;但其为符号链接模块所在路径)
注意:修改了装载的模块后,httpd -t: 检查配置文件语法或者用service httpd configtest;reload即可生效;
6、指定Main Server(中心主机)的docroot (web资源服务器,负责发送预先创建好的或动态生成的内容;此些内容的放置位置称为docroot;全称:DocumentRoot"/var/www/html",也可在/etc/sysconfig/httpd查找到其定义)
例如:修改docroot为根下的/www/burgessdocs,操作如下;
[ root@Burgess ~]# cd/etc/httpd/conf
[root@Burgess conf]# ls
httpd.conf httpd.conf~ magic
[root@Burgess conf]#vim httpd.conf
[root@Burgess conf]#mkdir /www/burgessdocs -pv
[root@Burgess conf]#vim /www/burgessdocs/index.html ……………………………..创建一个主页
#DocumentRoot “/var/www/html” ……………………..用#注释掉此行
DocumentRoot “/www/burgessdocs” ………………新加行写下新路径,也可在旧的路径直接改,但建议新加一行
[root@Burgess conf]#httpd -t
Syntax OK
[root@Burgess conf]#service httpd reload
Reloading httpd:
可以打开浏览器,输入IP,查看是否有内容,验证
注意:如果操作都没有问题,权限也没有问题,但是网页内容显示没有访问权限,则可以用getenforce 查看SELinux启用模式是否为disabled,若不是,则在/etc/selinux/config里面修改之。
7、 站点路径访问控制
分为文件系统与URL路径;如:想访问/www/burgessdocs/bbs/upload/a.rar路径,以(6)docroot为例;
文件系统路径:/www/htdocs/bbs/upload/a.rar
URL路径:http://Server_IP/bbs/upload/a.rar
基于本地文件系统路径
<Directory"/path/to/some_directory">
</Directory>
基于URL
<Location "/path/to/some_url">
</Location>
8、 Directory容器中的访问控制定义
8.1 Options 定义页面如何展示给clients;在/etc/httpd/conf/httpd.conf 中
当有Indexes时;演示:在以上步骤执行的情况下,修改<Directory“/www/html”>为下图所示路径,当有Idexes情况下,如下图所示
保存退出后reload一下,之后;
[root@Burgess conf]#cd /www/burgessdocs
[root@Burgessburgessdocs]# ls
index.html index.html~
[root@Burgessburgessdocs]# mv index.html a.html
打开浏览器页面,则显示;
a.html可下载;点开a.html则显示信息
删掉Indexes之后,刷新页面;
如果提供a.html路径访问;http://172.16.249.120/a.html;则显示Hello Chicago!信息
解析:Indexes:当访问的路径下无默认的主页面时,将所有资源以列表形式呈现给用户;危险,慎用,如提供ftp一样的下载网站则可用,大多数情况下要把Idexes删掉;详细请参考:http://www.2cto.com/os/201212/176662.html
FollowSysLinks:跟随符号链接指向的原文件;
演示其功能,创建fstab.html指向/etc/fstab文件;
[root@Burgessburgessdocs]# pwd
/www/burgessdocs
[root@Burgessburgessdocs]# ln -sv /etc/fstab /www/burgessdocs/fstab.html
`/www/burgessdocs/fstab.html‘-> `/etc/fstab‘
[root@Burgessburgessdocs]# ll
total 8
-rw-r--r--. 1root root 117 Dec 13 01:18 a.html
lrwxrwxrwx. 1root root 10 Dec 13 03:14 fstab.html ->/etc/fstab
-rw-r--r--. 1root root 117 Dec 13 01:11 index.html~
在172.16.249.120后指定fstab.html; http://172.16.249.120/fstab.html;
网页信息显示如下;
解析:如果开启FollowSysLinks;而不小心将符号连接指向一个敏感资源,则会被其他人查看到,所以最好关闭此功能,-FollowSysLinks(前面加上-,为关闭);</Directory>定义的段,此段之外的其他段也适用,所以删掉某选项,可能还会起作用,所以用“-”关闭
None: 一个也没有;
All: 所有
8.2 AllowOverride None 基于.htaccess隐藏文件的访问控制,一般用不到;详见/etc/httpd/conf/httpd.conf
8.3 基于IP的访问控制
白名单:Order allow,deny
Allow from all
黑名单:Order deny,allow
Deny from all
from后面能接受的地址格式:
IP, NetworkAddress
网络地址格式:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
Eg:只允许172.16网段的访问,且拒绝172.16.100.16访问,则;
Order allow,deny
Deny from172.16.100.16
Allow from 172.16
在/etc/httpd/conf/httpd.conf更改为上面信息;
刷新页面显示(172.16.100.16为本机IP地址)
可以用 tail /var/log/httpd/error_log查看到本机IP地址denied信息
9、 定义默认的主页面
DirectoryIndex index.html index.html.var 可以列出多个,自左向右找,如果第一个没有,则寻找第二个….
10、 配置日志功能 (默认开启)
ErrorLog logs/error_log:定义错误日志文件路径;其符号链接至/var/log/httpd,可以ll /etc/httpd查看其链接;以后可能会用专门的日志收集磁盘或服务器
LogLevel warn :比warn级别高的及包括warn信息都会被收集
LogFormat "%h %l %u %t \"%r\" %>s %b\"%{Referer}i\" \"%{User-Agent}i\"" combined
%h Remotehost 客户端(远程)主机
%l Remotelogname (from identd, if supplied) 远程登录用户名,大多数情况都为空,用处不大
%u Remote user(from auth; may be bogus if return status (%s) is 401) 用户
%t Time therequest was received (standard english format) 时间
%r First lineof request 请求报文的首行
(method url version )
%s Status. Forrequests that got internally redirected, this is the status of the *original*request --- %>s for the last. 记录请求时的状态码(响应码)最后一个报文的响应码
%b Size ofresponse in bytes, excluding HTTP headers. In CLF format, i.e. a ‘-‘ ratherthan a 0 when no bytes are sent. 响应报文内容的大小(字节为单位)
%{Foobar}i Thecontents of Foobar: header line(s) in the request sent to the server.
%{referer}i: 跳转至当前页面之前来源的上一次所在的页面;
%{User-Agent}i:用户代理(浏览器);
详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats
CustomLog logs/access_log combined: 访问日志
指令 日志文件 日志格式名称
11、 curl命令
curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxytunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。
curl的常用选项:
-A/--user-agent <string> 设置(伪装)用户代理发送给服务器
Eg: [root@Burgess~]# curl http://172.16.249.120/a.html
<html>
<head>
<title>This is Burgess‘s page</title>
</head>
<body>
<h1>Hello Chicago!</h1>
</body>
</html>
[root@Burgess ~]# tail -f/var/log/httpd/access_log
172.16.249.120 - -[13/Dec/2014:05:13:01 +0800] "GET /a.html HTTP/1.1" 200 117"-" "curl/7.19.7(x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18libssh2/1.4.2"
[root@Burgess ~]# curl http://172.16.249.120/a.html
[root@Burgess ~]# tail -f/var/log/httpd/access_log
172.16.249.120 - - [13/Dec/2014:05:18:36+0800] "GET /a.html HTTP/1.1" 200 117 "-" "Opera/15.1"
-basic 使用HTTP基本认证
--tcp-nodelay 使用TCP_NODELAY选项;在发送报文时候禁用Nagle算法(打包n个报文一块发送,用一个IP首部,节约带宽)
-e/--referer <URL> 来源网址
Eg:[root@Burgess~]# curl -A "Opera/15.1" -e "www.burgess.com/index.html" http://172.16.249.120/a.html ………….. 伪装成www.burgess.com/index.html访问
[root@Burgess ~]# tail -f/var/log/httpd/access_log
172.16.249.120 -- [13/Dec/2014:05:34:50 +0800] "GET /a.html HTTP/1.1" 200 117 "www.burgess.com/index.html""Opera/15.1"
--cacert <file> CA证书 (SSL)
--compressed 要求返回是压缩的格式
-H/--header <line>自定义头信息传递给服务器
Eg:用vim编辑器打开配置文件/etc/httpd/conf/httpd.conf,修改信息如下
[root@Burgess ~]#curl -H "testheader:burgess" http://172.16.249.120/a.h
[root@Burgess ~]#tail -f /var/log/httpd/access_log
172.16.249.120 -- [13/Dec/2014:06:36:08 +0800] "GET /a.html HTTP/1.1" 200 117"-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2" "burgess"
-I/--head 只显示响应报文首部信息 (打开一个网页,按键F12为调试工具,可以查看各种首部等信息)
Eg: [root@Burgess ~]# curl -I http://172.16.249.120/a.html
HTTP/1.1 200 OK
Date: Fri, 12 Dec 201421:41:31 GMT
Server: Apache/2.2.15(CentOS)
Last-Modified: Fri, 12 Dec2014 17:18:52 GMT
ETag:"a0011-75-50a081641943f"
Accept-Ranges: bytes
Content-Length: 117
Connection: close
Content-Type: text/html;charset=UTF-8
--limit-rate <rate> 设置传输速度
-u/--user<user[:password]>设置服务器的用户和密码
-0/--http1.0 使用HTTP 1.0 version;
用法:curl [options][URL...]
12、路径别名
docroot路径映射:
docroot: /www/burgessdocs
如果访问http://172.16.100.16/bbs/images/obama.html
则对应的172.16.100.16之后的路径/www/htdocs/bbs/images/obama.html
路径别名:
定义/bbs 是/web/forum/路径
如果http://172.16.100.8/bbs/images/obama.html
则对应文件路径/web/forum/images/obama.html
定义方法:
Alias /URL/ "/path/to/some_directory/"
Eg:
root@Burgess ~]# mkdir/web/forum/images -pv
mkdir: created directory`/web‘
mkdir: created directory`/web/forum‘
mkdir: created directory`/web/forum/images‘
[root@Burgess ~]# vim/web/forum/images/obama.html
<h1>BrackObama<h1>
之后用vim编辑器打开配置文件/etc/httpd/conf/httpd.conf,找一个有Alias的地方,添加信息
Alias /bbs/ “/web/forum/” ………………………………….bbs及forum后面斜杠可以省略,但要保持一致;
[root@Burgess ~]#service httpd reload
通过浏览器访问,则显示信息如下;而不是/www/burgessdocs下面的信息
应用:当我们的主机作为web服务器,访问docroot外的路径下的文件时,就会用到Alias
13、 设定默认字符集
AddDefaultCharset UTF-8 (在配置文件/etc/httpd/conf/httpd.conf)
常用字符集:UTF-8, GBK, GB2312, GB18030
14、基于用户的访问控制
14.1质询:
WWW-Authenticate:服务器用401状态拒绝客户端请求,说明需要用户提供用户名密码;
14.2认证:
Authorization: 客户端填入账号和密码后重新发出请求;包含认证算法、用户名和密码;都为明文的不安全,所以要加上认证方式
14.3安全域:security realm
docroot: /www/htdocs/
admin/
finance/
14.4认证方式:
基本认证:basic(基于Base64编码,通过抓包,解码,可以得到用户信息)
摘要认证:digest (很多浏览器不支持,很少用到,比基本认证安全;)
若用到基本认证,则,
(a)先检查/etc/httpd/conf/httpd.conf,是否有以下几个重要modules
LoadModuleauth_basic_module modules/mod_auth_basic.so
LoadModuleauthn_file_module modules/mod_authn_file.so
LoadModuleauthz_host_module modules/mod_authz_host.so
LoadModuleauthz_user_module modules/mod_authz_user.so
(b)假设/www/burgessdocs/admin/index.html 对于用户访问时需要基本认证,则
[root@Burgess ~]# cd/www/burgessdocs/
[root@Burgess burgessdocs]# ls
a.html fstab.html index.html~
[root@Burgess burgessdocs]#mkdir admin
[root@Burgess burgessdocs]# cdadmin/
[root@Burgess admin]# vim index.html
[root@Burgess admin]# cd ..
[root@Burgess burgessdocs]# ls
admin a.html fstab.html index.html~
[root@Burgess burgessdocs]# mva.html index.html …………………为了便于访问,将a.html 改名为 index.html
(c)定义security realm
用vim编辑器打开配置文件/etc/httpd/conf/httpd.conf
<Directory"/www/burgessdocs/admin">
Options None
AllowOverride None
AuthType Basic …..认证类型
AuthName "Burgess AdminArea" 安全域名,自定义
AuthUserFile/etc/httpd/users/.htpasswd 认证文件,即存放的认证密码、用户名等信息,与/etc/passwd/无关,一般用隐藏文件存放;路径可自定义,路径目录若没有需要创建;
Require valid-user …………………允许所有合法用户访问,即有密码 (如果规定Kevin跟James访问则Reqire user Kevin James,若还有用户则可以在其后面列出;Require valid-user: 允许账号文件中的所有有账号密码的用户访问,Require后注意所有用户与列出用户书写方式的区别)
</Directory>
(d) 提供用于认证的文件,了解htpasswd命令应用(htpasswd - Manage user files for basic authentication)
htpasswd [options]password_file username
-c: 添加第一个用户时自动创建账号文件;
-m: 以md5格式加密密码;
-s: 以sha格式加密密码;
-D: 删除指定用户
双击原来的shell,生成新shell 2,在/www/burgessdocs/执行以下命令
[root@Burgess burgessdocs]#htpasswd -c -m /etc/httpd/users/.htpasswd Kevin ……………………第一次创建用户密码用-c
New password: ……………………….密码为burgess
Re-type new password:
Adding password for userKevin
[root@Burgess burgessdocs]# htpasswd -m/etc/httpd/users/.htpasswd James
New password: ……………………….密码为burgess
Re-type new password:
Adding password for userJames
[root@Burgess burgessdocs]#tail /etc/httpd/users/.htpasswd 查看密码内容,为密文(.htpasswd隐藏文件,查看隐藏文件用ls -a 或ls -al)
Kevin:$apr1$bFvZ.CZt$JJRF2kAUnh19NGcAR.0G9/
James:$apr1$Gs65LvZ2$WUgyN14nAg2Luffv5FWQU1
在shell1中保存配置文件,检查语法错误,重新加载,然后查看浏览器网页http://172.16.249.120/admin ;显示页面如下;
这时就可以输入用户名与密码登陆查看信息了
如果只想让Kevin登陆,不让James登陆,可以修改 Require后面信息,
(e)组认证
示例:[root@Burgess~]# cd /etc/httpd/
[root@Burgesshttpd]# mkdir groups
[root@Burgesshttpd]# cd groups/
[root@Burgessgroups]# vim .htgroup
NBAgr:Kevin Lebron ……………………………组名NBAgr
[root@Burgessgroups]# httpd -t
Syntax OK
Cd 到/etc/httpd/conf
[root@Burgess conf]#vim httpd.conf
<Directory"/www/htdocs/admin">
Options None
AllowOverride None
AuthType Basic
AuthName "Admin Area"
AuthUserFile /etc/httpd/users/.htpasswd
AuthGroupFile /etc/httpd/groups/.htgroup
Require group GRP1, ...
</Directory>
[root@Burgess conf]#httpd -t
Syntax OK
[root@Burgess conf]#service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
用户Lebron为新加的,步骤略,在浏览器中可演示,Lebron Kevin可以登陆,James不能登陆
15、 虚拟主机:一个物理服务器服务于多个站点:每个站点通过一个虚拟主机来实现;
15.1 httpd支持三种类型的虚拟主机:
基于IP
基于Port
基于Host ………………最常用的
注意:一般使用虚拟主机需要取消Main Server; 注释DocumentRoot指令即可(/etc/httpd/conf/httpd.conf);
15.2定义虚拟主机:
15.2.1基于IP;(环境:eth0: 172.16.249.120:80 ; eth0:0 172.16.249.121 ;)
添加网卡 ifconfigeth0:0 172.16.249.121
用vim打开/etc/httpd/conf/httpd.conf,
将DocumenetRoot“/www/burgessdocs”用#注释掉(如果Droot没有更改,则是注释掉DocumentRoot “/www/html”)
添加虚拟主机
<VirtualHost 172.16.249.120:80>
ServerName www.burgess.com
DocumentRoot “/Vhosts/www.burgess.com”
<\VirtualHost>
<VirtualHost 172.16.249.121:80>
ServerName www.burgess.org
DocumentRoot “/Vhosts/www.burgess.com”
<\VirtualHost>
将之前更改的监听端口,更改为默认,即:LISTEN 80 ,其他修改的LISTEN信息注释掉;
保存退出,检查语法httpd -t
[root@Burgess conf]# mkdir -pv/Vhosts/www.burgess.{com,org} …………………….创建Droot
mkdir: created directory`/Vhosts‘
mkdir: created directory`/Vhosts/www.burgess.com‘
mkdir: created directory`/Vhosts/www.burgess.org‘
[root@Burgess conf]# vim/Vhosts/www.burgess.com/index.html ……………………内容为<h1>Like A Fish In Water<\h1>
[root@Burgess conf]# vim/Vhosts/www.burgess.org/index.html ………………………….内容为<h1>Beauty lies inthe lover’s eyes<\h1>
保存退出,检查语法httpd -t 重启service httpd restart
可在网页浏览器中输入IP地址显示相对应的信息
15.2.2基于port:
在基于以上步骤的前提下,启用之前设置好的 Listen 8080端口;将两个VirtualHost的IP改为一个,端口有一个改为8080即可;
在网页中输入http://172.16.249.120:8080/ 可看到Beauty liesin the lover’s eyes;输入172.16.249.120可看到Like A Fish In Water
15.2.3基于Host
Vim 配置文件/etc/httpd/conf/httpd.conf
NameVirtualHost *:80 ………..(此项启用,*为所有地址,虚拟机定义的地址需要与其保持一致,httpd 2.2version上有此选项,2.4版本就没有了)
<VirtualHost 172.16.249.120:80>
ServerName www.burgess.com
DocumentRoot "/Vhosts/www.burgess.com"
</VirtualHost>
<VirtualHost 172.16.249.120:80>
ServerName www.burgess.org
DocumentRoot "/Vhosts/www.burgess.org"
</VirtualHost>
修改/etc/hosts配置文件(格式:IP ServerName)
命令行访问:
[root@Burgess ~]# curlhttp://www.burgess.org/
<h1>Beauty lies inthe lover‘s eyes</h1>
[root@Burgess ~]# curlhttp://www.burgess.com/
<h1>Like A Fish InWater!</h1>
15.2.4还可以定义别名:
<VirtualHost172.16.249.120:80>
ServerName www.burgess.com
SeverAlias web.burgess.com ………………………生效需要在/etc/hosts配置文件加上此别名信息
DocumentRoot"/Vhosts/www.burgess.com"
</VirtualHost>
以上方式可以混合运用
15.2.5自定义log路径
<VirtualHost172.16.249.120:80>
ServerName www.burgess.com
DocumentRoot"/Vhosts/www.burgess.com"
CustomLog“/var/log/httpd/access_burgess.com” combined …………………………为www.burgess.com独立的log存放路径,其他的若没有,则存放中心主机一致
</VirtualHost>
16、 内置的status页面
查看status模块是否装载:[root@Burgess ~]#httpd -M | grep status
在配置文件/etc/httpd/conf/httpd.conf中找到下面内容,并启用
<Location /server-status>
SetHandlerserver-status …………………………….SetHandler(处理器)
Order deny,allow
Deny from all
Allow from 172.16 ………………………………可以设定特定网段 能够访问status信息
</Location>
验证:找一个172.16网段的主机,在浏览器中输入可以访问的IP,后面加上/server-status 则可查看status信息;若启用ExtendedStatus On,则可看到更详细信息
17、 https: ssl (其相关知识更多请参考:http://burgess8909.blog.51cto.com/9607271/1588395)
ssl: secure socket layer, sslv3
tls: transport layer security, tlsv1
服务器认证、客户端认证、完整性、保密性、效率、普适性
https, http/ssl, https:// ,443/tcp
SSL会话简化过程:
(1) 客户端发送可供选择的加密方式并请求证书;
(2) 发送证书以及选定加密方式给客户端;
(3) 生成临时会话密钥,并使用服务器的公钥加密发送给服务器商;
(4) 双方进行安全通信
配置过程
(1) 建立私有CA (切换到 /etc/pki/CA目录)
[root@burgessCA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
[root@burgessCA]# openssl req -new -x509 -key private/cakey.pem -days 19890 -outcacert.pem
[root@burgessCA]# echo 01 > serial
[root@burgessCA]# touch index.txt
(2) 为服务器生成证书
[root@burgessCA]# mkdir /etc/httpd/ certs
[root@burgesscerts]# (umask 077; openssl genrsa -out httpd.key 2048 )
[root@burgesscerts]#openssl req -new -key httpd.key -out httpd.csr -days 19890
[root@burgesscerts]#openssl ca -in httpd.csr -out httpd.crt -days 19890
详细步骤参考博客:http://burgess8909.blog.51cto.com/9607271/1588151
(3) 配置httpd使用数字证书
[root@Burgess conf]#yum install mod_ssl -y #……………….. 安装相应的模块程序包,默认没有安装
[root@Burgess ~]#rpm -ql mod_ssl
/etc/httpd/conf.d/ssl.conf # …………………..为其配置文件
/usr/lib64/httpd/modules/mod_ssl.so
/var/cache/mod_ssl
/var/cache/mod_ssl/scache.dir
/var/cache/mod_ssl/scache.pag
/var/cache/mod_ssl/scache.sem
[root@Burgess ~]# ss -tnl
LISTEN 0 128 :::443 :::* ……………….可以看到443端口开启,若没有,则restart一下;
编辑/etc/httpd/conf.d/ssl.conf,开启检查以下相关信息
LoadModule ssl_module modules/mod_ssl.so
Listen 443
<VirtualHostIP:PORT>
ServerName www.burgess.com:443
DocumentRoot 可以修改DR路径,如修改为/www/sslhost
SSLCipherSuiteALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW #!表示移除,+表加进来的
SSLEngine on # ………………………SSL功能是否开启
SSLCertificateFile #/etc/httpd/certs/httpd.crt将路径修改为已生成的CA证书路径
SSLCertificateKeyFile #/etc/httpd/certs/httpd.key生成密钥路径
</VirtualHost>
保存退出;检查语法;reload; tail/var/log/httpd/error_log 查看信息,显示路径/www/sslhost不存在;创建之,并为其创建一个index.html页面
[root@Burgess ~]# mkdir /www/sslhost -pv
[root@Burgess ~]# vim /www/sslhost/index.html
<h1>Loversdon‘t finally meet somewhere. They‘re in each other all along</h1>
更改/etc/httpd/conf/httpd.conf下的DocumentRoot路径为/www/sslhost
在浏览器输入172.16.249.120;则显示您的链接不是私密链接;之所以出现这样的情况,是因为本地不能识别CA证书,所以把应该CA导入到本地,其次CA的名称应该为www.burgess.com,而非访问IP地址。
将CA(/etc/pki/CA/cacert.pem)导入到本地:直接复制到本地;并将cacerts.pem后缀更改为cacerts.crt;双击直接导入,安装,证书存储位置
访问地址与持有者身份不一致:则将www.burgess.com与对应IP写进hosts文件;windows下的路径/c/windows/system32/drivers/etc/hosts ………….若在里面更改不了,可以拖出来更改
再次访问输入:www.burgess.com;则会显示正常信息
用curl访问则需要将IP与主机名写进/etc/hosts文件中
重启httpd服务
测试:
openssls_client -connect IP:PORT -CAfile /path/to/ca_certificat_file
注意:ssl会话只能基于IP创建,这意味着如果服务器仅有一个IP,那么仅为一个虚拟主机提供https服务;
18 访问属性配置(总结)
基于文件系统的配置:(基于路径做访问控制)
<Directory [~]"">
...
</Directory>
~: 后面的路径支持模式匹配,但性能会比较差,不建议用
<File [~]"">
...
</File>
<FileMatch"">
...
</FileMatch>
基于URL的配置:
<Location [~]"">
...
</Location>
<LocationMatch"">
...
</LocationMatch>
19 、使用mod_deflate模块压缩页面优化传输速度
[root@burgess ~]#vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
DocumentRoot/www/www.enimem.com
ServerName www.enimem.com
</VirtualHost>
[root@burgess ~]#vim /www/www.enimem.com/index.html
<h1>Youth is not atime of life; it is a state of mind.</h1>
[root@burgess ~]# cp/var/log/messages /www/www.enimem.com/test.html
在浏览器中输入信息及显示结果如下;
[root@burgess ~]#ll /www/www.enimem.com/test.html
-rw------- 1 root root 94326 Dec 21 19:59/www/www.enimem.com/test.html
[root@burgess ~]#chmod 644 /www/www.enimem.com/test.html #给其权限
访问页面刷新,如下:
添加压缩功能
[root@burgess ~]#vim /etc/httpd/conf/httpd.conf
LoadModuledeflate_module modules/mod_deflate.so #检查此模块是否打开
#将一下内容粘贴至配置文件中,粘贴位置自定义,如果粘贴在虚拟机之外,则适用于所有虚拟主机
SetOutputFilterDEFLATE #(输出过滤器,判别文件类型,然后确定是否压缩)
# mod_deflateconfiguration
# Restrictcompression to these MIME types #表示过滤成功的类型,执行压缩
AddOutputFilterByTypeDEFLATE text/plain
AddOutputFilterByTypeDEFLATE text/html
AddOutputFilterByTypeDEFLATE application/xhtml+xml
AddOutputFilterByTypeDEFLATE text/xml
AddOutputFilterByTypeDEFLATE application/xml
AddOutputFilterByTypeDEFLATE application/x-javascript
AddOutputFilterByTypeDEFLATE text/javascript
AddOutputFilterByTypeDEFLATE text/css #[css层级集文样式表]
# Level of compression (Highest 9 - Lowest 1)
DeflateCompressionLevel9 #压缩比最大,压缩后传输速率最快,同时也最消耗cpu,所以因地制宜根据cpu与带宽选择理想压缩比
# Netscape4.x has some problems.
BrowserMatch^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08have some more problems
BrowserMatch^Mozilla/4\.0[678] no-gzip
# MSIE masqueradesas Netscape, but it is fine
BrowserMatch\bMSI[E] !no-gzip !gzip-only-text/html #IE浏览器被归类于Mozilla,所以默认不压缩,而其支持压缩,所以此项为开启压缩功能
[root@burgesswww.enimem.com]# httpd -t #检查语法错误,有报错,但没影响
AH00526: Syntaxerror on line 105 of /etc/httpd24/extra/httpd-ssl.conf:
SSLCertificateFile:file ‘/etc/httpd24/certs/httpd.crt‘ does not exist or is empty
[root@burgesswww.enimem.com]# service httpd restart
刷新页面后显示如下;
如果用curl请求,则不压缩
[root@burgess ~]# curl -I http://172.16.249.120/test.html
HTTP/1.1 200 OK
Date: Sun, 21 Dec 2014 19:01:54 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Sun, 21 Dec 2014 11:59:45 GMT
ETag: "120018-17076-50ab8ad8cee8e"
Accept-Ranges: bytes
Content-Length: 94326
Connection: close
Content-Type: text/html; charset=UTF-8
20 、httpd程序自带的工具程序:
httpd: apache的服务程序
-t: 配置文件语法测试
-M: 列出所有已经装载的模块
-l: 列出所有的静态模块
-S:列出所有的虚拟主机 (已经配置好的)
htpasswd: basic认证基于文件实现时用到账号密码文件生成器(nginx未带此工具)
apachectl: shell脚本,httpd服务控制
apxs: httpd得以扩展使用第三方模块的工具接口;(若没有则安装httpd-devel; apxs -h显示模块信息,此工具相当于钩子,挂第三方模块的)
htdigest: 为digest认证创建和更新用户认证文件(摘要认证,很少用)
rotatelogs: 不关闭httpd而切换其使用到的日志文件
access_log, access_log.1,access_log.2 (可以不关闭httpd,就可保存日志,后缀最大号的为最先生成的,如果继续滚动保存,则后缀号码也会变化)
suexec: 访问某些特殊权限配置的页面资源时,临时切换至指定用户
User apache
Group apache
ab: apache bench 对apache做压力测试的
本文出自 “西来龙象” 博客,请务必保留此出处http://burgess8909.blog.51cto.com/9607271/1592787
Httpd 配置相关基础详解