书接上回,虽然之前写的一些在httpd-2.2上的常用配置已经显得很全面了,但还有一些配置是我们不能忽略的:
13、status页面 LoadModule status_module modules/mod_status.so
这是一个服务器状态的页面,可以使管理员在客户端浏览器上通过输入路径找到并查看状态,比如我centos 6上用的ip是172.16.0.210,那么就在地址栏输入:172.16.0.210/server-status
从上图的hello world可以看出,这是我的主服务器,我并没有使用虚拟服务器(因为6上的主配置里有写好的,把注释去掉就能用)
注意:在centos 7上主配置里没有此条目,想用自己加,虚拟服务器就加在虚拟服务器的配置文件里,不论在6还是7上,格式其实只有头和尾的容器和第一行的 SetHandler server-status是必填的,其余后面的那些是之前所提到的用户访问控制
而如果设置了此条,我们将会得到更详细的页面信息
14、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...]
curl的常用选项:
-A/--user-agent <string> 设置用户代理发送给服务器 --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
15、user/group指定以哪个用户的身份运行httpd服务进程;
配置文件中: User apache Group apache
16、使用mod_deflate模块压缩页面优化传输速度
适用场景: (1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持; (2) 压缩适于压缩的资源,例如文件;
17、https, http over ssl
SSL会话的简化过程 (1) 客户端发送可供选择的加密方式,并向服务器请求证书; (2) 服务器端发送证书以及选定的加密方式给客户端; (3) 客户端取得证书并进行证书验正: 如果信任给其发证书的CA: (a) 验正证书来源的合法性;用CA的公钥解密证书上数字签名; (b) 验正证书的内容的合法性:完整性验正 (c) 检查证书的有效期限; (d) 检查证书是否被吊销; (e) 证书中拥有者的名字,与访问的目标主机要一致; (4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换; (5) 服务用此密钥加密用户请求的资源,响应给客户端;
注意:SSL会话是基于IP地址创建;所以单IP的主机上,仅可以使用一个https虚拟主机;
配置httpd支持https: (1) 为服务器申请数字证书; 测试:通过私建CA发证书 (a) 创建私有CA (b) 在服务器创建证书签署请求 (c) CA签证 (2) 配置httpd支持使用ssl,及使用的证书; # yum -y install mod_ssl
配置文件:/etc/httpd/conf.d/ssl.conf DocumentRoot ServerName SSLCertificateFile SSLCertificateKeyFile 上述路径改为相应的配置
之前学习openssl时我曾在7上建立过自签证书,就顺便拿来用了
而此次我也将7作为主机,也就是自产自销
先生成私钥
~]# mkdir /etc/httpd/ssl ~]# cd /etc/httpd/ssl ~]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
接着生成请求:
~]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
上图为请求过程
下面我们要请求的CA就要签证了,因为就是自己,所以好办事
~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
之后
~]#cp /etc/pki/CA/certs/httpd.crt /etc/httpd/ssl/
最后配置httpd支持使用ssl,及使用的证书; # yum -y install mod_ssl
此模块一般来说是要自己安装的
配置文件:/etc/httpd/conf.d/ssl.conf DocumentRoot ServerName SSLCertificateFile SSLCertificateKeyFile 上述路径改为相应的配置
18、httpd自带的工具程序 htpasswd:basic认证基于文件实现时,用到的账号密码文件生成工具; htdbm/htdigest apachectl:httpd自带的服务控制脚本,支持start和stop; apxs:由httpd-devel包提供,扩展httpd使用第三方模块的工具:Apache eXtenSion tool rotatelogs:日志滚动工具; access.log -->access.log, access.1.log -->access.log, acccess.1.log, access.2.log suexec:访问某些有特殊权限配置的资源时,临时切换至指定用户身份运行; ab: apache bench 19、httpd的压力测试工具 ab, webbench, http_load, seige jmeter, loadrunner tcpcopy:网易,复制生产环境中的真实请求,并将之保存下来; ab [OPTIONS] URL -n:总请求数; -c:模拟的并发数; -k:以持久连接模式 测试;
以上就是httpd-2.2的基本配置
httpd-2.4: 新特性: (1) MPM支持运行为DSO机制;以模块形式按需加载; (2) event MPM生产环境可用; (3) 异步读写机制; (4) 支持每模块及每目录的单独日志级别定义; (5) 每请求相关的专用配置; (6) 增强版的表达式分析器; (7) 毫秒级持久连接时长定义; (8) 基于FQDN的虚拟主机也不再需要NameVirutalHost指令; (9) 新指令,AllowOverrideList; (10) 支持用户自定义变量; (11) 更低的内存消耗; 新模块: (1) mod_proxy_fcgi (2) mod_proxy_scgi (3) mod_remoteip
配置应用不同于httpd-2.2的地方: (1) 切换使用的MPM 编辑配置文件/etc/httpd/conf.modules.d/00-mpm.conf,启用要启用的MPM相关的LoadModule指令即可。 (2) 基于IP的访问控制 允许所有主机访问:Require all granted 拒绝所有主机访问:Require all denied 控制特定的IP访问: Require ip IPADDR:授权指定来源的IP访问; Require not ip IPADDR:拒绝 控制特定的主机访问: Require host HOSTNAME:授权指定来源的主机访问; Require not host HOSTNAME:拒绝 HOSTNAME: FQDN:特定主机名 domin.tld:指定域名下的所有主机 <RequireAll> Require all granted Require not ip IP_ADDR </RequireAll> (3) 虚拟主机 基于FQDN的虚拟主机也不再需要NameVirutalHost指令; <VirtualHost *:80> ServerName DocumentRoot
<Directory “ ”> Options None AllowOverride None Require all granted </Directory> </VirtualHost> 注意:任意目录下的页面只有显式授权才能被访问 (4) KeepAliveTimeout #ms 毫秒级持久连接时长定义;
熟悉了这些配置以后,我们就可以更好地管理web服务器,同时可以把一些配置写成脚本,既方便又能避免误操作带来的困扰。由于上述的一些差异,6和7上的脚本可能会有些不同,当然,牛人可以写一个在两者之间通用的脚本,但这对于我们来说,性价比还是太低了,有时候,还是自己动手去配置文件里改才最能解决问题。